{"version":3,"file":"assets/chunk.65aeae24fe68ff295c54.js","mappings":"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","sources":["webpack://editor/./application/template.hbs","webpack://editor/./playground/template.hbs","webpack://editor/./helpers/and.ts","webpack://editor/./components/instrument-import.ts","webpack://editor/./components/instrument-settings-editor.ts","webpack://editor/./helpers/round.ts","webpack://editor/./components/sample-editor.ts","webpack://editor/./components/drumset-editor.ts","webpack://editor/./restricted/drumsets/drumset/template.hbs","webpack://editor/./restricted/drumsets/template.hbs","webpack://editor/./restricted/index/template.hbs","webpack://editor/./restricted/playlists/index/template.hbs","webpack://editor/./restricted/playlists/playlist/template.hbs","webpack://editor/./restricted/playlists/template.hbs","webpack://editor/./restricted/songs/folder/index/template.hbs","webpack://editor/./restricted/songs/folder/song/template.hbs","webpack://editor/./restricted/songs/folder/template.hbs","webpack://editor/./restricted/songs/index/template.hbs","webpack://editor/./components/folder.ts","webpack://editor/./restricted/songs/template.hbs","webpack://editor/./components/progress.ts","webpack://editor/./modifiers/prevent-unload.ts","webpack://editor/./helpers/version.ts","webpack://editor/./components/error-popup.ts","webpack://editor/./components/status-bar.ts","webpack://editor/./components/help-popup.ts","webpack://editor/./restricted/template.hbs","webpack://editor/../rewritten-packages/ember-load-initializers.9c9aaa1f/node_modules/ember-load-initializers/index.js","webpack://editor/./app.ts","webpack://editor/./application/controller.ts","webpack://editor/./application/route.ts","webpack://editor/./assets/editor.js","webpack://editor/./components/button.ts","webpack://editor/./components/editable-field.ts","webpack://editor/./components/menu-button.ts","webpack://editor/./components/option-button.ts","webpack://editor/./components/selectable-item.ts","webpack://editor/./components/drag-drop-container.ts","webpack://editor/./helpers/set.ts","webpack://editor/./components/song-editor/part.ts","webpack://editor/../src/support/cache.ts","webpack://editor/../src/support/compatibility/isBrowser.ts","webpack://editor/../src/support/utils/alias.ts","webpack://editor/../src/support/compatibility/apis.ts","webpack://editor/../src/support/utils/types.ts","webpack://editor/../src/support/utils/array.ts","webpack://editor/../src/support/utils/strings.ts","webpack://editor/../src/support/utils/equal.ts","webpack://editor/../src/support/utils/noop.ts","webpack://editor/../src/support/utils/function.ts","webpack://editor/../src/support/utils/object.ts","webpack://editor/../src/support/utils/math.ts","webpack://editor/../src/support/dom/attribute.ts","webpack://editor/../src/support/dom/class.ts","webpack://editor/../src/support/dom/traversal.ts","webpack://editor/../src/support/dom/manipulation.ts","webpack://editor/../src/support/dom/create.ts","webpack://editor/../src/support/dom/style.ts","webpack://editor/../src/support/dom/dimensions.ts","webpack://editor/../src/support/dom/events.ts","webpack://editor/../src/support/dom/offset.ts","webpack://editor/../src/support/dom/scroll.ts","webpack://editor/../src/support/eventListeners.ts","webpack://editor/../src/options.ts","webpack://editor/../src/classnames.ts","webpack://editor/../src/plugins/plugins.ts","webpack://editor/../src/plugins/sizeObserverPlugin/sizeObserverPlugin.ts","webpack://editor/../src/setups/structureSetup/structureSetup.utils.ts","webpack://editor/../src/plugins/scrollbarsHidingPlugin/scrollbarsHidingPlugin.ts","webpack://editor/../src/plugins/clickScrollPlugin/clickScrollPlugin.ts","webpack://editor/../src/environment.ts","webpack://editor/../src/initialization.ts","webpack://editor/../src/instances.ts","webpack://editor/../src/observers/domObserver.ts","webpack://editor/../src/observers/sizeObserver.ts","webpack://editor/../src/observers/trinsicObserver.ts","webpack://editor/../src/setups/observersSetup/observersSetup.ts","webpack://editor/../src/setups/scrollbarsSetup/scrollbarsSetup.elements.ts","webpack://editor/../src/setups/scrollbarsSetup/scrollbarsSetup.events.ts","webpack://editor/../src/setups/structureSetup/structureSetup.elements.ts","webpack://editor/../src/setups/structureSetup/updateSegments/trinsicUpdateSegment.ts","webpack://editor/../src/setups/structureSetup/updateSegments/paddingUpdateSegment.ts","webpack://editor/../src/setups/structureSetup/updateSegments/overflowUpdateSegment.ts","webpack://editor/../src/setups/setups.ts","webpack://editor/../src/setups/structureSetup/structureSetup.ts","webpack://editor/../src/setups/scrollbarsSetup/scrollbarsSetup.ts","webpack://editor/../src/overlayscrollbars.ts","webpack://editor/../src/plugins/optionsValidationPlugin/optionsValidationPlugin.ts","webpack://editor/./components/velocity-values.ts","webpack://editor/./components/track-editor.ts","webpack://editor/./components/song-editor.ts","webpack://editor/./modifiers/on-key-up.ts","webpack://editor/./components/virtual-pedal.ts","webpack://editor/./config/environment.js","webpack://editor/./helpers/add.ts","webpack://editor/./helpers/eq.ts","webpack://editor/./helpers/gt.ts","webpack://editor/./helpers/gte.ts","webpack://editor/./helpers/html-id.ts","webpack://editor/./helpers/not-eq.ts","webpack://editor/./helpers/not.ts","webpack://editor/./helpers/or.ts","webpack://editor/./helpers/pick.ts","webpack://editor/./helpers/queue.ts","webpack://editor/./models/command.ts","webpack://editor/./models/drumset-commands.ts","webpack://editor/./models/drumset.ts","webpack://editor/./models/folder-commands.ts","webpack://editor/./models/midi.ts","webpack://editor/./models/playlist-commands.ts","webpack://editor/./models/project-commands.ts","webpack://editor/./models/project.ts","webpack://editor/./models/song-commands.ts","webpack://editor/./models/song.ts","webpack://editor/./modifiers/disabled.ts","webpack://editor/./modifiers/mark-droppable.ts","webpack://editor/./modifiers/on-click-outside.ts","webpack://editor/./modifiers/on-key.ts","webpack://editor/./modifiers/scroll-into-view.ts","webpack://editor/./modifiers/selected.ts","webpack://editor/../../sortablejs/modular/sortable.esm.js","webpack://editor/./modifiers/sortable.ts","webpack://editor/./playground/controller.ts","webpack://editor/./playground/route.ts","webpack://editor/./restricted/controller.ts","webpack://editor/./restricted/drumsets/controller.ts","webpack://editor/./restricted/drumsets/drumset/controller.ts","webpack://editor/./restricted/drumsets/drumset/route.ts","webpack://editor/./restricted/drumsets/index/route.ts","webpack://editor/./restricted/drumsets/route.ts","webpack://editor/./restricted/index/route.ts","webpack://editor/./restricted/playlists/controller.ts","webpack://editor/./restricted/playlists/index/route.ts","webpack://editor/./restricted/playlists/playlist/controller.ts","webpack://editor/./restricted/playlists/playlist/route.ts","webpack://editor/./restricted/playlists/route.ts","webpack://editor/./restricted/route.ts","webpack://editor/./restricted/songs/controller.ts","webpack://editor/./restricted/songs/folder/index/controller.ts","webpack://editor/./restricted/songs/folder/index/route.ts","webpack://editor/./restricted/songs/folder/route.ts","webpack://editor/./restricted/songs/folder/song/controller.ts","webpack://editor/./restricted/songs/folder/song/route.ts","webpack://editor/./restricted/songs/index/controller.ts","webpack://editor/./restricted/songs/index/route.ts","webpack://editor/./restricted/songs/route.ts","webpack://editor/./router.ts","webpack://editor/./services/pasteboard.ts","webpack://editor/./services/progress.ts","webpack://editor/../../fflate/esm/browser.js","webpack://editor/./services/project-manager.ts","webpack://editor/./services/song-player.ts","webpack://editor/./services/status.ts","webpack://editor/./services/undo-manager.ts","webpack://editor/./services/virtual-pedal.ts","webpack://editor/./utils/base64-to-array-buffer.ts","webpack://editor/./utils/bbff-filename.ts","webpack://editor/./utils/build-gain-table.ts","webpack://editor/./utils/constrain-value.ts","webpack://editor/./utils/crc32.ts","webpack://editor/./utils/element-exists.ts","webpack://editor/./utils/file-size.ts","webpack://editor/./utils/gm-drum-map.ts","webpack://editor/./utils/list.ts","webpack://editor/./utils/music-utils.ts","webpack://editor/./utils/name-filter.ts","webpack://editor/./utils/play-accent.ts","webpack://editor/./utils/play-instrument.ts","webpack://editor/./utils/promise-batch.ts","webpack://editor/./utils/reader.ts","webpack://editor/./utils/shuffle.ts","webpack://editor/./utils/unique.ts","webpack://editor/./utils/wait.ts","webpack://editor/./utils/writer.ts","webpack://editor/../rewritten-packages/@ember-data/debug.3e5e830c/node_modules/@ember-data/debug/index.js","webpack://editor/../rewritten-packages/@ember-data/graph.0fb6712d/node_modules/@ember-data/graph/-private.js","webpack://editor/../rewritten-packages/@ember-data/legacy-compat.8101e105/node_modules/@ember-data/legacy-compat/-private-1aicprWG.js","webpack://editor/../rewritten-packages/@ember-data/request.23b29b20/node_modules/@ember-data/request/context-g9X123os.js","webpack://editor/../rewritten-packages/@ember-data/request.23b29b20/node_modules/@ember-data/request/index.js","webpack://editor/../rewritten-packages/@ember-data/serializer.74863000/node_modules/@ember-data/serializer/embedded-records-mixin-HTw8JJT1.js","webpack://editor/../rewritten-packages/@ember-data/serializer.74863000/node_modules/@ember-data/serializer/string-A02hFTMo.js","webpack://editor/../rewritten-packages/@warp-drive/core-types.829b4442/node_modules/@warp-drive/core-types/identifier.js","webpack://editor/../rewritten-packages/@ember-data/store.5a14b26a/node_modules/@ember-data/store/cache-handler-XLbbNJdo.js","webpack://editor/../rewritten-packages/@ember-data/tracking.39ae9f10/node_modules/@ember-data/tracking/-private.js","webpack://editor/../rewritten-packages/@ember-data/tracking.39ae9f10/node_modules/@ember-data/tracking/index.js","webpack://editor/../rewritten-packages/@ember/string.f0c62c01/node_modules/@ember/string/cache.js","webpack://editor/../rewritten-packages/@ember/string.f0c62c01/node_modules/@ember/string/index.js","webpack://editor/../../@fortawesome/fontawesome-svg-core/index.mjs","webpack://editor/../rewritten-packages/ember-get-config.670ffa00/node_modules/ember-get-config/index.js","webpack://editor/../rewritten-packages/@fortawesome/ember-fontawesome.522e8c56/node_modules/@fortawesome/ember-fontawesome/components/fa-icon.hbs","webpack://editor/../rewritten-packages/@fortawesome/ember-fontawesome.522e8c56/node_modules/@fortawesome/ember-fontawesome/components/fa-icon.js","webpack://editor/../rewritten-packages/@glimmer/component.2cea77ab/node_modules/@glimmer/component/-private/component.js","webpack://editor/../rewritten-packages/@glimmer/component.2cea77ab/node_modules/@glimmer/component/-private/destroyables.js","webpack://editor/../rewritten-packages/@glimmer/component.2cea77ab/node_modules/@glimmer/component/-private/base-component-manager.js","webpack://editor/../rewritten-packages/@glimmer/component.2cea77ab/node_modules/@glimmer/component/-private/ember-component-manager.js","webpack://editor/../rewritten-packages/@glimmer/component.2cea77ab/node_modules/@glimmer/component/index.js","webpack://editor/../rewritten-packages/@glimmer/tracking.e0019e0a/node_modules/@glimmer/tracking/index.js","webpack://editor/../rewritten-packages/@warp-drive/core-types.829b4442/node_modules/@warp-drive/core-types/request.js","webpack://editor/../rewritten-packages/ember-cli-app-version.3599fbb7/node_modules/ember-cli-app-version/initializer-factory.js","webpack://editor/../rewritten-packages/ember-cli-app-version.3599fbb7/node_modules/ember-cli-app-version/_app_/initializers/app-version.js","webpack://editor/../rewritten-packages/ember-data.782be7ad/node_modules/ember-data/_app_/initializers/ember-data.js","webpack://editor/../rewritten-packages/@ember-data/json-api.48e6478b/node_modules/@ember-data/json-api/index.js","webpack://editor/../rewritten-packages/@ember-data/legacy-compat.8101e105/node_modules/@ember-data/legacy-compat/index.js","webpack://editor/../rewritten-packages/@warp-drive/core-types.829b4442/node_modules/@warp-drive/core-types/symbols.js","webpack://editor/../rewritten-packages/@ember-data/model.0d06b5b9/node_modules/@ember-data/model/model-YsOraZ6y.js","webpack://editor/../rewritten-packages/@ember-data/model.0d06b5b9/node_modules/@ember-data/model/util-3DHZJC9h.js","webpack://editor/../rewritten-packages/@ember-data/model.0d06b5b9/node_modules/@ember-data/model/hooks-dXmQbIOF.js","webpack://editor/../rewritten-packages/@ember-data/request.23b29b20/node_modules/@ember-data/request/fetch.js","webpack://editor/../rewritten-packages/ember-data.782be7ad/node_modules/ember-data/store.js","webpack://editor/../rewritten-packages/ember-resolver.64db07ec/node_modules/ember-resolver/container-debug-adapter.js","webpack://editor/../rewritten-packages/ember-resolver.64db07ec/node_modules/ember-resolver/string/cache.js","webpack://editor/../rewritten-packages/ember-resolver.64db07ec/node_modules/ember-resolver/string/index.js","webpack://editor/../rewritten-packages/ember-resolver.64db07ec/node_modules/ember-resolver/index.js","webpack://editor/../rewritten-packages/ember-resolver.64db07ec/node_modules/ember-resolver/utils/class-factory.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/browser-environment/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/container/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/environment/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/error-handling/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@simple-dom/document.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@glimmer/node.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/glimmer/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/meta/lib/meta.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/metal/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/owner/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/runtime/lib/mixins/registry_proxy.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/runtime/lib/mixins/container_proxy.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/runtime/lib/mixins/comparable.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/runtime/lib/mixins/action_handler.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/runtime/lib/mixins/-proxy.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/runtime/lib/mixins/target_action_support.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/runtime/lib/ext/rsvp.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/string/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/utils/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/views/lib/system/utils.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/views/lib/system/action_manager.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/views/lib/system/event_dispatcher.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/views/lib/component_lookup.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/views/lib/views/states.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/views/lib/views/core_view.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/views/lib/mixins/class_names_support.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/views/lib/mixins/child_views_support.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/views/lib/mixins/view_state_support.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/views/lib/mixins/view_support.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/views/lib/mixins/action_support.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/-internals/views/lib/compat/attrs.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/application/lib/lazy_load.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/application/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/application/instance.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/application/namespace.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/array/-internals.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/array/lib/make-array.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/array/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/array/proxy.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/controller/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/debug/container-debug-adapter.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/debug/data-adapter.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/debug/lib/deprecate.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/debug/lib/warn.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/debug/lib/inspect.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/debug/lib/testing.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/debug/lib/capture-render-tree.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/debug/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/destroyable/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/dag-map/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/engine/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/engine/instance.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/engine/lib/engine-parent.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/enumerable/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/enumerable/mutable.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/helper/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/instrumentation/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/modifier/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/object/-internals.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/object/compat.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/object/lib/computed/computed_macros.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/object/lib/computed/reduce_computed_macros.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/object/core.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/object/evented.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/object/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/object/mixin.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/object/observable.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/object/promise-proxy-mixin.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/object/proxy.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/owner/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/routing/lib/router_state.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/routing/lib/routing-service.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/routing/lib/generate_controller.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/routing/lib/cache.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/routing/lib/dsl.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/routing/lib/controller_for.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/routing/hash-location.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/routing/history-location.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/routing/lib/location-utils.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/routing/lib/utils.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/routing/none-location.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/routing/route.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/routing/router-service.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/routing/router.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/runloop/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/service/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/utils/lib/is_none.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/utils/lib/is_empty.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/utils/lib/is_blank.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/utils/lib/is_present.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/utils/lib/is-equal.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/utils/lib/type-of.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/utils/lib/compare.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@glimmer/debug.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@glimmer/destroyable.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@glimmer/global-context.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@glimmer/manager.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@glimmer/encoder.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@glimmer/opcode-compiler.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@glimmer/owner.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@glimmer/program.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@glimmer/reference.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@glimmer/runtime.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@glimmer/util.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@glimmer/validator.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@glimmer/vm.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@glimmer/wire-format.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/backburner.js/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/canary-features/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/test/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/@ember/template-compilation/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/ember/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/ember/version.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/route-recognizer/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/router_js/index.js","webpack://editor/../rewritten-packages/ember-source.3282c560/node_modules/ember-source/rsvp/index.js","webpack://editor/../../@embroider/macros/src/addon/es-compat2.js","webpack://editor/../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://editor/../src/-private/class-based/modifier-manager.ts","webpack://editor/../src/-private/class-based/modifier.ts","webpack://editor/../src/-private/function-based/modifier.ts","webpack://editor/../src/-private/function-based/modifier-manager.ts","webpack://editor/../../src/helpers/page-title.ts","webpack://editor/../../src/services/page-title.ts","webpack://editor/../../@floating-ui/utils/dist/floating-ui.utils.mjs","webpack://editor/../../@floating-ui/core/dist/floating-ui.core.mjs","webpack://editor/../../@floating-ui/utils/dist/floating-ui.utils.dom.mjs","webpack://editor/../../@floating-ui/dom/dist/floating-ui.dom.mjs","webpack://editor/../../src/modifiers/velcro.ts","webpack://editor/../../src/middleware/velcro-data.ts","webpack://editor/../../lodash.isequal/index.js","webpack://editor/../../@babel/runtime/helpers/esm/applyDecoratedDescriptor.js","webpack://editor/../../@babel/runtime/helpers/esm/typeof.js","webpack://editor/../../@babel/runtime/helpers/esm/toPropertyKey.js","webpack://editor/../../@babel/runtime/helpers/esm/toPrimitive.js","webpack://editor/../../@babel/runtime/helpers/esm/defineProperty.js","webpack://editor/../../@babel/runtime/helpers/esm/initializerDefineProperty.js","webpack://editor/../../nanoevents/index.js"],"sourcesContent":["import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{outlet}}\\n\",{ moduleName: \"editor/application/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{page-title \\\"Playground\\\"}}\\n\\n
\\n \\n
\\n\",{ moduleName: \"editor/playground/template.hbs\" })","export default function and(...args: any[]) {\n return !!(args.length && args.every((arg) => arg));\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n and: typeof and;\n }\n}\n","import { template } from \"@ember/template-compiler\";\nimport disabled from 'editor/modifiers/disabled';\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport type Drumset from 'editor/models/drumset';\nimport type { Instrument } from 'editor/models/drumset';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport SelectableItem from './selectable-item';\nimport selected from 'editor/modifiers/selected';\nimport { tracked } from '@glimmer/tracking';\nimport type { DrumsetFile } from 'editor/services/project-manager';\nimport eq from 'editor/helpers/eq';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\nimport { action } from '@ember/object';\nimport Button from './button';\ninterface InstrumentImpportSignature {\n Element: HTMLDivElement;\n Args: {\n drumset: Drumset;\n // eslint-disable-next-line no-unused-vars\n addInstruments: (instruments: Instrument[]) => void;\n };\n Blocks: {\n };\n}\n// Refactor: This shares a lot of code with the Part/BuildAccentWindow component\nexport default class InstrumentImpport extends Component {\n @service\n projectManager: ProjectManagerService;\n @tracked\n selectedDrumset?: DrumsetFile;\n @tracked\n instrumentsLoading = false;\n @tracked\n selectedInstruments: Instrument[] = [];\n constructor(owner1: unknown, args1: InstrumentImpportSignature['Args']){\n super(owner1, args1);\n }\n get drumset() {\n return this.args.drumset;\n }\n @action\n async selectDrumset(drumset1: DrumsetFile) {\n this.selectedDrumset = drumset1;\n this.instrumentsLoading = true;\n await drumset1.parse();\n this.instrumentsLoading = false;\n }\n get availableDrumsets() {\n return this.projectManager.drumsets.filter((d1)=>!d1.drumset || d1.drumset != this.args.drumset).sort((a1, b1)=>a1.name.localeCompare(b1.name));\n }\n get availableInstruments() {\n const drumsetPlayableInstruments1 = this.selectedDrumset?.drumset?.playableInstruments || [];\n return drumsetPlayableInstruments1.filter((i1)=>this.selectedInstruments.includes(i1) || !this.selectedInstruments.map((i1)=>i1.id).includes(i1.id)).filter((i1)=>!this.drumset.playableInstruments.map((i1)=>i1.id).includes(i1.id));\n }\n @action\n isSelectedInstrument(instrument1: Instrument) {\n return this.selectedInstruments.includes(instrument1);\n }\n @action\n toggleInstrument(instrument1: Instrument, ev1?: MouseEvent) {\n if (ev1?.shiftKey) {\n const firstSelectedInstrument1 = this.selectedInstruments.at(0);\n const lastSelectedInstrument1 = this.selectedInstruments.at(-1);\n if (firstSelectedInstrument1 && lastSelectedInstrument1) {\n const firstIndex1 = this.availableInstruments.indexOf(firstSelectedInstrument1);\n const lastIndex1 = this.availableInstruments.indexOf(lastSelectedInstrument1);\n const currentIndex1 = this.availableInstruments.indexOf(instrument1);\n if (currentIndex1 < firstIndex1) {\n this.selectedInstruments = [\n ...this.selectedInstruments,\n ...this.availableInstruments.slice(currentIndex1, firstIndex1 + 1)\n ];\n } else if (currentIndex1 > lastIndex1) {\n this.selectedInstruments = [\n ...this.selectedInstruments,\n ...this.availableInstruments.slice(lastIndex1, currentIndex1 + 1)\n ];\n } else {\n this.selectedInstruments = [\n ...this.selectedInstruments,\n ...this.availableInstruments.slice(firstIndex1, currentIndex1 + 1)\n ];\n }\n } else {\n this.selectedInstruments = [\n instrument1\n ];\n }\n } else {\n if (this.isSelectedInstrument(instrument1)) {\n this.selectedInstruments = this.selectedInstruments.filter((i1)=>i1 != instrument1);\n } else {\n this.selectedInstruments = [\n ...this.selectedInstruments,\n instrument1\n ];\n }\n }\n // remove window selection\n window.getSelection()?.removeAllRanges();\n }\n static{\n template(`\n \n

Import instruments

\n
\n
\n
\n {{#each this.availableDrumsets as |drumset|}}\n {{drumset.name}}\n {{/each}}\n
\n
\n
\n
\n {{#if this.instrumentsLoading}}\n
Loading...
\n {{else}}\n {{#each this.availableInstruments as |instrument|}}\n {{instrument.id}}. {{instrument.name}}\n\n {{else}}\n No available instruments\n {{/each}}\n {{/if}}\n
\n
\n
\n
\n Import instruments\n
\n \n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n InstrumentImpport: typeof InstrumentImpport;\n }\n}\n","import { template } from \"@ember/template-compiler\";\nimport { fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport FaIcon from '@fortawesome/ember-fontawesome/components/fa-icon';\nimport Component from '@glimmer/component';\nimport eq from 'editor/helpers/eq';\nimport not from 'editor/helpers/not';\nimport pick from 'editor/helpers/pick';\nimport type { IInstrument } from 'editor/models/drumset';\nimport disabled from 'editor/modifiers/disabled';\nimport Button from './button';\nimport { MultiInstrument } from './drumset-editor';\nimport EditableField from './editable-field';\nimport { concat } from '@ember/helper';\nimport or from 'editor/helpers/or';\ninterface InstrumentSettingsEditorSignature {\n Element: HTMLDivElement;\n Args: {\n instrument: IInstrument;\n addSamples?: () => void;\n autoSort?: () => void;\n // eslint-disable-next-line no-unused-vars\n renameInstrument: (name: string) => void;\n availableMidiIds: {\n id: number;\n name: string;\n }[];\n // eslint-disable-next-line no-unused-vars\n updateNonPercussion: (nonPercussion: number) => void;\n // eslint-disable-next-line no-unused-vars\n updateInstrumentID: (id: string) => void;\n // eslint-disable-next-line no-unused-vars\n updateChokeGroup: (value: string) => void;\n // eslint-disable-next-line no-unused-vars\n updateFillChokeGroup: (value: string) => void;\n // eslint-disable-next-line no-unused-vars\n updateFillChokeDelay: (value: string) => void;\n // eslint-disable-next-line no-unused-vars\n updateVolume: (value: string) => void;\n // eslint-disable-next-line no-unused-vars\n updatePolyphony: (value: string) => void;\n };\n Blocks: {\n };\n}\nexport default class InstrumentSettingsEditor extends Component {\n constructor(owner1: unknown, args1: InstrumentSettingsEditorSignature['Args']){\n super(owner1, args1);\n }\n get isMultiInstrument() {\n return this.args.instrument instanceof MultiInstrument;\n }\n isUndefined(value1: number) {\n if (value1 === -1) {\n return true;\n }\n return false;\n }\n definedValue(value1: number): number | undefined {\n if (value1 === -1) {\n return undefined;\n }\n return value1;\n }\n static{\n template(`\n
\n
\n {{@instrument.name}}\n {{#unless this.isMultiInstrument}}\n \n {{/unless}}\n
\n
\n
\n
\n \n \n \n {{#unless this.isMultiInstrument}}\n \n {{/unless}}\n \n \n \n
\n
\n \n \n
\n
\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n InstrumentSettingsEditor: typeof InstrumentSettingsEditor;\n }\n}\n","export default function round(number: number, precision: number = 0) {\n return Number(number.toFixed(precision));\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n round: typeof round;\n }\n}\n","import { template } from \"@ember/template-compiler\";\nimport { fn, hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport eq from 'editor/helpers/eq';\nimport gt from 'editor/helpers/gt';\nimport notEq from 'editor/helpers/not-eq';\nimport round from 'editor/helpers/round';\nimport Command, { CompositeCommand } from 'editor/models/command';\nimport Drumset, { Velocity, type Instrument } from 'editor/models/drumset';\nimport { AddSamplesToInstrumentCommand, RemoveSampleFromInstrumentCommand, UpdateSampleVelocityCommand, RenameVelocityCommand } from 'editor/models/drumset-commands';\nimport disabled from 'editor/modifiers/disabled';\nimport markDroppable from 'editor/modifiers/mark-droppable';\nimport onKey from 'editor/modifiers/on-key';\nimport scrollIntoView from 'editor/modifiers/scroll-into-view';\nimport selected from 'editor/modifiers/selected';\nimport sortable from 'editor/modifiers/sortable';\nimport type SongPlayerService from 'editor/services/song-player';\nimport type UndoManagerService from 'editor/services/undo-manager';\nimport bbffFilename from 'editor/utils/bbff-filename';\nimport constrainValue from 'editor/utils/constrain-value';\nimport { getGainNodeForVelocity } from 'editor/utils/play-instrument';\nimport { modifier } from 'ember-modifier';\nimport Button from './button';\nimport SelectableItem from './selectable-item';\nimport nameFilter from 'editor/utils/name-filter';\nlet VelocityGroup = class VelocityGroup {\n vel: number = 0;\n velocities: Velocity[] = [];\n constructor(velocity1: Velocity){\n this.vel = velocity1.vel;\n this.velocities.push(velocity1);\n }\n};\nfunction autoSort(samples1: Velocity[]): [Velocity, number][] {\n if (samples1.length === 0) return [];\n const sorted1 = samples1.toSorted((v11, v21)=>v11.loudness - v21.loudness);\n if (sorted1.length < 2) {\n return samples1.map((v3)=>[\n v3,\n v3.vel ?? 0\n ]);\n }\n // Take the sorted array and group it into sub arrays where the difference between the loudness of two consecutive elements is less than 1 dB\n const groups1: Velocity[][] = [];\n let currentGroup1: Velocity[] = [];\n for(let i1 = 0; i1 < sorted1.length; i1++){\n const velocity1 = sorted1[i1]!;\n const nextVelocity1 = sorted1[i1 + 1];\n currentGroup1.push(velocity1);\n if (nextVelocity1 && nextVelocity1.loudness - currentGroup1[0]!.loudness > 1.5) {\n groups1.push(currentGroup1);\n currentGroup1 = [];\n }\n }\n if (currentGroup1.length) {\n groups1.push(currentGroup1);\n }\n const loudest1 = 0;\n const quietest1 = sorted1[0]!.loudness;\n const velocities1: [Velocity, number][] = [];\n const firstGroup1 = groups1[0]!;\n firstGroup1.forEach((v3)=>{\n velocities1.push([\n v3,\n 0\n ]);\n });\n for(var i1 = 1, ii1 = groups1.length; i1 < ii1; i1++){\n const group1 = groups1[i1]!;\n const avg1 = group1.reduce((acc1, v3)=>acc1 + v3.loudness, 0) / group1.length;\n // Calculate where avg sit between the quietest and the loudest?\n const position1 = (avg1 - quietest1) / (loudest1 - quietest1);\n const minVelocity1 = 8; // minimum velocity value\n const maxVelocity1 = 111; // maximum velocity value\n const velocity1 = Math.round(minVelocity1 + position1 * (maxVelocity1 - minVelocity1));\n group1.forEach((v3)=>{\n velocities1.push([\n v3,\n velocity1\n ]);\n });\n }\n return velocities1;\n}\nconst changeVelocity = modifier((element1: HTMLElement, [group1, minVelocity1, maxVelocity1]: [VelocityGroup, number, number])=>{\n let parentElement1: HTMLElement, dragOffsetY1 = 0;\n const moveTo1 = (y1: number)=>{\n element1.style.transform = `translate3d(0, ${y1}px, 0)`;\n };\n const onMouseMove1 = (ev1: MouseEvent)=>{\n ev1.preventDefault();\n ev1.stopImmediatePropagation();\n const rect1 = parentElement1.getBoundingClientRect();\n const maxY1 = rect1.bottom - (maxVelocity1 / 127) * rect1.height;\n const minY1 = rect1.bottom - (minVelocity1 / 127) * rect1.height;\n let y1 = constrainValue(ev1.clientY, maxY1, minY1);\n const posVel1 = Math.round((1 - (y1 - rect1.top) / rect1.height) * 127);\n const velocity1 = constrainValue(posVel1, minVelocity1, maxVelocity1);\n document.querySelectorAll('input.vel-group').forEach((el1)=>el1.dispatchEvent(new CustomEvent('bbff.group-vel-change', {\n detail: {\n group: group1,\n velocity: velocity1\n }\n })));\n moveTo1(y1 - dragOffsetY1);\n };\n const onPointerUp1 = (ev1: PointerEvent)=>{\n document.removeEventListener('pointerup', onPointerUp1);\n element1.releasePointerCapture(ev1.pointerId);\n };\n const onMouseUp1 = (ev1: MouseEvent)=>{\n document.removeEventListener('mouseup', onMouseUp1);\n document.removeEventListener('mousemove', onMouseMove1);\n const rect1 = parentElement1.getBoundingClientRect();\n let y1 = constrainValue(ev1.clientY, rect1.top, rect1.bottom);\n const posVel1 = Math.round((1 - (y1 - rect1.top) / rect1.height) * 127);\n const velocity1 = constrainValue(posVel1, minVelocity1, maxVelocity1);\n parentElement1.dispatchEvent(new CustomEvent('bbff.group-vel-change', {\n detail: {\n group: group1,\n velocity: velocity1\n }\n }));\n dragOffsetY1 = 0;\n };\n const onPointerDown1 = (ev1: PointerEvent)=>{\n document.addEventListener('pointerup', onPointerUp1);\n element1.setPointerCapture(ev1.pointerId);\n };\n const onMouseDown1 = (ev1: MouseEvent)=>{\n ev1.preventDefault();\n dragOffsetY1 = ev1.clientY;\n document.addEventListener('mousemove', onMouseMove1);\n document.addEventListener('mouseup', onMouseUp1);\n };\n const cancelDragNDrop1 = (e1: DragEvent)=>{\n e1.preventDefault();\n };\n parentElement1 = element1.parentElement!;\n element1.addEventListener('mousedown', onMouseDown1, {\n capture: true\n });\n element1.addEventListener('pointerdown', onPointerDown1);\n element1.addEventListener('dragstart', cancelDragNDrop1);\n return ()=>{\n element1.removeEventListener('dragstart', cancelDragNDrop1);\n element1.removeEventListener('pointerdown', onPointerDown1);\n element1.removeEventListener('mousedown', onMouseDown1);\n };\n});\ninterface SampleEditorSignature {\n Element: HTMLDivElement;\n Args: {\n drumset: Drumset;\n instrument: Instrument;\n };\n Blocks: {\n default: [addSamples: () => void, autoSort: () => void];\n };\n}\nexport default class SampleEditor extends Component {\n @service\n songPlayer: SongPlayerService;\n @service\n undoManager: UndoManagerService;\n @service\n router: RouterService;\n undoUpdateTimer: number = 0;\n constructor(owner1: unknown, args1: SampleEditorSignature['Args']){\n super(owner1, args1);\n }\n get audioContext() {\n return this.songPlayer.audioContext;\n }\n get drumset() {\n return this.args.drumset;\n }\n get instrument() {\n return this.args.instrument;\n }\n get velocityGroups() {\n const groups1: VelocityGroup[] = [];\n this.instrument.velocities.forEach((velocity1)=>{\n const group1 = groups1.find((g1)=>g1.vel === velocity1.vel);\n if (group1) {\n group1.velocities.push(velocity1);\n } else {\n groups1.push(new VelocityGroup(velocity1));\n }\n });\n return groups1.reverse();\n }\n @tracked\n isDragging = false;\n dragTarget?: EventTarget | null;\n @action\n handleDragEnter(ev1: DragEvent) {\n this._cancelEvents(ev1);\n this.isDragging = true;\n this.dragTarget = ev1.target;\n }\n @action\n handleDragOver(ev1: DragEvent) {\n this._cancelEvents(ev1);\n if (ev1.dataTransfer) {\n ev1.dataTransfer.dropEffect = 'copy';\n }\n }\n @action\n handleDragLeave(ev1: DragEvent) {\n if (ev1.target == this.dragTarget) {\n this._cancelEvents(ev1);\n this.isDragging = false;\n this.dragTarget = undefined;\n }\n }\n @action\n async handleDrop(group1: VelocityGroup, ev1: DragEvent) {\n let files1 = ev1.dataTransfer?.files;\n this.isDragging = false;\n this.dragTarget = undefined;\n if (files1?.length) {\n this._cancelEvents(ev1);\n this.#addSampleFiles(files1, group1);\n }\n }\n @action\n async addSamples() {\n // eslint-disable-next-line no-undef\n let handles1: FileSystemFileHandle[];\n try {\n handles1 = await window.showOpenFilePicker({\n multiple: true,\n excludeAcceptAllOption: true,\n id: 'samples',\n startIn: 'music',\n types: [\n {\n description: 'Wave files',\n accept: {\n 'audio/wav': [\n '.wav'\n ]\n }\n }\n ]\n });\n } catch (err1: any) {\n if (err1.name === 'AbortError' && /user aborted/i.test(err1.message)) {\n return;\n }\n throw err1;\n }\n const files1 = await Promise.all(handles1.map((handle1)=>handle1.getFile()));\n this.#addSampleFiles(files1);\n }\n async #addSampleFiles(files1: FileList | File[], group1?: VelocityGroup) {\n group1 = group1 ?? this.velocityGroups[0]!;\n const velocityValue1 = group1.vel;\n let velocities1: Velocity[] = [];\n for(let i1 = 0, ii1 = files1.length; i1 < ii1; i1++){\n let file1 = files1[i1]!;\n const buffer1 = await file1.arrayBuffer();\n const velocity1 = await Drumset.parseWaveFile(buffer1);\n velocity1.vel = velocityValue1;\n velocity1.fileName = bbffFilename(file1.name);\n if (!this.instrument.velocities.find((v3)=>v3.crc === velocity1.crc)) {\n velocities1.push(velocity1);\n }\n }\n if (velocities1.length) {\n // If this is the first velocity group and it has no samples.\n if (this.velocityGroups.length === 1 && group1.velocities.length === 1 && !group1.velocities[0]!.data) {\n velocities1 = autoSort(velocities1).map(([sample1, velocity1])=>{\n sample1.vel = velocity1;\n return sample1;\n });\n }\n const command1 = new AddSamplesToInstrumentCommand(this.instrument, velocities1);\n this.undoManager.executeCommand(this.removeBlankSample(group1, command1));\n }\n }\n removeBlankSample(group1: VelocityGroup, command1: Command) {\n const blankVelocity1 = group1.velocities.find((v3)=>!v3.sample);\n if (blankVelocity1) {\n return new CompositeCommand(command1.name, [\n new RemoveSampleFromInstrumentCommand(this.instrument, blankVelocity1),\n command1\n ]);\n } else {\n return command1;\n }\n }\n _cancelEvents(ev1: DragEvent) {\n ev1.stopPropagation();\n ev1.preventDefault();\n }\n @action\n deleteSelectedSample(ev1: KeyboardEvent) {\n if (this.triggeredVelocity) {\n ev1?.stopImmediatePropagation();\n let command1: Command = new RemoveSampleFromInstrumentCommand(this.instrument, this.triggeredVelocity);\n command1.on('execute', ()=>{\n this.triggeredVelocity = undefined;\n });\n command1.on('reverse', (velocity1)=>{\n this.triggeredVelocity = velocity1;\n });\n if (this.instrument.velocities.length === 1) {\n command1 = new CompositeCommand(command1.name, [\n command1,\n new AddSamplesToInstrumentCommand(this.instrument, [\n new Velocity(0)\n ])\n ]);\n }\n this.undoManager.executeCommand(command1);\n }\n }\n @action\n autoSort() {\n const commands1 = autoSort(this.instrument.velocities).map(([sample1, velocity1])=>{\n return new UpdateSampleVelocityCommand(this.instrument, sample1, velocity1);\n });\n this.undoManager.executeCommand(new CompositeCommand('Auto sort samples', commands1));\n }\n get velocitiesByLevel() {\n return this.instrument.velocities.toSorted((v11, v21)=>v11.loudness - v21.loudness);\n }\n @action\n updateVelocity(group1: VelocityGroup, ev1: Event) {\n const velocity1 = parseInt((ev1.target).value);\n const sample1 = group1.velocities[0]!;\n if (!sample1.data) {\n sample1.vel = velocity1;\n } else {\n clearTimeout(this.undoUpdateTimer);\n group1.vel = velocity1;\n this.undoUpdateTimer = window.setTimeout(()=>{\n this.performVelocityUpdate(group1, velocity1);\n }, 800);\n }\n }\n @action\n handleUpdateVelocity(evt1: Event) {\n const ev1 = evt1;\n const { group: group1, velocity: velocity1 }: {\n group: VelocityGroup;\n velocity: number;\n } = ev1.detail;\n this.performVelocityUpdate(group1, velocity1);\n }\n performVelocityUpdate(group1: VelocityGroup, velocity1: number) {\n const commands1 = group1.velocities.map((v3)=>new UpdateSampleVelocityCommand(this.instrument, v3, velocity1));\n this.undoManager.executeCommand(new CompositeCommand('Update velocities', commands1));\n }\n @action\n renameVelocity(velocity1: Velocity, instrument1: Instrument, name1: string) {\n if (name1 != \"\") {\n this.undoManager.executeCommand(new RenameVelocityCommand(velocity1, instrument1, name1));\n }\n }\n @action\n async playVelocity(velocity1: Velocity, group1: VelocityGroup, ev1?: MouseEvent) {\n ev1?.stopPropagation();\n this.selectedVelocityGroup = group1;\n this.triggeredVelocity = velocity1;\n if (!velocity1.audio && velocity1.sample) {\n await this.audioContext.decodeAudioData(velocity1.sample).then((audio1)=>{\n velocity1.audio = audio1;\n });\n }\n this.audioContext.resume();\n const source1 = this.audioContext.createBufferSource();\n source1.connect(this.audioContext.destination);\n source1.buffer = velocity1.audio!;\n source1.start(0);\n }\n @action\n clearSelection() {\n this.triggeredVelocity = undefined;\n }\n @action\n calculateVelocityIndex(idx1: number) {\n return Math.abs(idx1 - this.velocityGroups.length);\n }\n @action\n calculateVelocityRange(idx1: number) {\n let velocityVal1 = this.velocityGroups.at(idx1)!.vel;\n if (idx1 === 0) {\n return velocityVal1 + \"-\" + 127;\n } else {\n return velocityVal1 + \"-\" + this.velocityGroups.at(idx1 - 1)!.vel;\n }\n }\n @action\n velocityInRangeIsGreater(velocity1: number, idx1: number) {\n let velocityVal1 = this.velocityGroups.at(idx1)!.vel;\n return velocityVal1 == velocity1;\n }\n @tracked\n triggeredVelocity?: Velocity;\n @tracked\n selectedVelocityGroup?: VelocityGroup;\n playSamples = modifier((element1: HTMLDivElement)=>{\n let elementRect1: DOMRect;\n let volume1 = 0;\n let intervalId1: number = 0;\n let triggerTimeout1 = 1000;\n const playSample1 = ()=>{\n const velocityValue1 = constrainValue(Math.round(volume1 * 127), 0, 127);\n const [gainNode1, velocity1] = getGainNodeForVelocity(this.songPlayer.audioContext, this.songPlayer.drumsetVolume, this.instrument, velocityValue1);\n if (velocity1 && gainNode1) {\n if (velocity1.audio) {\n this.triggeredVelocity = velocity1;\n gainNode1.connect(this.audioContext.destination);\n const source1 = this.audioContext.createBufferSource();\n source1.connect(gainNode1);\n source1.buffer = velocity1.audio;\n source1.start(0);\n const off1 = this.audioContext.currentTime + triggerTimeout1 / 1000;\n if (this.instrument.nonPercussion) {\n gainNode1.gain.setValueAtTime(volume1, off1 - 0.05);\n gainNode1.gain.exponentialRampToValueAtTime(0.05, off1);\n source1.stop(off1);\n }\n return source1;\n } else {\n console.error('No audio for instrument');\n }\n }\n };\n const setVolume1 = (ev1: MouseEvent)=>{\n volume1 = (elementRect1.height - (ev1.clientY - elementRect1.top)) / elementRect1.height;\n };\n const onMouseUp1 = (ev1: MouseEvent)=>{\n document.removeEventListener('mousemove', onMouseMove1);\n document.removeEventListener('mouseup', onMouseUp1);\n clearInterval(intervalId1);\n volume1 = 0;\n this.triggeredVelocity = undefined;\n ev1.preventDefault();\n ev1.stopPropagation();\n };\n const onMouseMove1 = (ev1: MouseEvent)=>{\n ev1.preventDefault();\n ev1.stopPropagation();\n setVolume1(ev1);\n };\n const onMouseDown1 = (ev1: MouseEvent)=>{\n if (ev1.eventPhase === Event.CAPTURING_PHASE) {\n return;\n }\n ev1.preventDefault();\n ev1.stopPropagation();\n this.audioContext.resume();\n elementRect1 = element1.getBoundingClientRect();\n setVolume1(ev1);\n clearInterval(intervalId1);\n playSample1();\n intervalId1 = setInterval(playSample1, triggerTimeout1);\n document.addEventListener('mousemove', onMouseMove1);\n document.addEventListener('mouseup', onMouseUp1);\n };\n element1.addEventListener('mousedown', onMouseDown1, {\n capture: true\n });\n return ()=>{\n element1.removeEventListener('mousedown', onMouseDown1);\n };\n });\n @action\n velocityStyle(velocity1: number) {\n return htmlSafe(`bottom: ${(velocity1 / 127) * 100}%;`);\n }\n @action\n addSampleGroup(velocity1: number) {\n const nextVel1 = this.velocityGroups.toReversed().find((g1)=>g1.vel > velocity1)?.vel ?? 127;\n const newVelocity1 = Math.floor((velocity1 + nextVel1) / 2);\n const newSample1 = new Velocity(newVelocity1);\n this.undoManager.executeCommand(new AddSamplesToInstrumentCommand(this.instrument, [\n newSample1\n ]));\n }\n @action\n removeSampleGroup(group1: VelocityGroup) {\n const commands1: Command[] = [];\n group1.velocities.forEach((velocity1)=>{\n commands1.push(new RemoveSampleFromInstrumentCommand(this.instrument, velocity1));\n });\n this.undoManager.executeCommand(new CompositeCommand('Remove velocity group', commands1));\n }\n @action\n moveSample(group1: VelocityGroup, fromElement1: HTMLElement, fromIndex1: number, toElement1: HTMLElement) {\n const sample1 = group1.velocities[fromIndex1];\n if (sample1) {\n const targetVelocity1 = parseInt(toElement1.dataset['velocityGroup']!);\n const toGroup1 = this.velocityGroups.find((g1)=>g1.vel === targetVelocity1)!;\n const command1 = new UpdateSampleVelocityCommand(this.instrument, sample1, targetVelocity1);\n this.undoManager.executeCommand(this.removeBlankSample(toGroup1, command1));\n }\n }\n minVelocity(groups1: VelocityGroup[], idx1: number) {\n return idx1 === groups1.length - 1 ? 0 : groups1[idx1 + 1]!.vel + 1;\n }\n maxVelocity(groups1: VelocityGroup[], idx1: number) {\n return idx1 === 0 ? 126 : groups1[idx1 - 1]!.vel - 1;\n }\n @action\n updateVelocityValue(group1: VelocityGroup, evt1: Event) {\n const ev1 = evt1;\n if (ev1.detail.group == group1) {\n const velocity1 = ev1.detail.velocity;\n (ev1.currentTarget).value = velocity1;\n }\n }\n static{\n template(`\n {{yield this.addSamples this.autoSort}}\n {{! template-lint-disable no-invalid-interactive }}\n \n
\n \n {{#each this.velocityGroups as |group idx|}}\n {{#if (notEq group.vel 0)}}\n \n {{/if}}\n {{/each}}\n
\n
\n
\n
\n
\n \n
\n
\n {{#each this.velocityGroups as |group idx|}}\n \n
\n

\n Dynamic Group {{this.calculateVelocityIndex idx}} ({{this.calculateVelocityRange idx}})\n

\n
\n
\n {{#unless (eq group.vel 126)}}\n
\n \n {{#if (gt this.velocityGroups.length 1)}}\n \n {{/if}}\n
\n {{/unless}}\n
\n \n
\n \n {{#each group.velocities as |velocity|}}\n {{#if (notEq null velocity.data)}}\n \n
\n
\n \n
\n {{velocity.name}}\n
\n \n
\n
\n
{{round velocity.duration 2}} sec
\n
{{round velocity.loudness 2}} dB
\n
\n
\n
\n {{/if}}\n {{/each}}\n
\n
\n \n {{/each}}\n \n \n \n \n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n SampleEditor: typeof SampleEditor;\n }\n}\n","import { template } from \"@ember/template-compiler\";\nimport { concat, fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport and from 'editor/helpers/and';\nimport eq from 'editor/helpers/eq';\nimport gte from 'editor/helpers/gte';\nimport htmlId from 'editor/helpers/html-id';\nimport pick from 'editor/helpers/pick';\nimport queue from 'editor/helpers/queue';\nimport { CompositeCommand } from 'editor/models/command';\nimport type Drumset from 'editor/models/drumset';\nimport { Instrument, type IInstrument } from 'editor/models/drumset';\nimport { AddInstrumentToDrumsetCommand, AddNewInstrumentToDrumsetCommand, DeleteInstrumentCommand, RenameInstrumentCommand, UpdateDrumsetVolumeCommand, UpdateInstrumentChokeGroupCommand, UpdateInstrumentFillChokeDelayCommand, UpdateInstrumentFillChokeGroupCommand, UpdateInstrumentIdCommand, UpdateInstrumentNonPercussionCommand, UpdateInstrumentPolyphonyCommand, UpdateInstrumentVolumeCommand } from 'editor/models/drumset-commands';\nimport onClickOutside from 'editor/modifiers/on-click-outside';\nimport onKey from 'editor/modifiers/on-key';\nimport selected from 'editor/modifiers/selected';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport type SongPlayerService from 'editor/services/song-player';\nimport type UndoManagerService from 'editor/services/undo-manager';\nimport gmDrumMap from 'editor/utils/gm-drum-map';\nimport nameFilter from 'editor/utils/name-filter';\nimport velcro from 'ember-velcro/modifiers/velcro';\nimport Button from './button';\nimport EditableField from './editable-field';\nimport InstrumentImpport from './instrument-import';\nimport InstrumentSettingsEditor from './instrument-settings-editor';\nimport MenuButton from './menu-button';\nimport OptionButton from './option-button';\nimport SampleEditor from './sample-editor';\nimport SelectableItem from './selectable-item';\nconst UNDO_DELAY = 800;\ninterface DrumsetEditorSignature {\n Element: HTMLDivElement;\n Args: {\n drumset: Drumset;\n // eslint-disable-next-line no-unused-vars\n renameDrumset: (name: string) => void;\n };\n Blocks: {\n };\n}\nexport class MultiInstrument implements IInstrument {\n instruments: IInstrument[];\n id = -1;\n name = 'Multiple Instruments';\n constructor(instruments1: IInstrument[]){\n this.instruments = instruments1;\n }\n markDirty() {\n this.instruments.forEach((i1)=>i1.markDirty());\n }\n // if all instruments share the same chokeGroup, return that value, else return -1\n get chokeGroup() {\n const chokeGroups1 = this.instruments.map((i1)=>i1.chokeGroup);\n return chokeGroups1.every((cg1)=>cg1 === chokeGroups1[0]) ? chokeGroups1[0]! : -1;\n }\n set chokeGroup(value1: number) {\n this.instruments.forEach((i1)=>(i1.chokeGroup = value1));\n }\n get poly() {\n const polys1 = this.instruments.map((i1)=>i1.poly);\n return polys1.every((p1)=>p1 === polys1[0]) ? polys1[0]! : -1;\n }\n set poly(value1: number) {\n this.instruments.forEach((i1)=>(i1.poly = value1));\n }\n get volume() {\n const volumes1 = this.instruments.map((i1)=>i1.volume);\n return volumes1.every((v1)=>v1 === volumes1[0]) ? volumes1[0]! : -1;\n }\n get volumeDb() {\n if (this.volume === -1) return -1;\n return Number((20 * Math.log10(this.volume / 100)).toFixed(1));\n }\n set volume(value1: number) {\n this.instruments.forEach((i1)=>(i1.volume = value1));\n }\n get fillChokeGroup() {\n const fillChokeGroups1 = this.instruments.map((i1)=>i1.fillChokeGroup);\n return fillChokeGroups1.every((fcg1)=>fcg1 === fillChokeGroups1[0]) ? fillChokeGroups1[0]! : -1;\n }\n set fillChokeGroup(value1: number) {\n this.instruments.forEach((i1)=>(i1.fillChokeGroup = value1));\n }\n get fillChokeDelay() {\n const fillChokeDelays1 = this.instruments.map((i1)=>i1.fillChokeDelay);\n return fillChokeDelays1.every((fcd1)=>fcd1 === fillChokeDelays1[0]) ? fillChokeDelays1[0]! : -1;\n }\n set fillChokeDelay(value1: number) {\n this.instruments.forEach((i1)=>(i1.fillChokeDelay = value1));\n }\n get nonPercussion() {\n const nonPercussions1 = this.instruments.map((i1)=>i1.nonPercussion);\n return nonPercussions1.every((np1)=>np1 === nonPercussions1[0]) ? nonPercussions1[0]! == 1 ? 1 : 0 : -1;\n }\n set nonPercussion(value1: number) {\n this.instruments.forEach((i1)=>(i1.nonPercussion = value1 ? 1 : 0));\n }\n}\nfunction allInstruments(instrument1: IInstrument): IInstrument[] {\n if (instrument1 instanceof MultiInstrument) {\n return instrument1.instruments.map((i1)=>i1);\n } else {\n return [\n instrument1\n ];\n }\n}\nexport default class DrumsetEditorComponent extends Component {\n @service\n projectManager: ProjectManagerService;\n @service\n songPlayer: SongPlayerService;\n @service\n undoManager: UndoManagerService;\n @service\n router: RouterService;\n @tracked\n showInstrumentList = false;\n @tracked\n showImportModal = false;\n @tracked\n menuInstrument?: IInstrument;\n @tracked\n selectedInstruments: IInstrument[] = [];\n @tracked\n ignoreNextClickOutside: boolean = false;\n undoUpdateTimer: number = 0;\n constructor(owner1: unknown, args1: DrumsetEditorSignature['Args']){\n super(owner1, args1);\n this.router.on('routeDidChange', ()=>{\n if (this.drumset.playableInstruments.length === 0) this.selectedInstruments = [];\n else this.selectedInstruments = [\n this.drumset.playableInstruments[0]!\n ];\n });\n if (this.drumset.playableInstruments.length === 0) this.selectedInstruments = [];\n else this.selectedInstruments = [\n this.drumset.playableInstruments[0]!\n ];\n }\n get drumset() {\n return this.args.drumset!;\n }\n get instruments(): IInstrument[] {\n return this.drumset.playableInstruments;\n }\n get availableInstruments() {\n return Array.from(gmDrumMap.values()).filter(({ id: id1 })=>!this.instruments.some((i1)=>i1.id === id1));\n }\n @action\n isSelectedInstrument(instrument1: IInstrument) {\n return this.selectedInstruments.includes(instrument1);\n }\n get instrument(): IInstrument {\n if (this.selectedInstruments.length === 1) {\n return this.selectedInstruments[0]!;\n } else {\n return new MultiInstrument(this.selectedInstruments);\n }\n }\n @action\n selectInstrument(instrument1: IInstrument | undefined, ev1?: KeyboardEvent | MouseEvent) {\n ev1?.stopPropagation();\n if (instrument1 === undefined) {\n this.selectedInstruments = [];\n return;\n }\n if (ev1?.ctrlKey || ev1?.metaKey) {\n if (this.isSelectedInstrument(instrument1)) {\n this.selectedInstruments = this.selectedInstruments.filter((i1)=>i1 !== instrument1);\n } else {\n this.selectedInstruments = [\n ...this.selectedInstruments,\n instrument1\n ];\n }\n } else if (ev1?.shiftKey) {\n const firstSelectedInstrument1 = this.selectedInstruments.at(0);\n const lastSelectedInstrument1 = this.selectedInstruments.at(-1);\n if (firstSelectedInstrument1 && lastSelectedInstrument1) {\n const firstIndex1 = this.instruments.indexOf(firstSelectedInstrument1);\n const lastIndex1 = this.instruments.indexOf(lastSelectedInstrument1);\n const currentIndex1 = this.instruments.indexOf(instrument1);\n if (currentIndex1 < firstIndex1) {\n this.selectedInstruments = [\n ...this.selectedInstruments,\n ...this.instruments.slice(currentIndex1, firstIndex1 + 1)\n ];\n } else if (currentIndex1 > lastIndex1) {\n this.selectedInstruments = [\n ...this.selectedInstruments,\n ...this.instruments.slice(lastIndex1, currentIndex1 + 1)\n ];\n } else {\n this.selectedInstruments = [\n ...this.selectedInstruments,\n ...this.instruments.slice(firstIndex1, currentIndex1 + 1)\n ];\n }\n } else {\n this.selectedInstruments = [\n instrument1\n ];\n }\n } else {\n this.selectedInstruments = [\n instrument1\n ];\n }\n // remove window selection\n window.getSelection()?.removeAllRanges();\n }\n @action\n selectNextInstrument(ev1: KeyboardEvent) {\n ev1.preventDefault();\n const firstSelectedInstrument1 = this.selectedInstruments.at(0);\n const lastSelectedInstrument1 = this.selectedInstruments.at(-1);\n if (firstSelectedInstrument1 && lastSelectedInstrument1) {\n const firstIndex1 = this.instruments.indexOf(firstSelectedInstrument1);\n const lastIndex1 = this.instruments.indexOf(lastSelectedInstrument1);\n if (ev1.shiftKey && firstIndex1 <= lastIndex1) {\n let nextIndex1 = lastIndex1 + 1;\n if (nextIndex1 >= this.instruments.length) {\n nextIndex1 = lastIndex1;\n }\n this.selectedInstruments = this.instruments.slice(firstIndex1, nextIndex1 + 1);\n } else if (ev1.shiftKey && firstIndex1 >= lastIndex1) {\n this.selectedInstruments = this.selectedInstruments.slice(0, -1);\n } else if (!ev1.shiftKey) {\n let nextIndex1 = lastIndex1 + 1;\n if (nextIndex1 >= this.instruments.length) {\n nextIndex1 = 0;\n }\n this.selectedInstruments = this.instruments.slice(nextIndex1, nextIndex1 + 1);\n }\n } else {\n this.selectedInstruments = this.instruments.slice(0, 1);\n }\n document.querySelector('.instrument.selected')?.scrollIntoView({\n block: 'start'\n });\n }\n @action\n selectPreviousInstrument(ev1: KeyboardEvent) {\n ev1.preventDefault();\n const firstSelectedInstrument1 = this.selectedInstruments.at(0);\n const lastSelectedInstrument1 = this.selectedInstruments.at(-1);\n if (firstSelectedInstrument1 && lastSelectedInstrument1) {\n const firstIndex1 = this.instruments.indexOf(firstSelectedInstrument1);\n const lastIndex1 = this.instruments.indexOf(lastSelectedInstrument1);\n if (ev1.shiftKey && lastIndex1 <= firstIndex1) {\n let nextIndex1 = lastIndex1 - 1;\n if (nextIndex1 < 0) {\n nextIndex1 = 0;\n }\n this.selectedInstruments = [\n ...this.selectedInstruments,\n this.instruments.at(nextIndex1)!\n ];\n } else if (ev1.shiftKey && lastIndex1 >= firstIndex1) {\n this.selectedInstruments = this.selectedInstruments.slice(0, -1);\n } else if (!ev1.shiftKey) {\n let nextIndex1 = lastIndex1 - 1;\n if (nextIndex1 < 0) {\n nextIndex1 = this.instruments.length - 1;\n }\n this.selectedInstruments = this.instruments.slice(nextIndex1, nextIndex1 + 1);\n }\n } else {\n this.selectedInstruments = this.instruments.slice(-1);\n }\n document.querySelector('.instrument.selected')?.scrollIntoView({\n block: 'end'\n });\n }\n @action\n deleteSelectedInstruments() {\n const commands1 = this.selectedInstruments.map((i1)=>{\n return new DeleteInstrumentCommand(this.drumset, i1);\n });\n const command1 = new CompositeCommand(commands1[0]!.name, commands1);\n command1.on('execute', ()=>{\n this.selectedInstruments = this.instruments.slice(0, 1);\n });\n command1.on('reverse', ()=>{\n this.selectedInstruments = commands1.map((c1)=>c1.instrument);\n });\n this.undoManager.executeCommand(command1);\n }\n @action\n showMenuFor(instrument1: IInstrument | undefined, ev1?: MouseEvent) {\n if (!instrument1 && this.ignoreNextClickOutside) {\n this.ignoreNextClickOutside = false;\n return;\n }\n if (this.menuInstrument != instrument1) {\n ev1?.preventDefault();\n ev1?.stopPropagation();\n if (this.menuInstrument && instrument1) {\n this.ignoreNextClickOutside = true;\n }\n this.menuInstrument = instrument1;\n }\n if (!instrument1) {\n this.menuInstrument = undefined;\n return;\n }\n }\n @action\n shouldShowMenuFor(instrument1: IInstrument) {\n return this.menuInstrument === instrument1;\n }\n @action\n toggleShowInstrumentList(force1: boolean | Event) {\n if (typeof force1 === 'boolean') {\n this.showInstrumentList = force1;\n return;\n }\n this.showInstrumentList = !this.showInstrumentList;\n }\n @action\n toggleShowImportModal(force1: boolean | Event) {\n if (typeof force1 === 'boolean') {\n this.showImportModal = force1;\n return;\n }\n this.showImportModal = !this.showImportModal;\n }\n @action\n addInstrument(inst1: {\n id: number;\n name: string;\n } | Instrument | undefined) {\n const command1 = new AddNewInstrumentToDrumsetCommand(this.drumset, inst1?.name ?? 'Unknown', inst1?.id);\n command1.on('execute', (instrument1)=>{\n this.selectInstrument(instrument1);\n });\n command1.on('reverse', ()=>{\n this.selectInstrument(undefined);\n });\n this.undoManager.executeCommand(command1);\n }\n @action\n addInstruments(instruments1: Instrument[]) {\n const commands1 = instruments1.map((i1)=>new AddInstrumentToDrumsetCommand(this.drumset, i1.copy()));\n const command1 = new CompositeCommand(commands1[0]!.name, commands1);\n command1.on('execute', (instruments1: Instrument[])=>{\n this.drumset.prepareAudio(this.songPlayer.audioContext);\n this.selectInstrument(instruments1.at(0));\n });\n command1.on('reverse', ()=>{\n this.selectInstrument(undefined);\n });\n this.undoManager.executeCommand(command1);\n }\n @action\n renameInstrument(instrument1: IInstrument, name1: string) {\n if (instrument1 instanceof Instrument) {\n this.undoManager.executeCommand(new RenameInstrumentCommand(instrument1, name1));\n }\n }\n @action\n deleteInstrument(instrument1: IInstrument) {\n const command1 = new DeleteInstrumentCommand(this.drumset, instrument1);\n command1.on('execute', ()=>{\n this.selectInstrument(undefined);\n });\n command1.on('reverse', ()=>{\n this.selectInstrument(instrument1);\n });\n this.undoManager.executeCommand(command1);\n }\n @action\n popupMiddleware() {\n return [\n // Calculates the maximum height for the accent popup list\n {\n name: 'Max height',\n options: {},\n async fn (state1: any) {\n const availableHeight1 = document.documentElement.clientHeight;\n const top1 = state1.rects.reference.y + state1.rects.reference.height;\n const height1 = availableHeight1 - top1 - 20;\n state1.elements.floating.style.maxHeight = `${height1}px`;\n return state1;\n }\n }\n ];\n }\n get availableMidiIds() {\n return this.drumset.availableInstruments.map((i1)=>i1.id).map((id1)=>{\n const gmInstrument1 = gmDrumMap.get(id1);\n if (gmInstrument1) {\n return {\n id: gmInstrument1.id,\n name: gmInstrument1.name\n };\n } else {\n return {\n id: id1,\n name: ''\n };\n }\n });\n }\n updateDrumsetVolumeFrom?: number = undefined;\n @action\n updateDrumsetVolume(value1: string) {\n const volume1 = parseInt(value1);\n this.updateDrumsetVolumeFrom = this.updateDrumsetVolumeFrom ?? this.drumset.volume;\n clearTimeout(this.undoUpdateTimer);\n this.drumset.volume = volume1;\n this.undoUpdateTimer = window.setTimeout(()=>{\n if (volume1 !== this.updateDrumsetVolumeFrom) {\n this.undoManager.executeCommand(new UpdateDrumsetVolumeCommand(this.drumset, volume1, this.updateDrumsetVolumeFrom));\n }\n this.updateDrumsetVolumeFrom = undefined;\n }, UNDO_DELAY);\n }\n @action\n updateInstrumentID(value1: string) {\n const id1 = parseInt(value1);\n if (id1 !== this.instrument.id) {\n const command1 = new UpdateInstrumentIdCommand(this.drumset, this.instrument, id1);\n command1.on('execute', (instrument1)=>{\n this.selectInstrument(instrument1);\n });\n command1.on('reverse', (instrument1)=>{\n this.selectInstrument(instrument1);\n });\n this.undoManager.executeCommand(command1);\n }\n }\n updateVolumeCommands?: UpdateInstrumentVolumeCommand[];\n @action\n updateVolume(value1: string) {\n const volume1 = parseInt(value1);\n this.updateVolumeCommands = this.updateVolumeCommands ?? allInstruments(this.instrument).map((instrument1)=>new UpdateInstrumentVolumeCommand(instrument1, volume1));\n clearTimeout(this.undoUpdateTimer);\n this.instrument.volume = volume1;\n this.updateVolumeCommands.forEach((c1)=>(c1.toVolume = volume1));\n this.undoUpdateTimer = window.setTimeout(()=>{\n const commands1 = this.updateVolumeCommands!;\n this.undoManager.executeCommand(new CompositeCommand(commands1[0]!.name, commands1));\n this.updateVolumeCommands = undefined;\n }, UNDO_DELAY);\n }\n updatePolyphonyCommands?: UpdateInstrumentPolyphonyCommand[];\n @action\n updatePolyphony(value1: string) {\n const poly1 = parseInt(value1);\n this.updatePolyphonyCommands = this.updatePolyphonyCommands ?? allInstruments(this.instrument).map((instrument1)=>new UpdateInstrumentPolyphonyCommand(instrument1, poly1));\n clearTimeout(this.undoUpdateTimer);\n this.instrument.poly = poly1;\n this.updatePolyphonyCommands.forEach((c1)=>(c1.toPoly = poly1));\n this.undoUpdateTimer = window.setTimeout(()=>{\n const commands1 = this.updatePolyphonyCommands!;\n this.undoManager.executeCommand(new CompositeCommand(commands1[0]!.name, commands1));\n this.updatePolyphonyCommands = undefined;\n }, UNDO_DELAY);\n }\n updateChokeGroupCommands?: UpdateInstrumentChokeGroupCommand[];\n @action\n updateChokeGroup(value1: string) {\n const chokeGroup1 = parseInt(value1);\n this.updateChokeGroupCommands = this.updateChokeGroupCommands ?? allInstruments(this.instrument).map((instrument1)=>new UpdateInstrumentChokeGroupCommand(instrument1, chokeGroup1));\n clearTimeout(this.undoUpdateTimer);\n this.instrument.chokeGroup = chokeGroup1;\n this.updateChokeGroupCommands.forEach((c1)=>(c1.toChokeGroup = chokeGroup1));\n this.undoUpdateTimer = window.setTimeout(()=>{\n const commands1 = this.updateChokeGroupCommands!;\n this.undoManager.executeCommand(new CompositeCommand(commands1[0]!.name, commands1));\n this.updateChokeGroupCommands = undefined;\n }, UNDO_DELAY);\n }\n updateFillChokeGroupCommands?: UpdateInstrumentFillChokeGroupCommand[];\n @action\n updateFillChokeGroup(value1: string) {\n const fillChokeGroup1 = parseInt(value1);\n this.updateFillChokeGroupCommands = this.updateFillChokeGroupCommands ?? allInstruments(this.instrument).map((instrument1)=>new UpdateInstrumentFillChokeGroupCommand(instrument1, fillChokeGroup1));\n clearTimeout(this.undoUpdateTimer);\n this.instrument.fillChokeGroup = fillChokeGroup1;\n this.updateFillChokeGroupCommands.forEach((c1)=>(c1.toFillChokeGroup = fillChokeGroup1));\n this.undoUpdateTimer = window.setTimeout(()=>{\n const commands1 = this.updateFillChokeGroupCommands!;\n this.undoManager.executeCommand(new CompositeCommand(commands1[0]!.name, commands1));\n this.updateFillChokeGroupCommands = undefined;\n }, UNDO_DELAY);\n }\n @action\n updateFillChokeDelay(value1: string) {\n const fillChokeDelay1 = parseInt(value1);\n if (fillChokeDelay1 !== this.instrument.fillChokeDelay) {\n const commands1 = allInstruments(this.instrument).map((instrument1)=>new UpdateInstrumentFillChokeDelayCommand(instrument1, fillChokeDelay1));\n this.undoManager.executeCommand(new CompositeCommand(commands1[0]!.name, commands1));\n }\n }\n @action\n updateNonPercussion(value1: number) {\n if (value1 !== this.instrument.nonPercussion) {\n const commands1 = allInstruments(this.instrument).map((instrument1)=>new UpdateInstrumentNonPercussionCommand(instrument1, value1));\n this.undoManager.executeCommand(new CompositeCommand(commands1[0]!.name, commands1));\n }\n }\n get typedInstrument(): Instrument {\n return this.instrument as Instrument;\n }\n static{\n template(`\n
\n
\n {{@drumset.name}}\n \n
\n
\n \n
\n {{/if}}\n Import\n {{#if this.showImportModal}}\n \n {{/if}}\n \n {{! template-lint-disable no-invalid-interactive }}\n \n {{#each this.instruments as |instrument|}}\n
\n {{! template-lint-disable no-invalid-interactive }}\n \n {{instrument.id}}. {{instrument.name}}\n \n \n {{#if (this.shouldShowMenuFor instrument)}}\n \n Delete\n \n {{/if}}\n
\n
\n \n {{/each}}\n \n \n \n {{#if (gte this.selectedInstruments.length 1)}}\n {{#if (eq 1 this.selectedInstruments.length)}}\n \n \n \n {{else}}\n \n {{/if}}\n {{/if}}\n \n \n \n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n DrumsetEditor: typeof DrumsetEditorComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{page-title @model.name}}\\n\\n\",{ moduleName: \"editor/restricted/drumsets/drumset/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{page-title \\\"Drumsets\\\"}}\\n
\\n
\\n \\n\\n \\n \\n {{! template-lint-disable no-invalid-interactive }}\\n {{~#each this.drumsets as |drumset drumsetIndex|~}}\\n \\n {{add drumsetIndex 1}}. {{drumset.name}}\\n \\n \\n {{#if (this.shouldShowMenuFor drumset)}}\\n \\n Duplicate\\n Export\\n Delete\\n \\n {{/if}}\\n
\\n
\\n {{~/each~}}\\n \\n \\n
{{outlet}}
\\n\\n\",{ moduleName: \"editor/restricted/drumsets/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{page-title \\\"Index\\\"}}\\n{{outlet}}\",{ moduleName: \"editor/restricted/index/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{page-title \\\"Index\\\"}}\\n{{outlet}}\",{ moduleName: \"editor/restricted/playlists/index/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{page-title this.playlist.name}}\\n{{! template-lint-disable no-invalid-interactive }}\\n{{! template-lint-disable no-pointer-down-event-binding }}\\n
\\n
\\n

Songs

\\n \\n {{~#each this.playlist.songs as |songRef songIndex|~}}\\n {{~#let songRef.song as |song|~}}\\n \\n {{add songIndex 1}}. {{song.name}}\\n \\n {{#if (this.shouldShowMenuFor songRef)}}\\n \\n Duplicate\\n Remove\\n \\n {{/if}}\\n
\\n {{~/let~}}\\n {{~/each~}}\\n
\\n \\n\\n
\\n

Available Songs

\\n
\\n {{#each this.folders as |folder idx|}}\\n
\\n \\n {{folder.name}}\\n \\n {{~#each folder.songs as |song|~}}\\n {{! template-lint-disable no-nested-interactive }}\\n
\\n \\n {{song.name}}\\n
\\n {{~/each~}}\\n
\\n \\n {{/each}}\\n
\\n \\n\\n{{outlet}}\\n\",{ moduleName: \"editor/restricted/playlists/playlist/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{page-title \\\"Playlists\\\"}}\\n{{! template-lint-disable no-invalid-interactive }}\\n
\\n
\\n \\n\\n
\\n \\n
\\n \\n {{#each this.playlists as |playlist playlistIndex|~}}\\n \\n {{add playlistIndex 1}}. {{playlist.name}}\\n \\n \\n {{#if (this.shouldShowMenuFor playlist)}}\\n \\n Duplicate\\n Delete\\n \\n {{/if}}\\n
\\n
\\n {{~/each}}\\n \\n \\n
{{outlet}}
\\n\\n\",{ moduleName: \"editor/restricted/playlists/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{page-title this.model.name}}\\n\\n
\\n
\\n

First things first

\\n \\n \\n
\\n
\\n{{outlet}}\\n\",{ moduleName: \"editor/restricted/songs/folder/index/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{page-title @model.name}}\\n\\n\\n\\n{{outlet}}\\n\",{ moduleName: \"editor/restricted/songs/folder/song/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{outlet}}\\n\",{ moduleName: \"editor/restricted/songs/folder/template.hbs\" })","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{page-title \\\"Songs\\\"}}\\n\\n
\\n
\\n

First things first

\\n \\n
\\n
\\n{{outlet}}\\n\",{ moduleName: \"editor/restricted/songs/index/template.hbs\" })","import { template } from \"@ember/template-compiler\";\nimport { concat, fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport type RouterService from '@ember/routing/router-service';\nimport { next } from '@ember/runloop';\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport add from 'editor/helpers/add';\nimport eq from 'editor/helpers/eq';\nimport htmlId from 'editor/helpers/html-id';\nimport notEq from 'editor/helpers/not-eq';\nimport or from 'editor/helpers/or';\nimport queue from 'editor/helpers/queue';\nimport { DeleteSongFolderCommand, MoveSongCommand, RenameFolderCommand, SortSongsCommand } from 'editor/models/folder-commands';\nimport { AddPlaylistCommand, AddSongToPlaylistCommand } from 'editor/models/playlist-commands';\nimport { DeleteSongCommand, DuplicateSongCommand, RenameSongCommand } from 'editor/models/song-commands';\nimport onClickOutside from 'editor/modifiers/on-click-outside';\nimport scrollIntoView from 'editor/modifiers/scroll-into-view';\nimport selected from 'editor/modifiers/selected';\nimport sortable from 'editor/modifiers/sortable';\nimport ProjectManagerService, { Playlist, SongFile, SongFolder } from 'editor/services/project-manager';\nimport UndoManagerService from 'editor/services/undo-manager';\nimport nameFilter from 'editor/utils/name-filter';\nimport { modifier } from 'ember-modifier';\nimport velcro from 'ember-velcro/modifiers/velcro';\nimport Button from './button';\nimport MenuButton from './menu-button';\nimport OptionButton from './option-button';\nimport SelectableItem from './selectable-item';\ninterface FolderSignature {\n Element: HTMLDivElement;\n Args: {\n folder: SongFolder;\n isSelected: boolean;\n selectedSong?: SongFile;\n folderIndex: number;\n filter: string;\n addSong: () => void;\n importSong: () => void;\n onMoveSong: (// eslint-disable-next-line no-unused-vars\n fromElement: HTMLElement, // eslint-disable-next-line no-unused-vars\n fromIndex: number, // eslint-disable-next-line no-unused-vars\n toElement: HTMLElement, // eslint-disable-next-line no-unused-vars\n toIndex: number) => void;\n // eslint-disable-next-line no-unused-vars\n onSelectSong: (folder: SongFolder, song: SongFile) => void;\n };\n Blocks: {\n };\n}\nconst ensureInView = modifier((element1: HTMLElement)=>{\n var intersectionObserver1 = new IntersectionObserver((entries1)=>{\n entries1.forEach((entry1)=>{\n if (entry1.target == element1 && entry1.isIntersecting) {\n const rect1 = element1.getBoundingClientRect();\n if (rect1.height + rect1.top > window.innerHeight) {\n element1.style.top = `-${rect1.top - 20}px`;\n element1.style.maxHeight = `${window.innerHeight - 40}px`;\n }\n }\n });\n });\n intersectionObserver1.observe(element1);\n});\nexport default class FolderComponent extends Component {\n @service\n projectManager: ProjectManagerService;\n @service\n undoManager: UndoManagerService;\n @service\n router: RouterService;\n @tracked\n _isOpen?: boolean;\n @tracked\n menuSong?: SongFile;\n @tracked\n menuFolder?: SongFolder;\n @tracked\n ignoreNextClickOutside: boolean = false;\n constructor(owner1: unknown, args1: FolderSignature['Args']){\n super(owner1, args1);\n this._isOpen = args1.isSelected;\n this.projectManager.on('folderChange', (folder1)=>{\n if (folder1 === this.folder) {\n this._isOpen = true;\n }\n });\n }\n get isOpen(): boolean {\n if (this.args.filter !== '' && this.matchesFilter) {\n return true;\n }\n return !!(this._isOpen ?? (this.folder === this.projectManager.currentFolder && this.projectManager.currentSong && this.folder.songs.includes(this.projectManager.currentSong)));\n }\n get matchesFilter() {\n return (this.args.filter === '' || this.folderMatchesFilter || this.filteredSongs.length > 0);\n }\n get folderMatchesFilter() {\n return this.folder.name.toLocaleLowerCase().includes(this.args.filter.toLocaleLowerCase());\n }\n @action\n songMatchesFilter(song1: SongFile) {\n return this.filteredSongs.includes(song1);\n }\n get filteredSongs() {\n if (this.args.filter === '') {\n return this.folder.songs;\n }\n return this.folder.songs.filter((song1)=>song1.name.toLocaleLowerCase().includes(this.args.filter.toLocaleLowerCase()));\n }\n get folder(): SongFolder {\n return this.args.folder;\n }\n get isCurrent() {\n return this.folder == this.projectManager.currentFolder;\n }\n @action\n toggleOpenClose() {\n this._isOpen = !this.isOpen;\n }\n @action\n renameFolder(folder1: SongFolder, name1: string) {\n if (name1 === folder1.name) {\n return;\n }\n this.undoManager.executeCommand(new RenameFolderCommand(folder1, name1));\n }\n @action\n renameSong(song1: SongFile, name1: string) {\n if (name1 === song1.name) {\n return;\n }\n this.undoManager.executeCommand(new RenameSongCommand(song1.song!, name1));\n }\n @action\n deleteSong(song1: SongFile) {\n const command1 = new DeleteSongCommand(this.folder, song1);\n command1.on('execute', ()=>{\n this.router.transitionTo('restricted.songs.folder');\n });\n command1.on('reverse', (song1)=>{\n this.router.transitionTo('restricted.songs.folder.song', song1.path);\n });\n this.undoManager.executeCommand(command1);\n }\n @action\n duplicateSong(song1: SongFile) {\n const command1 = new DuplicateSongCommand(this.projectManager, this.folder, song1);\n const folder1 = this.folder;\n command1.on('execute', (newSong1)=>{\n this.router.transitionTo('restricted.songs.folder.song', folder1, newSong1.path);\n });\n command1.on('reverse', (song1)=>{\n this.router.transitionTo('restricted.songs.folder.song', folder1, song1.path);\n });\n this.undoManager.executeCommand(command1);\n }\n @action\n sortSongs(folder1: SongFolder, oldIndex1: number, newIndex1: number) {\n // eslint-disable-next-line ember/no-runloop\n next(()=>{\n this.undoManager.executeCommand(new SortSongsCommand(folder1, oldIndex1, newIndex1));\n });\n }\n @action\n moveSong(song1: SongFile, toFolder1: SongFolder) {\n const fromIndex1 = this.folder.songs.indexOf(song1);\n const command1 = new MoveSongCommand(this.folder, fromIndex1, toFolder1);\n command1.on('execute', (newSong1)=>{\n this.router.transitionTo('restricted.songs.folder.song', toFolder1.path, newSong1.path);\n });\n command1.on('reverse', (song1)=>{\n this.router.transitionTo('restricted.songs.folder.song', song1.folder.path, song1.path);\n });\n this.undoManager.executeCommand(command1);\n }\n @action\n addToPlaylist(playlist1: Playlist, song1: SongFile) {\n const command1 = new AddSongToPlaylistCommand(playlist1, song1);\n this.undoManager.executeCommand(command1);\n }\n @action\n async addToNewPlaylist(song1: SongFile) {\n const playlist1 = await this.undoManager.executeCommand(new AddPlaylistCommand(this.projectManager));\n this.undoManager.appendCommand(new AddSongToPlaylistCommand(playlist1, song1));\n }\n @action\n async exportSong(song1: SongFile) {\n const handle1 = await this.projectManager.exportSong(song1);\n this.renameSong(song1, handle1.name.replace(/\\.sng$/, ''));\n }\n @action\n async exportAllMidiFiles(song1: SongFile) {\n await this.projectManager.exportAllMidiFiles(song1);\n }\n @action\n showMenuFor(item1: SongFile | SongFolder | undefined, ev1?: MouseEvent) {\n console.warn('showMenuFor', item1, this.menuSong, this.menuFolder);\n if (!item1 && this.ignoreNextClickOutside) {\n this.ignoreNextClickOutside = false;\n return;\n }\n if (item1 && this.menuSong != item1 && this.menuFolder != item1) {\n ev1?.preventDefault();\n ev1?.stopPropagation();\n if (this.menuSong || this.menuFolder) {\n this.ignoreNextClickOutside = true;\n }\n }\n if (!item1) {\n this.menuSong = undefined;\n this.menuFolder = undefined;\n return;\n }\n if (item1 instanceof SongFile) {\n this.menuSong = item1;\n this.menuFolder = undefined;\n } else {\n this.menuFolder = item1;\n this.menuSong = undefined;\n }\n }\n @action\n shouldShowMenuFor(item1: SongFile | SongFolder) {\n return this.menuSong === item1 || this.menuFolder === item1;\n }\n @action\n deleteFolder(folder1: SongFolder) {\n const command1 = new DeleteSongFolderCommand(this.projectManager, folder1);\n command1.on('execute', ()=>{\n this.router.transitionTo('restricted.songs');\n });\n command1.on('reverse', (folder1)=>{\n this.router.transitionTo('restricted.songs.folder', folder1.path);\n });\n this.undoManager.executeCommand(command1);\n }\n @action\n exportFolder(folder1: SongFolder) {\n this.projectManager.exportFolder(folder1);\n }\n static{\n template(`\n
\n {{! template-lint-disable no-invalid-interactive}}\n
\n {{add @folderIndex 1}}. {{this.folder.name}}\n \n {{#if (this.shouldShowMenuFor this.folder)}}\n \n Export\n Delete\n \n {{/if}}\n
\n \n {{~#if this.isOpen~}}\n {{~#each this.folder.songs as |song songIndex|~}}\n {{#if (or this.folderMatchesFilter (this.songMatchesFilter song))}}\n \n {{add songIndex 1}}. {{song.name}}\n\n \n \n {{#if (this.shouldShowMenuFor song)}}\n \n
\n Move to…\n \n {{#each this.projectManager.songFolders as |folder|}}\n {{#if (notEq folder this.folder)}}\n \n {{folder.name}}\n \n {{/if}}\n {{/each}}\n
\n
\n
\n Add to…\n \n {{#each this.projectManager.playlists as |playlist|}}\n \n {{playlist.name}}\n \n {{/each}}\n {{#if this.projectManager.canAddPlaylist}}\n \n New Playlist\n \n {{/if}}\n
\n \n Duplicate\n Export\n Export MIDI\n Delete\n \n {{/if}}\n \n \n {{/if}}\n {{~else~}}\n \n \n {{~/each~}}\n {{~/if~}}\n \n \n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n Folder: typeof FolderComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{page-title \\\"Songs\\\"}}\\n
\\n
\\n \\n\\n \\n
\\n
\\n \\n {{#unless (eq \\\"\\\" this.filterText)}}\\n
\\n \\n
\\n {{/unless}}\\n
\\n \\n {{~#each this.folders as |folder idx|~}}\\n \\n {{~/each~}}\\n
\\n
\\n {{outlet}}\\n\\n\",{ moduleName: \"editor/restricted/songs/template.hbs\" })","import { template } from \"@ember/template-compiler\";\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport ProgressService from 'editor/services/progress';\nimport { htmlSafe } from '@ember/template';\nimport gt from 'editor/helpers/gt';\ninterface ProgressSignature {\n Element: HTMLDivElement;\n Args: {\n };\n Blocks: {\n };\n}\nexport default class ProgressComponent extends Component {\n @service\n progress: ProgressService;\n constructor(owner1: unknown, args1: ProgressSignature['Args']){\n super(owner1, args1);\n }\n get progressStyle() {\n return htmlSafe(`width: ${this.progress.percentage}%;`);\n }\n get progressMessage() {\n return `${this.progress.progress} of ${this.progress.total} - ${this.progress.percentage}%`;\n }\n static{\n template(`\n {{#if this.progress.showProgress}}\n
\n\n
\n
\n {{this.progress.waitingPhrase}}
\n \n {{if\n (gt this.progress.percentage 14)\n this.progressMessage\n (htmlSafe \" \")\n }}
\n {{if\n (gt 15 this.progress.percentage)\n this.progressMessage\n (htmlSafe \" \")\n }}\n \n \n {{/if}}\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n Progress: typeof ProgressComponent;\n }\n}\n","import Modifier, { type ArgsFor } from 'ember-modifier';\nimport { registerDestructor } from '@ember/destroyable';\nimport RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport type Transition from '@ember/routing/transition';\nimport { action } from '@ember/object';\n\ntype OnUnloadCallback = (ev: {\n preventDefault: () => void;\n returnValue: string;\n}) => void;\n\ninterface PreventUnloadModifierSignature {\n element: HTMLElement;\n Args: {\n Positional: [OnUnloadCallback];\n Named: { onRouteChange?: true };\n };\n}\n\nfunction cleanup(instance: PreventUnloadModifier, returnFocus = false) {\n if (instance.eventHandlerAdded && window && instance.callback) {\n window.removeEventListener('beforeunload', instance.eventHandler);\n instance.router.off('routeWillChange', instance.eventHandler);\n }\n}\n\nexport default class PreventUnloadModifier extends Modifier {\n @service declare router: RouterService;\n callback?: OnUnloadCallback;\n onRouteChange = false;\n eventHandlerAdded = false;\n\n constructor(owner: any, args: ArgsFor) {\n super(owner, args);\n this.callback = args.positional[0];\n this.onRouteChange = args.named.onRouteChange ?? false;\n registerDestructor(this, () => cleanup(this, true));\n }\n\n @action\n eventHandler(ev: BeforeUnloadEvent | Transition) {\n if (ev instanceof BeforeUnloadEvent) {\n this.callback?.(ev);\n } else {\n const transition = ev;\n //@ts-expect-error\n if (!transition.isAborted) {\n this.callback?.({\n preventDefault: () => {\n transition.abort();\n },\n returnValue: '',\n });\n }\n }\n }\n\n async modify(/*element: HTMLElement*/) {\n cleanup(this);\n if (window && this.callback) {\n window.addEventListener('beforeunload', this.eventHandler);\n if (this.onRouteChange) {\n this.router.on('routeWillChange', this.eventHandler);\n }\n this.eventHandlerAdded = true;\n }\n }\n}\n","import { getOwnConfig } from '@embroider/macros';\nimport config from 'editor/config/environment';\n\nexport default function version() {\n const version = (config.APP['version'] ?? '').split('+')[0];\n const versionDate = (getOwnConfig()).versionDate;\n return `v${version} (${versionDate})`;\n}\n","import { template } from \"@ember/template-compiler\";\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport eq from 'editor/helpers/eq';\nimport Button from './button';\ninterface ErrorPopupSignature {\n Element: HTMLFormElement;\n Args: {\n errorData: string[] | null;\n onClose: () => void;\n };\n Blocks: {\n };\n}\nexport default class ErrorPopupDialog extends Component {\n @tracked\n errorData: string[] | null = null;\n constructor(owner1: unknown, args1: ErrorPopupSignature['Args']){\n super(owner1, args1);\n }\n @action\n closeErrorDialog(ev1: SubmitEvent) {\n ev1.preventDefault();\n }\n stringContainsError(str1: string) {\n return str1.includes('Errors in songs:') || str1.includes('Errors in drumsets:');\n }\n static{\n template(`\n
\n {{#each this.args.errorData as |error|}}\n {{#if (this.stringContainsError error)}}\n

{{error}}

\n {{else}}\n

{{error}}

\n {{/if}}\n {{/each}}\n Close\n
\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n ErrorPopup: typeof ErrorPopupDialog;\n }\n}\n","import { template } from \"@ember/template-compiler\";\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { service } from '@ember/service';\nimport FaIcon from '@fortawesome/ember-fontawesome/components/fa-icon';\nimport Component from '@glimmer/component';\nimport eq from 'editor/helpers/eq';\nimport version from 'editor/helpers/version';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport type { DrumsetFile, SongFile } from 'editor/services/project-manager';\nimport StatusService from 'editor/services/status';\nimport fileSize from 'editor/utils/file-size';\nimport ErrorPopupDialog from './error-popup';\nimport Button from './button';\nimport { fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport velcro from 'ember-velcro/modifiers/velcro';\nimport onClickOutside from 'editor/modifiers/on-click-outside';\ninterface DrumsetStatusSignature {\n Element: HTMLDivElement;\n Args: {\n drumsetFile: DrumsetFile;\n };\n Blocks: {\n };\n}\nlet DrumsetFileStatus = class DrumsetFileStatus extends Component {\n @service\n projectManager: ProjectManagerService;\n @tracked\n displayErrorPopup = false;\n @tracked\n errorData: string[] = [];\n constructor(owner1: unknown, args1: DrumsetStatusSignature['Args']){\n super(owner1, args1);\n }\n get drumset() {\n return this.args.drumsetFile.drumset!;\n }\n drumsetMessage(drumsetFile1: DrumsetFile) {\n let validity1 = drumsetFile1.drumset!.isValid;\n if (validity1 == true) {\n validity1 = '';\n } else {\n validity1 = ` - ${validity1}`;\n }\n return `${drumsetFile1.name} - ${fileSize(drumsetFile1.drumset!.size)}${validity1}`;\n }\n @action\n areSongsValid() {\n this.errorData = [];\n this.errorData.push('Errors in songs:\\n');\n this.projectManager.songFolders.forEach((folder1)=>{\n folder1.songs.forEach((songFile1)=>{\n let validSong1 = songFile1.song?.isValid;\n if (validSong1 === true || validSong1 === undefined) {\n // Do nothing, undefined means the song has not been clicked/initialized, so there is nothing wrong with it and it won't be saved\n } else {\n this.errorData.push(`Song ${songFile1.name}: ${validSong1}\\n`);\n }\n });\n });\n }\n @action\n areDrumsetsValid() {\n this.errorData.push('Errors in drumsets:\\n');\n this.projectManager.drumsets.forEach((drumset1)=>{\n let validDrumset1 = drumset1.drumset?.isValid;\n if (validDrumset1 === true || validDrumset1 === undefined) {\n // Do nothing, undefined means the drumset has not been clicked/initialized, so there is nothing wrong with it and it won't be saved\n } else {\n this.errorData.push(`Drumset ${drumset1.name}: ${validDrumset1}\\n`);\n }\n });\n }\n @action\n toggleErrorPopup(force1: boolean) {\n this.areSongsValid();\n this.areDrumsetsValid();\n this.displayErrorPopup = force1;\n }\n get drumsetSize() {\n return this.args.drumsetFile.drumset!.size;\n }\n static{\n template(`\n {{@drumsetFile.name}}\n -\n {{fileSize this.drumsetSize}}\n {{#if (eq true this.drumset.isValid)}}\n \n {{else}}\n \n {{/if}}\n {{#if this.displayErrorPopup}}\n \n {{/if}}\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n};\ninterface StatusBarSignature {\n Element: HTMLDivElement;\n Args: {\n };\n Blocks: {\n };\n}\nexport default class StatusBarComponent extends Component {\n @service\n status: StatusService;\n @service\n projectManager: ProjectManagerService;\n @tracked\n displayErrorPopup = false;\n @tracked\n errorData: string[] = [];\n constructor(owner1: unknown, args1: StatusBarSignature['Args']){\n super(owner1, args1);\n }\n get drumsetFile() {\n return this.status.drumsetFile;\n }\n get songFile() {\n return this.status.songFile;\n }\n @action\n songFileMessage(songFile1: SongFile) {\n const folderIndex1 = this.projectManager.songFolders.indexOf(songFile1.folder);\n const channel1 = 0;\n const songIndex1 = songFile1.folder.songs.indexOf(songFile1);\n const folderMSB1 = Math.floor(folderIndex1 / 128);\n const folderLSB1 = folderIndex1 % 128;\n const midiInfo1 = `CC0:${folderMSB1} CC32:${folderLSB1} PC:${songIndex1} {PC${folderMSB1}.${folderLSB1}:${songIndex1}@${channel1}}`;\n return `${songFile1.name} - ${midiInfo1}`;\n }\n @action\n isSongValid(songFile1: SongFile) {\n let validSong1 = songFile1.song!.isValid;\n if (validSong1 === true) {\n validSong1 = '';\n } else {\n validSong1 = ` - ${validSong1}`;\n }\n return `${validSong1}`;\n }\n @action\n areSongsValid() {\n this.errorData = [];\n this.errorData.push('Errors in songs:\\n');\n this.projectManager.songFolders.forEach((folder1)=>{\n folder1.songs.forEach((songFile1)=>{\n let validSong1 = songFile1.song?.isValid;\n if (validSong1 === true || validSong1 === undefined) {\n // Do nothing, undefined means the song has not been clicked/initialized, so there is nothing wrong with it and it won't be saved\n } else {\n this.errorData.push(`Song ${songFile1.name}: ${validSong1}\\n`);\n }\n });\n });\n }\n @action\n areDrumsetsValid() {\n this.errorData.push('Errors in drumsets:\\n');\n this.projectManager.drumsets.forEach((drumset1)=>{\n let validDrumset1 = drumset1.drumset?.isValid;\n if (validDrumset1 === true || validDrumset1 === undefined) {\n // Do nothing, undefined means the drumset has not been clicked/initialized, so there is nothing wrong with it and it won't be saved\n } else {\n this.errorData.push(`Drumset ${drumset1.name}: ${validDrumset1}\\n`);\n }\n });\n }\n @action\n toggleErrorPopup(force1: boolean) {\n this.areSongsValid();\n this.areDrumsetsValid();\n this.displayErrorPopup = force1;\n }\n drumsetMessage(drumsetFile1: DrumsetFile) {\n let validity1 = drumsetFile1.drumset!.isValid;\n if (validity1 == true) {\n validity1 = '';\n } else {\n validity1 = ` - ${validity1}`;\n }\n return `${drumsetFile1.name} - ${fileSize(drumsetFile1.drumset!.size)}${validity1}`;\n }\n static{\n template(`\n
\n
\n {{#if this.drumsetFile}}\n \n {{else if this.songFile}}\n {{this.songFileMessage this.songFile}}\n {{#if (eq true this.songFile.song.isValid)}}\n \n {{else}}\n \n {{/if}}\n {{else}}\n Welcome to BeatBuddy Manager!\n {{/if}}\n
\n
{{version}}
\n
{{! right }}
\n
\n {{#if this.displayErrorPopup}}\n \n {{/if}}\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n StatusBar: typeof StatusBarComponent;\n }\n}\n","import { template } from \"@ember/template-compiler\";\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport Button from './button';\ninterface HelpPopupSignature {\n Element: HTMLFormElement;\n Args: {\n onClose: () => void;\n };\n Blocks: {\n };\n}\nexport default class HelpPopupComponent extends Component {\n @tracked\n isSending = false;\n @tracked\n isSent = false;\n @tracked\n error: string | null = null;\n constructor(owner1: unknown, args1: HelpPopupSignature['Args']){\n super(owner1, args1);\n }\n startSending() {\n this.isSending = true;\n this.isSent = false;\n this.error = null;\n }\n sendingComplete() {\n this.isSending = false;\n this.isSent = true;\n this.error = null;\n }\n errorSending(error1: string) {\n this.isSending = false;\n this.isSent = false;\n this.error = error1;\n }\n @action\n sendHelpRequest(ev1: SubmitEvent) {\n ev1.preventDefault();\n const form1 = ev1.target;\n // this.sendingComplete();\n const subject1 = 'BBMO Support';\n let body1 = form1['message'].value.trim();\n const logs1 = localStorage.getItem('logs') || '';\n body1 = body1 + '\\n\\n' + logs1;\n const encodedSubject1 = encodeURIComponent(subject1);\n const encodedBody1 = encodeURIComponent(body1);\n const constructedUrl1 = `mailto:support@singularsound.com?subject=${encodedSubject1}&body=${encodedBody1}`;\n window.open(constructedUrl1, '_blank').focus();\n }\n @action\n downloadLogs() {\n const logs1 = localStorage.getItem('logs') || '';\n const blob1 = new Blob([\n logs1\n ], {\n type: 'text/plain'\n });\n const link1 = document.createElement('a');\n link1.href = URL.createObjectURL(blob1);\n link1.download = 'BBMO.log';\n link1.click();\n }\n static{\n template(`\n
\n

How can we help?

\n

Please let us know if you have a question, a suggestion, or need help with\n something. Download the log if reporting a bug and send it to\n support@singularsound.com.

\n

We’ll email you a reply (usually within 2-3 days).

\n\n {{#if this.error}}\n

{{this.error}}

\n {{/if}}\n \n Send\n Download Log\n \n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n HelpPopup: typeof HelpPopupComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{page-title (concat \\\"BeatBuddy Manager\\\" (if this.projectManager.isDirty \\\"*\\\"))}}\\n\\n
\\n
\\n \\n
\\n BBMO{{#if this.projectManager.projectFile}}-{{this.projectManager.projectFile.name}}\\n {{if this.projectManager.isDirty \\\"*\\\"}}{{/if}}\\n
\\n {{#if this.projectManager.currentProject}}\\n \\n {{/if}}\\n \\n {{#if this.projectManager.currentProject}}\\n \\n {{/if}}\\n
\\n
\\n {{#if this.browserIsSupported}}\\n {{#if this.projectManager.currentProject}}\\n
\\n
\\n \\n \\n Songs\\n \\n \\n \\n Playlists\\n \\n \\n \\n Drum Sets\\n \\n
\\n
\\n \\n {{#if this.showOptionsMenu}}\\n \\n Toggle Theme\\n Export All Folders and Drumsets\\n \\n {{/if}}\\n \\n \\n Save Project\\n Sync to SD Card\\n \\n \\n
\\n
\\n {{else}}\\n
\\n \\n \\n
\\n {{/if}}\\n {{/if}}\\n \\n
\\n {{#if this.browserIsSupported}}\\n {{#if this.projectManager.currentProject}}\\n
{{outlet}}
\\n
\\n \\n
\\n {{else}}\\n
\\n \\n

Welcome to BeatBuddy Manager.

\\n

Before you get started,\\n please backup your project.

\\n

Click\\n Open Project\\n and select the folder that contains your project (the folder with a .bbp file).\\n

\\n
\\n \\\"Open\\n
\\n

Because this is a web app, the browser will ask your permission to\\n let the site edit files\\n every time you open a project, and when you want to sync with your SD card.

\\n
\\n \\n
\\n
\\n {{/if}}\\n {{else}}\\n
\\n
\\n
\\n

This browser is not supported or you are using mobile. The BBMO is only supported on desktop using the latest Google Chrome, Microsoft Edge, Opera and Vivaldi browsers.

\\n
\\n

If you are using Safari or Firefox, consider writing to\\n Apple Support or\\n Firefox Support and asking them to allow Filesystem API on directories.\\n

\\n
\\n

Copy and paste this message to reach out:

\\n

\\\"Please create a new version of the browser app that supports the ability to use FileSystemAPI on directories, this is essential for working with a BeatBuddy project and SD cards that are saved on my computer using\\n the online editor.\\\"\\n

\\n
\\n
\\n
\\n {{/if}}\\n
\\n{{#if this.displayHelpPopup}}\\n \\n{{/if}}\\n\",{ moduleName: \"editor/restricted/template.hbs\" })","import require from 'require';\nfunction resolveInitializer(moduleName) {\n var module = require(moduleName, null, null, true);\n if (!module) {\n throw new Error(moduleName + ' must export an initializer.');\n }\n var initializer = module['default'];\n if (!initializer) {\n throw new Error(moduleName + ' must have a default export');\n }\n if (!initializer.name) {\n initializer.name = moduleName.slice(moduleName.lastIndexOf('/') + 1);\n }\n return initializer;\n}\nfunction registerInitializers(app, moduleNames) {\n for (var i = 0; i < moduleNames.length; i++) {\n app.initializer(resolveInitializer(moduleNames[i]));\n }\n}\nfunction registerInstanceInitializers(app, moduleNames) {\n for (var i = 0; i < moduleNames.length; i++) {\n app.instanceInitializer(resolveInitializer(moduleNames[i]));\n }\n}\nfunction _endsWith(str, suffix) {\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\n}\n\n/**\n * Configure your application as it boots\n */\nexport default function loadInitializers(app, prefix) {\n var initializerPrefix = prefix + '/initializers/';\n var instanceInitializerPrefix = prefix + '/instance-initializers/';\n var initializers = [];\n var instanceInitializers = [];\n // this is 2 pass because generally the first pass is the problem\n // and is reduced, and resolveInitializer has potential to deopt\n var moduleNames = Object.keys(requirejs._eak_seen);\n for (var i = 0; i < moduleNames.length; i++) {\n var moduleName = moduleNames[i];\n if (moduleName.lastIndexOf(initializerPrefix, 0) === 0) {\n if (!_endsWith(moduleName, '-test')) {\n initializers.push(moduleName);\n }\n } else if (moduleName.lastIndexOf(instanceInitializerPrefix, 0) === 0) {\n if (!_endsWith(moduleName, '-test')) {\n instanceInitializers.push(moduleName);\n }\n }\n }\n registerInitializers(app, initializers);\n registerInstanceInitializers(app, instanceInitializers);\n}","import Application from '@ember/application';\nimport Resolver from 'ember-resolver';\nimport loadInitializers from 'ember-load-initializers';\nimport config from 'editor/config/environment';\nimport 'overlayscrollbars/overlayscrollbars.css';\n\nexport default class App extends Application {\n modulePrefix = config.modulePrefix;\n podModulePrefix = config.podModulePrefix;\n Resolver = Resolver;\n}\n\nloadInitializers(App, config.modulePrefix);\n","import Controller from '@ember/controller';\n\nexport default class ApplicationController extends Controller {}\n","import Route from '@ember/routing/route';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport { isDevelopingApp, macroCondition } from '@embroider/macros';\n\nexport default class ApplicationRoute extends Route {\n @service declare projectManager: ProjectManagerService;\n @service declare router: RouterService;\n\n async beforeModel() {\n if (macroCondition(isDevelopingApp())) {\n const savedProject = await navigator.storage.getDirectory();\n try {\n await savedProject.getDirectoryHandle('SONGS');\n await this.projectManager.loadProject(savedProject);\n } catch (e) {\n // no-op\n }\n }\n }\n}\n","\nimport { importSync as i, macroCondition, getGlobalConfig } from '@embroider/macros';\nlet w = window;\nlet d = w.define;\n\n\ni(\"./-embroider-implicit-modules.js\");\n\nd(\"editor/app\", function(){ return i(\"editor/app.ts\");});\nd(\"editor/application/controller\", function(){ return i(\"editor/application/controller.ts\");});\nd(\"editor/application/route\", function(){ return i(\"editor/application/route.ts\");});\nd(\"editor/application/template\", function(){ return i(\"editor/application/template.hbs\");});\nd(\"editor/config/environment\", function(){ return i(\"editor/config/environment.js\");});\nd(\"editor/models/command\", function(){ return i(\"editor/models/command.ts\");});\nd(\"editor/models/drumset-commands\", function(){ return i(\"editor/models/drumset-commands.ts\");});\nd(\"editor/models/drumset\", function(){ return i(\"editor/models/drumset.ts\");});\nd(\"editor/models/folder-commands\", function(){ return i(\"editor/models/folder-commands.ts\");});\nd(\"editor/models/midi\", function(){ return i(\"editor/models/midi.ts\");});\nd(\"editor/models/playlist-commands\", function(){ return i(\"editor/models/playlist-commands.ts\");});\nd(\"editor/models/project-commands\", function(){ return i(\"editor/models/project-commands.ts\");});\nd(\"editor/models/project\", function(){ return i(\"editor/models/project.ts\");});\nd(\"editor/models/song-commands\", function(){ return i(\"editor/models/song-commands.ts\");});\nd(\"editor/models/song\", function(){ return i(\"editor/models/song.ts\");});\nd(\"editor/playground/controller\", function(){ return i(\"editor/playground/controller.ts\");});\nd(\"editor/playground/route\", function(){ return i(\"editor/playground/route.ts\");});\nd(\"editor/playground/template\", function(){ return i(\"editor/playground/template.hbs\");});\nd(\"editor/restricted/controller\", function(){ return i(\"editor/restricted/controller.ts\");});\nd(\"editor/restricted/drumsets/controller\", function(){ return i(\"editor/restricted/drumsets/controller.ts\");});\nd(\"editor/restricted/drumsets/drumset/controller\", function(){ return i(\"editor/restricted/drumsets/drumset/controller.ts\");});\nd(\"editor/restricted/drumsets/drumset/route\", function(){ return i(\"editor/restricted/drumsets/drumset/route.ts\");});\nd(\"editor/restricted/drumsets/drumset/template\", function(){ return i(\"editor/restricted/drumsets/drumset/template.hbs\");});\nd(\"editor/restricted/drumsets/index/route\", function(){ return i(\"editor/restricted/drumsets/index/route.ts\");});\nd(\"editor/restricted/drumsets/route\", function(){ return i(\"editor/restricted/drumsets/route.ts\");});\nd(\"editor/restricted/drumsets/template\", function(){ return i(\"editor/restricted/drumsets/template.hbs\");});\nd(\"editor/restricted/index/route\", function(){ return i(\"editor/restricted/index/route.ts\");});\nd(\"editor/restricted/index/template\", function(){ return i(\"editor/restricted/index/template.hbs\");});\nd(\"editor/restricted/playlists/controller\", function(){ return i(\"editor/restricted/playlists/controller.ts\");});\nd(\"editor/restricted/playlists/index/route\", function(){ return i(\"editor/restricted/playlists/index/route.ts\");});\nd(\"editor/restricted/playlists/index/template\", function(){ return i(\"editor/restricted/playlists/index/template.hbs\");});\nd(\"editor/restricted/playlists/playlist/controller\", function(){ return i(\"editor/restricted/playlists/playlist/controller.ts\");});\nd(\"editor/restricted/playlists/playlist/route\", function(){ return i(\"editor/restricted/playlists/playlist/route.ts\");});\nd(\"editor/restricted/playlists/playlist/template\", function(){ return i(\"editor/restricted/playlists/playlist/template.hbs\");});\nd(\"editor/restricted/playlists/route\", function(){ return i(\"editor/restricted/playlists/route.ts\");});\nd(\"editor/restricted/playlists/template\", function(){ return i(\"editor/restricted/playlists/template.hbs\");});\nd(\"editor/restricted/route\", function(){ return i(\"editor/restricted/route.ts\");});\nd(\"editor/restricted/songs/controller\", function(){ return i(\"editor/restricted/songs/controller.ts\");});\nd(\"editor/restricted/songs/folder/index/controller\", function(){ return i(\"editor/restricted/songs/folder/index/controller.ts\");});\nd(\"editor/restricted/songs/folder/index/route\", function(){ return i(\"editor/restricted/songs/folder/index/route.ts\");});\nd(\"editor/restricted/songs/folder/index/template\", function(){ return i(\"editor/restricted/songs/folder/index/template.hbs\");});\nd(\"editor/restricted/songs/folder/route\", function(){ return i(\"editor/restricted/songs/folder/route.ts\");});\nd(\"editor/restricted/songs/folder/song/controller\", function(){ return i(\"editor/restricted/songs/folder/song/controller.ts\");});\nd(\"editor/restricted/songs/folder/song/route\", function(){ return i(\"editor/restricted/songs/folder/song/route.ts\");});\nd(\"editor/restricted/songs/folder/song/template\", function(){ return i(\"editor/restricted/songs/folder/song/template.hbs\");});\nd(\"editor/restricted/songs/folder/template\", function(){ return i(\"editor/restricted/songs/folder/template.hbs\");});\nd(\"editor/restricted/songs/index/controller\", function(){ return i(\"editor/restricted/songs/index/controller.ts\");});\nd(\"editor/restricted/songs/index/route\", function(){ return i(\"editor/restricted/songs/index/route.ts\");});\nd(\"editor/restricted/songs/index/template\", function(){ return i(\"editor/restricted/songs/index/template.hbs\");});\nd(\"editor/restricted/songs/route\", function(){ return i(\"editor/restricted/songs/route.ts\");});\nd(\"editor/restricted/songs/template\", function(){ return i(\"editor/restricted/songs/template.hbs\");});\nd(\"editor/restricted/template\", function(){ return i(\"editor/restricted/template.hbs\");});\nd(\"editor/router\", function(){ return i(\"editor/router.ts\");});\nd(\"editor/services/pasteboard\", function(){ return i(\"editor/services/pasteboard.ts\");});\nd(\"editor/services/progress\", function(){ return i(\"editor/services/progress.ts\");});\nd(\"editor/services/project-manager\", function(){ return i(\"editor/services/project-manager.ts\");});\nd(\"editor/services/song-player\", function(){ return i(\"editor/services/song-player.ts\");});\nd(\"editor/services/status\", function(){ return i(\"editor/services/status.ts\");});\nd(\"editor/services/undo-manager\", function(){ return i(\"editor/services/undo-manager.ts\");});\nd(\"editor/services/virtual-pedal\", function(){ return i(\"editor/services/virtual-pedal.ts\");});\nd(\"editor/utils/base64-to-array-buffer\", function(){ return i(\"editor/utils/base64-to-array-buffer.ts\");});\nd(\"editor/utils/bbff-filename\", function(){ return i(\"editor/utils/bbff-filename.ts\");});\nd(\"editor/utils/build-gain-table\", function(){ return i(\"editor/utils/build-gain-table.ts\");});\nd(\"editor/utils/constrain-value\", function(){ return i(\"editor/utils/constrain-value.ts\");});\nd(\"editor/utils/crc32\", function(){ return i(\"editor/utils/crc32.ts\");});\nd(\"editor/utils/element-exists\", function(){ return i(\"editor/utils/element-exists.ts\");});\nd(\"editor/utils/file-size\", function(){ return i(\"editor/utils/file-size.ts\");});\nd(\"editor/utils/gm-drum-map\", function(){ return i(\"editor/utils/gm-drum-map.ts\");});\nd(\"editor/utils/list\", function(){ return i(\"editor/utils/list.ts\");});\nd(\"editor/utils/music-utils\", function(){ return i(\"editor/utils/music-utils.ts\");});\nd(\"editor/utils/name-filter\", function(){ return i(\"editor/utils/name-filter.ts\");});\nd(\"editor/utils/play-accent\", function(){ return i(\"editor/utils/play-accent.ts\");});\nd(\"editor/utils/play-instrument\", function(){ return i(\"editor/utils/play-instrument.ts\");});\nd(\"editor/utils/promise-batch\", function(){ return i(\"editor/utils/promise-batch.ts\");});\nd(\"editor/utils/reader\", function(){ return i(\"editor/utils/reader.ts\");});\nd(\"editor/utils/shuffle\", function(){ return i(\"editor/utils/shuffle.ts\");});\nd(\"editor/utils/type-utils\", function(){ return i(\"editor/utils/type-utils.ts\");});\nd(\"editor/utils/unique\", function(){ return i(\"editor/utils/unique.ts\");});\nd(\"editor/utils/wait\", function(){ return i(\"editor/utils/wait.ts\");});\nd(\"editor/utils/writer\", function(){ return i(\"editor/utils/writer.ts\");});\nd(\"editor/services/page-title\", function(){ return i(\"editor/services/page-title.js\");});\nd(\"editor/component-managers/glimmer\", function(){ return i(\"editor/component-managers/glimmer.js\");});\nd(\"editor/initializers/app-version\", function(){ return i(\"editor/initializers/app-version.js\");});\nd(\"editor/data-adapter\", function(){ return i(\"editor/data-adapter.js\");});\nd(\"editor/initializers/ember-data\", function(){ return i(\"editor/initializers/ember-data.js\");});\nd(\"editor/services/store\", function(){ return i(\"editor/services/store.js\");});\nd(\"editor/transforms/boolean\", function(){ return i(\"editor/transforms/boolean.js\");});\nd(\"editor/transforms/date\", function(){ return i(\"editor/transforms/date.js\");});\nd(\"editor/transforms/number\", function(){ return i(\"editor/transforms/number.js\");});\nd(\"editor/transforms/string\", function(){ return i(\"editor/transforms/string.js\");});\nd(\"editor/container-debug-adapter\", function(){ return i(\"editor/container-debug-adapter.js\");});\n\n if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {\nd(\"editor/instance-initializers/setup-fetch\", function(){ return i(\"editor/instance-initializers/setup-fetch.js\");});\n }\n\n\n\n\nif (!runningTests) {\n i(\"../app\").default.create({\"name\":\"editor\",\"version\":\"1.5.4+29c7bc7d\"});\n}\n\n","import { template } from \"@ember/template-compiler\";\nimport Component from '@glimmer/component';\nimport FaIcon from '@fortawesome/ember-fontawesome/components/fa-icon';\nimport { type IconName } from '@fortawesome/fontawesome-svg-core';\ninterface ButtonSignature {\n Element: HTMLButtonElement;\n Args: {\n icon?: IconName;\n };\n Blocks: {\n default: [];\n };\n}\nexport default class Button extends Component {\n constructor(owner1: unknown, args1: ButtonSignature['Args']){\n super(owner1, args1);\n }\n static{\n template(`\n {{#if @icon~}}\n \n {{/if}}{{yield}}\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n Button: typeof Button;\n }\n}\n","import { template } from \"@ember/template-compiler\";\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { on } from '@ember/modifier';\nimport onClickOutside from 'editor/modifiers/on-click-outside';\nimport onKey from 'editor/modifiers/on-key';\nimport pick from 'editor/helpers/pick';\nimport { get } from '@ember/helper';\nimport { modifier } from 'ember-modifier';\nimport { next } from '@ember/runloop';\nconst didInsert = modifier(// eslint-disable-next-line no-unused-vars\n(element1: HTMLInputElement, [callback1]: [(el: HTMLInputElement) => void])=>{\n callback1(element1);\n});\ninterface EditableFieldSignature {\n Element: HTMLElement;\n Args: {\n model: any;\n field: string;\n when?: boolean;\n filter?: string;\n // eslint-disable-next-line no-unused-vars\n onChange: (value: string) => void;\n };\n Blocks: {\n default: [];\n editor: [() => void];\n };\n}\nexport default class EditableField extends Component {\n @tracked\n isEditing = false;\n constructor(owner1: unknown, args1: EditableFieldSignature['Args']){\n super(owner1, args1);\n }\n @action\n enableEditing(ev1: MouseEvent) {\n if (this.args.when ?? true) {\n ev1.preventDefault();\n ev1.stopPropagation();\n this.isEditing = true;\n }\n }\n @action\n stopPropagation(ev1: MouseEvent) {\n ev1.stopPropagation();\n }\n @action\n disableEditing() {\n if (this.isEditing) {\n // eslint-disable-next-line ember/no-runloop\n next(()=>{\n this.isEditing = false;\n });\n }\n }\n @action\n registerInput(input1: HTMLInputElement) {\n input1.focus();\n }\n @action\n filterInput(ev1: KeyboardEvent) {\n if (this.args.filter) {\n if (ev1.key.match(this.args.filter)) {\n return;\n }\n ev1.preventDefault();\n }\n }\n static{\n template(`\n {{! template-lint-disable no-invalid-interactive}}\n {{~#if this.isEditing}}\n {{~#if (has-block \"editor\")}}{{yield this.disableEditing to=\"editor\"}}{{else~}}\n {{/if}}\n {{~else~}}\n
{{yield}}
\n {{~/if~}}\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n EditableField: typeof EditableField;\n }\n}\n","import { template } from \"@ember/template-compiler\";\nimport FaIcon from '@fortawesome/ember-fontawesome/components/fa-icon';\nimport { type IconName } from '@fortawesome/fontawesome-svg-core';\nimport Component from '@glimmer/component';\ninterface MenuButtonSignature {\n Element: HTMLButtonElement;\n Args: {\n icon?: IconName;\n };\n Blocks: {\n default: [];\n };\n}\nexport default class MenuButton extends Component {\n constructor(owner1: unknown, args1: MenuButtonSignature['Args']){\n super(owner1, args1);\n }\n static{\n template(`\n {{#if @icon~}}\n \n {{/if}}{{yield}}\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n MenuButton: typeof MenuButton;\n }\n}\n","import { template } from \"@ember/template-compiler\";\nimport FaIcon from '@fortawesome/ember-fontawesome/components/fa-icon';\nimport Component from '@glimmer/component';\ninterface OptionButtonSignature {\n Element: HTMLButtonElement;\n Args: {\n };\n Blocks: {\n };\n}\nexport default class OptionButton extends Component {\n constructor(owner1: unknown, args1: OptionButtonSignature['Args']){\n super(owner1, args1);\n }\n static{\n template(`\n \n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n OptionButton: typeof OptionButton;\n }\n}\n","import { template } from \"@ember/template-compiler\";\nimport Component from '@glimmer/component';\nimport FaIcon from '@fortawesome/ember-fontawesome/components/fa-icon';\nimport { type IconName } from '@fortawesome/fontawesome-svg-core';\nimport EditableField from './editable-field';\nimport { action } from '@ember/object';\ninterface SelectableItemSignature {\n Element: HTMLDivElement;\n Args: {\n icon?: IconName;\n model?: object;\n field?: string;\n filter?: string;\n when?: boolean;\n // eslint-disable-next-line no-unused-vars\n onChange?: (value: string) => void;\n };\n Blocks: {\n default: [];\n };\n}\nexport default class SelectableItem extends Component {\n constructor(owner1: unknown, args1: SelectableItemSignature['Args']){\n super(owner1, args1);\n }\n get model() {\n return this.args.model ?? {};\n }\n get field() {\n return this.args.field ?? 'name';\n }\n @action\n onChange(value1: string) {\n if (this.args.onChange) {\n this.args.onChange(value1);\n }\n }\n static{\n template(`\n {{#if @icon}}\n {{/if~}}\n {{yield}}\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n SelectableItem: typeof SelectableItem;\n }\n}\n","import { template } from \"@ember/template-compiler\";\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport markDroppable from 'editor/modifiers/mark-droppable';\ninterface DragDropContainerSignature {\n Element: HTMLDivElement;\n Args: {\n // eslint-disable-next-line no-unused-vars\n onDrop: (files: FileList) => void;\n isActive?: boolean;\n };\n Blocks: {\n default: [];\n };\n}\nexport default class DragDropContainer extends Component {\n constructor(owner1: unknown, args1: DragDropContainerSignature['Args']){\n super(owner1, args1);\n }\n @tracked\n isDragging = false;\n dragTarget?: EventTarget | null;\n isActive() {\n return this.args.isActive ?? true;\n }\n @action\n handleDragEnter(ev1: DragEvent) {\n this.#cancelEvents(ev1);\n if (!this.isActive()) {\n return;\n }\n this.isDragging = true;\n this.dragTarget = ev1.target;\n }\n @action\n handleDragOver(ev1: DragEvent) {\n this.#cancelEvents(ev1);\n if (ev1.dataTransfer) {\n ev1.dataTransfer.dropEffect = 'copy';\n }\n }\n @action\n handleDragLeave(ev1: DragEvent) {\n if (ev1.target == this.dragTarget) {\n this.#cancelEvents(ev1);\n this.isDragging = false;\n this.dragTarget = undefined;\n }\n }\n @action\n async handleDrop(ev1: DragEvent) {\n if (!this.isActive()) {\n return;\n }\n let files1 = ev1.dataTransfer?.files;\n this.isDragging = false;\n this.dragTarget = undefined;\n if (files1?.length) {\n this.#cancelEvents(ev1);\n this.args.onDrop(files1);\n }\n }\n #cancelEvents(ev1: DragEvent) {\n ev1.stopPropagation();\n ev1.preventDefault();\n }\n static{\n template(`\n \n {{yield}}\n \n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n DragDropContainer: typeof DragDropContainer;\n }\n}\n","import { set as setValue } from '@ember/object';\n\nexport default function set(target: any, path: string, value: any) {\n return () => {\n if (target.isDestroying || target.isDestroyed) {\n return;\n }\n setValue(target, path, value);\n };\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n set: typeof set;\n }\n}\n","import { template } from \"@ember/template-compiler\";\nimport { concat, fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport { service } from '@ember/service';\nimport FaIcon from '@fortawesome/ember-fontawesome/components/fa-icon';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport DragDropContainer from 'editor/components/drag-drop-container';\nimport eq from 'editor/helpers/eq';\nimport gt from 'editor/helpers/gt';\nimport htmlId from 'editor/helpers/html-id';\nimport not from 'editor/helpers/not';\nimport or from 'editor/helpers/or';\nimport pick from 'editor/helpers/pick';\nimport queue from 'editor/helpers/queue';\nimport set from 'editor/helpers/set';\nimport type { Instrument } from 'editor/models/drumset';\nimport Drumset from 'editor/models/drumset';\nimport { PartType, SectionType, SongPart } from 'editor/models/song';\nimport { AddAccentCommand, ImportAccentCommand, RandomiseFillsCommand, RemoveAccentCommand, SortFillsCommand, UpdateAccentVolumeCommand } from 'editor/models/song-commands';\nimport disabled from 'editor/modifiers/disabled';\nimport onClickOutside from 'editor/modifiers/on-click-outside';\nimport selected from 'editor/modifiers/selected';\nimport type PasteboardService from 'editor/services/pasteboard';\nimport ProjectManagerService, { DrumsetFile, EffectFile } from 'editor/services/project-manager';\nimport SongPlayerService from 'editor/services/song-player';\nimport UndoManagerService from 'editor/services/undo-manager';\nimport constrainValue from 'editor/utils/constrain-value';\nimport playInstrument, { getGainNodeForVelocityRandom } from 'editor/utils/play-instrument';\nimport velcro from 'ember-velcro/modifiers/velcro';\nimport Button from '../button';\nimport MenuButton from '../menu-button';\nimport OptionButton from '../option-button';\nimport SelectableItem from '../selectable-item';\nimport sortable from 'editor/modifiers/sortable';\ninterface BuildAccentWindowSignature {\n Element: HTMLDivElement;\n Args: {\n // eslint-disable-next-line no-unused-vars\n importAccent: (file: File) => void;\n };\n Blocks: {\n };\n}\n// Refactor: This shares a lot of code with the instrument import component\nlet BuildAccentWindow = class BuildAccentWindow extends Component {\n @service\n projectManager: ProjectManagerService;\n audioContext: AudioContext;\n drumsetVolume: GainNode;\n @tracked\n selectedDrumset?: DrumsetFile;\n @tracked\n instrumentsLoading = false;\n @tracked\n selectedInstruments: Instrument[] = [];\n @tracked\n velocity: number = 127;\n @tracked\n _name?: string;\n constructor(owner1: unknown, args1: BuildAccentWindowSignature['Args']){\n super(owner1, args1);\n this.audioContext = new AudioContext({\n latencyHint: 'interactive',\n sampleRate: 44100\n });\n this.drumsetVolume = new GainNode(this.audioContext, {\n gain: 1\n });\n this.drumsetVolume.connect(this.audioContext.destination);\n }\n @action\n async selectDrumset(drumsetFile1: DrumsetFile) {\n this.selectedDrumset = drumsetFile1;\n this.instrumentsLoading = true;\n await drumsetFile1.parse().then((drumset1)=>{\n if (drumset1) {\n drumset1.prepareAudio(this.audioContext);\n }\n });\n this.instrumentsLoading = false;\n }\n get availableInstruments() {\n const drumsetPlayableInstruments1 = this.selectedDrumset?.drumset?.playableInstruments || [];\n return drumsetPlayableInstruments1.filter((i1)=>this.selectedInstruments.includes(i1) || !this.selectedInstruments.map((i1)=>i1.id).includes(i1.id));\n }\n @action\n isSelectedInstrument(instrument1: Instrument) {\n return this.selectedInstruments.includes(instrument1);\n }\n @action\n toggleInstrument(instrument1: Instrument, ev1?: MouseEvent) {\n if (ev1?.shiftKey) {\n const firstSelectedInstrument1 = this.selectedInstruments.at(0);\n const lastSelectedInstrument1 = this.selectedInstruments.at(-1);\n if (firstSelectedInstrument1 && lastSelectedInstrument1) {\n const firstIndex1 = this.availableInstruments.indexOf(firstSelectedInstrument1);\n const lastIndex1 = this.availableInstruments.indexOf(lastSelectedInstrument1);\n const currentIndex1 = this.availableInstruments.indexOf(instrument1);\n if (currentIndex1 < firstIndex1) {\n this.selectedInstruments = [\n ...this.selectedInstruments,\n ...this.availableInstruments.slice(currentIndex1, firstIndex1 + 1)\n ];\n } else if (currentIndex1 > lastIndex1) {\n this.selectedInstruments = [\n ...this.selectedInstruments,\n ...this.availableInstruments.slice(lastIndex1, currentIndex1 + 1)\n ];\n } else {\n this.selectedInstruments = [\n ...this.selectedInstruments,\n ...this.availableInstruments.slice(firstIndex1, currentIndex1 + 1)\n ];\n }\n } else {\n this.selectedInstruments = [\n instrument1\n ];\n }\n } else {\n if (this.isSelectedInstrument(instrument1)) {\n this.selectedInstruments = this.selectedInstruments.filter((i1)=>i1 != instrument1);\n } else {\n this.selectedInstruments = [\n ...this.selectedInstruments,\n instrument1\n ];\n }\n }\n // remove window selection\n window.getSelection()?.removeAllRanges();\n }\n @action\n setVelocity(value1: string) {\n this.velocity = constrainValue(parseInt(value1, 10), 1, 127);\n }\n get name() {\n return (this._name ?? [\n this.selectedDrumset?.name,\n ...this.selectedInstruments.map((i1)=>i1.name),\n this.velocity\n ].join(':'));\n }\n @action\n setName(name1: string) {\n this._name = name1;\n }\n @action\n playAccent() {\n this.audioContext.resume();\n this.selectedInstruments.forEach((instrument1)=>{\n playInstrument(this.audioContext, this.drumsetVolume, instrument1, 0, 0, this.velocity);\n });\n }\n @action\n async addAccent() {\n // Calculate the total time from the longest instrument sample\n const totalTime1 = Math.max(...this.selectedInstruments.map((instrument1)=>{\n let [, sample1] = getGainNodeForVelocityRandom(this.audioContext, this.drumsetVolume, instrument1, this.velocity);\n if (sample1) {\n return sample1.nSample / sample1.nChannel;\n }\n return 0;\n }));\n const audioContext1 = new OfflineAudioContext({\n numberOfChannels: 2,\n length: Math.ceil(totalTime1 / 2),\n sampleRate: 44100\n });\n const gainNode1 = new GainNode(audioContext1, {\n gain: 1\n });\n gainNode1.connect(audioContext1.destination);\n this.selectedInstruments.forEach((instrument1)=>{\n playInstrument(audioContext1, gainNode1, instrument1, 0, 0, this.velocity);\n });\n const audioBuffer1 = await audioContext1.startRendering();\n const fileData1 = Drumset.saveWaveFile(audioBuffer1);\n this.args.importAccent(new File([\n fileData1\n ], `${this.name}.wav`, {\n type: 'audio/wav'\n }));\n }\n static{\n template(`\n
\n \n

Build an accent

\n

Select a drumset and instruments to build an accent (e.g. Bass drum and crash\n cymbal)

\n
\n
\n
\n {{#each this.projectManager.drumsets as |drumset|}}\n {{drumset.name}}\n {{/each}}\n
\n
\n
\n
\n {{#if this.instrumentsLoading}}\n
Loading...
\n {{else}}\n {{#each this.availableInstruments as |instrument|}}\n {{instrument.id}}. {{instrument.name}}\n\n {{else}}\n Select a drumset to view instruments\n {{/each}}\n {{/if}}\n
\n
\n
\n
\n \n \n
\n \n Add accent\n
\n
\n
\n \n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n};\ninterface AddAccentButtonSignature {\n Element: HTMLDivElement;\n Args: {\n // eslint-disable-next-line no-unused-vars\n addAccent: (effect: EffectFile) => void;\n // eslint-disable-next-line no-unused-vars\n importAccent: (files: FileList | File[]) => void;\n // eslint-disable-next-line no-unused-vars\n playAccent: (part: SongPart) => void;\n };\n Blocks: {\n };\n}\nlet AddAccentButton = class AddAccentButton extends Component {\n @service\n projectManager: ProjectManagerService;\n @service\n songPlayer: SongPlayerService;\n @service\n undoManager: UndoManagerService;\n @tracked\n showAccents = false;\n @tracked\n showBuildAccentWindow = false;\n elementId = guidFor(this);\n get sortedEffects() {\n return this.projectManager.effects.toSorted((e11, e21)=>e11.name.localeCompare(e21.name));\n }\n @action\n toggleShowAccents() {\n this.showAccents = !this.showAccents;\n }\n @action\n toggleShowBuildAccentWindow() {\n this.showBuildAccentWindow = !this.showBuildAccentWindow;\n }\n @action\n addAccent(effect1: EffectFile) {\n this.args.addAccent(effect1);\n }\n @action\n importAccent(file1: File) {\n this.args.importAccent([\n file1\n ]);\n }\n @action\n playEffect(effect1: EffectFile) {\n this.songPlayer.playAccent(effect1, 100);\n }\n @action\n popupMiddleware() {\n return [\n // Calculates the maximum height for the accent popup list\n {\n name: 'Max height',\n options: {},\n async fn (state1: any) {\n const availableHeight1 = document.documentElement.clientHeight;\n const top1 = state1.rects.reference.y + state1.rects.reference.height;\n const height1 = availableHeight1 - top1 - 20;\n state1.elements.floating.style.maxHeight = `${height1}px`;\n return state1;\n }\n }\n ];\n }\n static{\n template(`\n
\n \n accent\n \n {{#if this.showAccents}}\n \n {{#if this.showBuildAccentWindow}}\n \n {{/if}}\n \n Build an accent\n
\n {{#each this.sortedEffects as |effect|}}\n \n \n \n {{effect.name}}\n \n \n {{/each}}\n \n {{/if}}\n \n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n};\ninterface VolumeButtonSignature {\n Element: HTMLDivElement;\n Args: {\n part: SongPart;\n // eslint-disable-next-line no-unused-vars\n playAccent: (part: SongPart) => void;\n };\n Blocks: {\n };\n}\nlet VolumeButton = class VolumeButton extends Component {\n @service\n undoManager: UndoManagerService;\n @tracked\n showVolume = false;\n get part() {\n return this.args.part;\n }\n get volumeIcon() {\n if (this.part.accentVolume < 90) {\n return 'volume-low';\n } else if (this.part.accentVolume > 110) {\n return 'volume-high';\n } else {\n return 'volume';\n }\n }\n @action\n resetVolume() {\n this.changeVolume(100);\n }\n @action\n async changeVolume(volume1: number) {\n await this.undoManager.executeCommand(new UpdateAccentVolumeCommand(this.part, volume1));\n this.args.playAccent(this.part);\n }\n @action\n toggleShowVolume(ev1: Event) {\n ev1.stopPropagation();\n this.showVolume = !this.showVolume;\n }\n @action\n noop(ev1: Event) {\n ev1.stopPropagation();\n ev1.stopImmediatePropagation();\n }\n static{\n template(`\n \n \n {{#if this.showVolume}}\n
\n \n
\n {{/if}}\n \n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n};\ninterface SongPlayerPartSignature {\n Element: HTMLDivElement;\n Args: {\n type: PartType;\n part: SongPart;\n name: string;\n // eslint-disable-next-line no-unused-vars\n addPart?: (ev: MouseEvent) => void;\n // eslint-disable-next-line no-unused-vars\n removePart?: (part: SongPart, ev: MouseEvent) => void;\n // eslint-disable-next-line no-unused-vars\n duplicatePart?: (part: SongPart, ev: MouseEvent) => void;\n // eslint-disable-next-line no-unused-vars\n pastePart?: (part: SongPart, ev: MouseEvent) => void;\n // eslint-disable-next-line no-unused-vars\n addTrack: (sectionType: SectionType) => void;\n // eslint-disable-next-line no-unused-vars\n selectTrack: (sectionType: SectionType, index: number) => void;\n // eslint-disable-next-line no-unused-vars\n importMidi: (sectionType: SectionType, index: number, files: File[]) => void;\n // eslint-disable-next-line no-unused-vars\n importMultiMidi: (sectionType: SectionType, index: number, files: File[]) => void;\n };\n Blocks: {\n };\n}\nexport default class SongPlayerPartComponent extends Component {\n @service\n songPlayer: SongPlayerService;\n @service\n projectManager: ProjectManagerService;\n @service\n undoManager: UndoManagerService;\n @service\n pasteboard: PasteboardService;\n @tracked\n showMenu = false;\n @tracked\n showFillMenu = false;\n @tracked\n showAccentMenu = false;\n constructor(owner1: unknown, args1: SongPlayerPartSignature['Args']){\n super(owner1, args1);\n }\n elementId = guidFor(this);\n get part(): SongPart {\n return this.args.part;\n }\n get partSupportsFills() {\n return this.args.type === PartType.PART;\n }\n get canAddFill() {\n return this.partSupportsFills && this.part.fills.length < 8;\n }\n get canAddMain() {\n return !this.part.main;\n }\n get partSupportsTransition() {\n return this.args.type === PartType.PART;\n }\n get canAddTransition() {\n return this.partSupportsTransition && !this.part.transition;\n }\n get partSupportsAccents() {\n return this.args.type === PartType.PART;\n }\n get canAddAccent() {\n return this.partSupportsAccents && !this.part.hasAccent;\n }\n @action\n accentName(part1: SongPart) {\n return this.projectManager.findEffect(part1.accentFileName)?.name;\n }\n @action\n async playAccent(part1: SongPart) {\n const accent1 = this.projectManager.findEffect(part1.accentFileName);\n if (accent1) {\n this.songPlayer.playAccent(accent1, part1.accentVolume);\n }\n }\n @action\n removeAccent(part1: SongPart) {\n this.undoManager.executeCommand(new RemoveAccentCommand(part1));\n }\n @action\n toggleShuffleFills() {\n this.undoManager.executeCommand(new RandomiseFillsCommand(this.part, !this.part.shuffleFills));\n }\n get hasCopiedPart() {\n return this.pasteboard.hasCopy('part');\n }\n get hasCopiedAccent() {\n return this.pasteboard.hasCopy('accent');\n }\n @action\n copyPart(part1: SongPart) {\n this.pasteboard.store('part', part1);\n }\n @action\n copyAccent(part1: SongPart) {\n const accent1 = this.projectManager.findEffect(part1.accentFileName);\n this.pasteboard.store('accent', accent1);\n }\n @action\n pasteAccent(part1: SongPart) {\n const loadedAccent1 = this.projectManager.findEffect(part1.accentFileName);\n const accent1 = this.pasteboard.retrieve('accent');\n if (!loadedAccent1) {\n this.undoManager.executeCommand(new AddAccentCommand(this.part, accent1.path));\n } else {\n this.removeAccent(part1);\n this.undoManager.executeCommand(new AddAccentCommand(this.part, accent1.path));\n }\n }\n partType(type1: PartType) {\n switch(type1){\n case PartType.INTRO:\n return 'intro';\n case PartType.OUTRO:\n return 'outro';\n case PartType.PART:\n return 'part';\n default:\n throw new Error('Unknown part type');\n }\n }\n @action\n addAccent(effectFile1: EffectFile) {\n this.undoManager.executeCommand(new AddAccentCommand(this.part, effectFile1.path));\n }\n @action\n importAccent(files1: FileList | File[]) {\n if (files1.length > 0) {\n const file1 = files1[0]!;\n if (file1.type !== 'audio/wav') {\n console.error('Invalid file type');\n return;\n }\n const command1 = new ImportAccentCommand(this.projectManager, file1);\n command1.on('execute', (effectFile1)=>{\n this.undoManager.appendCommand(new AddAccentCommand(this.part, effectFile1.path));\n });\n this.undoManager.executeCommand(command1);\n }\n }\n @action\n importMidi(sectionType1: SectionType, index1: number, files1: FileList) {\n const midiFiles1 = Array.from(files1).filter((file1)=>file1.type === 'audio/midi' || file1.type === 'audio/mid');\n if (midiFiles1.length === 0) {\n console.error('No MIDI files found');\n return;\n }\n this.args.importMidi(sectionType1, index1, midiFiles1);\n }\n @action\n importMidis(sectionType1: SectionType, index1: number) {\n this.args.importMultiMidi(sectionType1, index1, []);\n }\n @action\n sortFills(oldIndex1: number, newIndex1: number) {\n this.undoManager.executeCommand(new SortFillsCommand(this.part, oldIndex1, newIndex1));\n }\n static{\n template(`\n \n
\n {{#if (eq @part.type PartType.PART)}}{{else}}{{/if}}\n {{@name}}\n
\n \n {{#if @part.main}}\n \n {{@part.main.name}}\n \n {{/if}}\n {{#if this.canAddMain}}\n track\n {{/if}}\n \n \n \n {{#each @part.fills as |fill i|}}\n
\n \n {{fill.name}}\n \n
\n {{/each}}\n {{#if (gt @part.fills.length 1)}}\n \n {{/if}}\n {{#if this.canAddFill}}\n {{#if (eq @part.fills.length 0)}}\n
\n \n \n
\n {{else}}\n \n \n {{/if}}\n {{/if}}\n \n \n \n {{#if @part.transition}}\n \n {{@part.transition.name}}\n \n {{/if}}\n {{#if this.canAddTransition}}\n transition\n {{/if}}\n \n \n {{#if @part.hasAccent}}\n \n \n \n \n {{#if this.showAccentMenu}}\n \n Copy\n Paste\n Delete\n \n {{/if}}\n \n {{else if this.canAddAccent}}\n \n \n \n {{#if this.showAccentMenu}}\n \n Paste\n \n {{/if}}\n \n {{/if}}\n \n
\n {{#if @addPart}}\n
\n \n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\n","export interface CacheOptions {\n // initial value of _value.\n _initialValue: Value;\n // Custom comparison function if shallow compare isn't enough. Returns true if nothing changed.\n _equal?: EqualCachePropFunction;\n // If true always updates _value and _previous, otherwise they update only when they changed.\n _alwaysUpdateValues?: boolean;\n}\n\nexport type CacheValues = [value: T, changed: boolean, previous?: T];\n\nexport type EqualCachePropFunction = (currentVal: Value, newVal: Value) => boolean;\n\nexport type CacheUpdater = (current: Value, previous?: Value) => Value;\n\nexport type UpdateCacheContextual = (newValue: Value, force?: boolean) => CacheValues;\n\nexport type UpdateCache = (force?: boolean) => CacheValues;\n\nexport type GetCurrentCache = (force?: boolean) => CacheValues;\n\nexport type Cache = [UpdateCache, GetCurrentCache];\n\nexport type CacheContextual = [UpdateCacheContextual, GetCurrentCache];\n\ntype CreateCache = {\n (options: CacheOptions): CacheContextual;\n (options: CacheOptions, update: CacheUpdater): Cache;\n (options: CacheOptions, update?: CacheUpdater):\n | CacheContextual\n | Cache;\n};\n\nexport const createCache: CreateCache = (\n options: CacheOptions,\n update?: CacheUpdater\n): CacheContextual | Cache => {\n const { _initialValue, _equal, _alwaysUpdateValues } = options;\n let _value: Value = _initialValue;\n let _previous: Value | undefined;\n\n const cacheUpdateContextual: UpdateCacheContextual = (newValue, force?) => {\n const curr = _value;\n\n const newVal = newValue;\n const changed = force || (_equal ? !_equal(curr, newVal) : curr !== newVal);\n\n if (changed || _alwaysUpdateValues) {\n _value = newVal;\n _previous = curr;\n }\n\n return [_value, changed, _previous];\n };\n const cacheUpdateIsolated: UpdateCache = (force?) =>\n cacheUpdateContextual(update!(_value, _previous), force);\n\n const getCurrentCache: GetCurrentCache = (force?: boolean) => [\n _value,\n !!force, // changed\n _previous,\n ];\n\n return [update ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache] as\n | CacheContextual\n | Cache;\n};\n","export const isBrowser =\r\n typeof window !== 'undefined' &&\r\n // deno has the global `window` defined, so additionally check for document\r\n typeof document !== 'undefined';\r\n","import { isBrowser } from '../compatibility/isBrowser';\r\n\r\nexport const wnd = (isBrowser ? window : {}) as typeof window;\r\nexport const mathMax = Math.max;\r\nexport const mathMin = Math.min;\r\nexport const mathRound = Math.round;\r\nexport const mathFloor = Math.floor;\r\nexport const mathCeil = Math.ceil;\r\nexport const mathAbs = Math.abs;\r\nexport const cAF = wnd.cancelAnimationFrame;\r\nexport const rAF = wnd.requestAnimationFrame;\r\nexport const setT = wnd.setTimeout;\r\nexport const clearT = wnd.clearTimeout;\r\n","import { wnd } from '../utils/alias';\r\n\r\nconst getApi = (name: string) =>\r\n (typeof wnd[name as keyof typeof wnd] !== 'undefined'\r\n ? wnd[name as keyof typeof wnd]\r\n : undefined) as T;\r\n\r\nexport const MutationObserverConstructor = getApi('MutationObserver');\r\nexport const IntersectionObserverConstructor =\r\n getApi('IntersectionObserver');\r\nexport const ResizeObserverConstructor = getApi('ResizeObserver');\r\nexport const scrollT = getApi AnimationTimeline>('ScrollTimeline');\r\n","import type { PlainObject } from '~/typings';\r\nimport { isBrowser } from '../compatibility/isBrowser';\r\n\r\nconst ElementNodeType = isBrowser && Node.ELEMENT_NODE;\r\nconst { toString, hasOwnProperty } = Object.prototype;\r\nconst typeRgx = /^\\[object (.+)\\]$/;\r\n\r\nexport const isUndefined = (obj: any): obj is undefined => obj === undefined;\r\n\r\nexport const isNull = (obj: any): obj is null => obj === null;\r\n\r\nexport const type = (obj: any): string =>\r\n isUndefined(obj) || isNull(obj)\r\n ? `${obj}`\r\n : toString.call(obj).replace(typeRgx, '$1').toLowerCase();\r\n\r\nexport const isNumber = (obj: any): obj is number => typeof obj === 'number';\r\n\r\nexport const isString = (obj: any): obj is string => typeof obj === 'string';\r\n\r\nexport const isBoolean = (obj: any): obj is boolean => typeof obj === 'boolean';\r\n\r\nexport const isFunction = (obj: any): obj is (...args: any[]) => any => typeof obj === 'function';\r\n\r\nexport const isArray = (obj: any): obj is Array => Array.isArray(obj);\r\n\r\nexport const isObject = (obj: any): obj is object =>\r\n typeof obj === 'object' && !isArray(obj) && !isNull(obj);\r\n\r\n/**\r\n * Returns true if the given object is array like, false otherwise.\r\n * @param obj The Object\r\n */\r\nexport const isArrayLike = (obj: any): obj is ArrayLike => {\r\n const length = !!obj && obj.length;\r\n const lengthCorrectFormat = isNumber(length) && length > -1 && length % 1 == 0; // eslint-disable-line eqeqeq\r\n\r\n return isArray(obj) || (!isFunction(obj) && lengthCorrectFormat)\r\n ? length > 0 && isObject(obj)\r\n ? length - 1 in obj\r\n : true\r\n : false;\r\n};\r\n\r\n/**\r\n * Returns true if the given object is a \"plain\" (e.g. { key: value }) object, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport const isPlainObject = (obj: any): obj is PlainObject => {\r\n if (!obj || !isObject(obj) || type(obj) !== 'object') return false;\r\n\r\n let key;\r\n const cstr = 'constructor';\r\n const ctor = obj[cstr];\r\n const ctorProto = ctor && ctor.prototype;\r\n const hasOwnConstructor = hasOwnProperty.call(obj, cstr);\r\n const hasIsPrototypeOf = ctorProto && hasOwnProperty.call(ctorProto, 'isPrototypeOf');\r\n\r\n if (ctor && !hasOwnConstructor && !hasIsPrototypeOf) {\r\n return false;\r\n }\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (key in obj) {\r\n /**/\r\n }\r\n /* eslint-enable */\r\n\r\n return isUndefined(key) || hasOwnProperty.call(obj, key);\r\n};\r\n\r\n/**\r\n * Checks whether the given object is a HTMLElement.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isHTMLElement = (obj: any): obj is HTMLElement => {\r\n const instanceofObj = HTMLElement;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n\r\n/**\r\n * Checks whether the given object is a Element.\r\n * @param obj The object which shall be checked.\r\n */\r\nexport const isElement = (obj: any): obj is Element => {\r\n const instanceofObj = Element;\r\n return obj\r\n ? instanceofObj\r\n ? obj instanceof instanceofObj\r\n : obj.nodeType === ElementNodeType\r\n : false;\r\n};\r\n","import type { PlainObject } from '~/typings';\r\nimport { isArray, isArrayLike, isString } from './types';\r\n\r\ntype RunEachItem = ((...args: any) => any | any[]) | false | null | undefined;\r\n\r\nexport function each | ReadonlyArray>(\r\n array: T,\r\n callback: (\r\n value: T extends Array | ReadonlyArray ? V : never,\r\n index: number,\r\n source: T\r\n ) => boolean | unknown\r\n): T;\r\nexport function each>(\r\n arrayLikeObject: T,\r\n callback: (\r\n value: T extends ArrayLike ? V : never,\r\n index: number,\r\n source: T\r\n ) => boolean | unknown\r\n): T;\r\nexport function each(\r\n obj: T,\r\n callback: (value: any, key: string, source: T) => boolean | unknown\r\n): T;\r\nexport function each(\r\n source: Array | ArrayLike | ReadonlyArray | PlainObject,\r\n callback: (value: any, indexOrKey: any, source: any) => boolean | unknown\r\n): Array | ArrayLike | ReadonlyArray | Set | PlainObject {\r\n if (isArrayLike(source)) {\r\n for (let i = 0; i < source.length; i++) {\r\n if (callback(source[i], i, source) === false) {\r\n break;\r\n }\r\n }\r\n } else if (source) {\r\n // cant use support func keys here due to circular dep\r\n each(Object.keys(source), (key) => callback(source[key], key, source));\r\n }\r\n return source;\r\n}\r\n\r\n/**\r\n * Returns true when the passed item is in the passed array and false otherwise.\r\n * @param arr The array.\r\n * @param item The item.\r\n * @returns Whether the item is in the array.\r\n */\r\nexport const inArray = (arr: T[], item: T): boolean => arr.indexOf(item) >= 0;\r\n\r\n/**\r\n * Concats two arrays and returns an new array without modifying any of the passed arrays.\r\n * @param a Array A.\r\n * @param b Array B.\r\n * @returns A new array which has the entries of both arrays.\r\n */\r\nexport const concat = (a: T[] | ReadonlyArray, b: T[] | ReadonlyArray): T[] => a.concat(b);\r\n\r\n/**\r\n * Pushesh all given items into the given array and returns it.\r\n * @param array The array the items shall be pushed into.\r\n * @param items The items which shall be pushed into the array.\r\n */\r\nexport const push = (array: T[], items: T | ArrayLike, arrayIsSingleItem?: boolean): T[] => {\r\n !arrayIsSingleItem && !isString(items) && isArrayLike(items)\r\n ? Array.prototype.push.apply(array, items as T[])\r\n : array.push(items as T);\r\n return array;\r\n};\r\n\r\n/**\r\n * Creates a shallow-copied Array instance from an array-like or iterable object.\r\n * @param arr The object from which the array instance shall be created.\r\n */\r\nexport const from = (arr?: ArrayLike | Set) => Array.from(arr || []);\r\n\r\n/**\r\n * Creates an array if the passed value is not an array, or returns the value if it is.\r\n * @param value The value.\r\n * @returns An array which represents the passed value(s).\r\n */\r\nexport const createOrKeepArray = (value: T | T[]): T[] => (isArray(value) ? value : [value]);\r\n\r\n/**\r\n * Check whether the passed array is empty.\r\n * @param array The array which shall be checked.\r\n */\r\nexport const isEmptyArray = (array: any[] | null | undefined): boolean => !!array && !array.length;\r\n\r\n/**\r\n * Deduplicates all items of the array.\r\n * @param array The array to be deduplicated.\r\n * @returns The deduplicated array.\r\n */\r\nexport const deduplicateArray = (array: T): T => from(new Set(array)) as T;\r\n\r\n/**\r\n * Calls all functions in the passed array/set of functions.\r\n * @param arr The array filled with function which shall be called.\r\n * @param args The args with which each function is called.\r\n * @param keep True when the Set / array should not be cleared afterwards, false otherwise.\r\n */\r\nexport const runEachAndClear = (arr: RunEachItem[], args?: any[], keep?: boolean): void => {\r\n // eslint-disable-next-line prefer-spread\r\n const runFn = (fn: RunEachItem) => fn && fn.apply(undefined, args || []);\r\n each(arr, runFn);\r\n !keep && ((arr as any[]).length = 0);\r\n};\r\n","export const strPaddingTop = 'paddingTop';\r\nexport const strPaddingRight = 'paddingRight';\r\nexport const strPaddingLeft = 'paddingLeft';\r\nexport const strPaddingBottom = 'paddingBottom';\r\nexport const strMarginLeft = 'marginLeft';\r\nexport const strMarginRight = 'marginRight';\r\nexport const strMarginBottom = 'marginBottom';\r\nexport const strOverflowX = 'overflowX';\r\nexport const strOverflowY = 'overflowY';\r\nexport const strWidth = 'width';\r\nexport const strHeight = 'height';\r\nexport const strHidden = 'hidden';\r\nexport const strVisible = 'visible';\r\n","import type { WH } from '../dom/dimensions';\r\nimport type { XY } from '../dom/offset';\r\nimport type { TRBL } from '../dom/style';\r\nimport type { PlainObject } from '~/typings';\r\nimport { each } from './array';\r\nimport { mathRound } from './alias';\r\nimport { strHeight, strWidth } from './strings';\r\n\r\n/**\r\n * Compares two objects and returns true if all values of the passed prop names are identical, false otherwise or if one of the two object is falsy.\r\n * @param a Object a.\r\n * @param b Object b.\r\n * @param props The props which shall be compared.\r\n */\r\nexport const equal = (\r\n a: T | undefined,\r\n b: T | undefined,\r\n props: Array,\r\n propMutation?: ((value: any) => any) | null | false\r\n): boolean => {\r\n if (a && b) {\r\n let result = true;\r\n each(props, (prop) => {\r\n const compareA = propMutation ? propMutation(a[prop]) : a[prop];\r\n const compareB = propMutation ? propMutation(b[prop]) : b[prop];\r\n if (compareA !== compareB) {\r\n result = false;\r\n }\r\n });\r\n return result;\r\n }\r\n return false;\r\n};\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalWH = (a?: WH, b?: WH) => equal>(a, b, ['w', 'h']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalXY = (a?: XY, b?: XY) => equal>(a, b, ['x', 'y']);\r\n\r\n/**\r\n * Compares object a with object b and returns true if both have the same property values, false otherwise.\r\n * Also returns false if one of the objects is undefined or null.\r\n * @param a Object a.\r\n * @param b Object b.\r\n */\r\nexport const equalTRBL = (a?: TRBL, b?: TRBL) => equal(a, b, ['t', 'r', 'b', 'l']);\r\n\r\n/**\r\n * Compares two DOM Rects for their equality of their width and height properties\r\n * Also returns false if one of the DOM Rects is undefined or null.\r\n * @param a DOM Rect a.\r\n * @param b DOM Rect b.\r\n * @param round Whether the values should be rounded.\r\n */\r\nexport const equalBCRWH = (a?: DOMRect, b?: DOMRect, round?: boolean) =>\r\n equal(a, b, [strWidth, strHeight], round && ((value) => mathRound(value)));\r\n","export const noop = () => {}; // eslint-disable-line\r\n","import { isNumber, isFunction } from './types';\r\nimport { from } from './array';\r\nimport { rAF, cAF, setT, clearT } from './alias';\r\nimport { noop } from './noop';\r\n\r\ntype DebounceTiming = number | false | null | undefined;\r\n\r\nexport interface DebounceOptions any> {\r\n /**\r\n * The timeout for debouncing. If null, no debounce is applied.\r\n */\r\n _timeout?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * A maximum amount of ms. before the function will be called even with debounce.\r\n */\r\n _maxDelay?: DebounceTiming | (() => DebounceTiming);\r\n /**\r\n * Function which merges parameters for each canceled debounce.\r\n * If parameters can't be merged the function will return null, otherwise it returns the merged parameters.\r\n */\r\n _mergeParams?: (\r\n prev: Parameters,\r\n curr: Parameters\r\n ) => Parameters | false | null | undefined;\r\n}\r\n\r\nexport interface Debounced any> {\r\n (...args: Parameters): ReturnType;\r\n _flush(): void;\r\n}\r\n\r\nexport const bind = (\r\n fn: (...args: [...A, ...B]) => R,\r\n ...args: A\r\n): ((...args: B) => R) => fn.bind(0, ...args);\r\n\r\n/**\r\n * Creates a timeout and cleartimeout tuple. The timeout function always clears the previously created timeout before it runs.\r\n * @param timeout The timeout in ms. If no timeout (or 0) is passed requestAnimationFrame is used instead of setTimeout.\r\n * @returns A tuple with the timeout function as the first value and the clearTimeout function as the second value.\r\n */\r\nexport const selfClearTimeout = (timeout?: number | (() => number)) => {\r\n let id: number;\r\n const setTFn = timeout ? setT : rAF!;\r\n const clearTFn = timeout ? clearT : cAF!;\r\n return [\r\n (callback: () => any) => {\r\n clearTFn(id);\r\n // @ts-ignore\r\n id = setTFn(callback, isFunction(timeout) ? timeout() : timeout);\r\n },\r\n () => clearTFn(id),\r\n ] as [timeout: (callback: () => any) => void, clear: () => void];\r\n};\r\n\r\n/**\r\n * Debounces the given function either with a timeout or a animation frame.\r\n * @param functionToDebounce The function which shall be debounced.\r\n * @param options Options for debouncing.\r\n */\r\nexport const debounce = any>(\r\n functionToDebounce: FunctionToDebounce,\r\n options?: DebounceOptions\r\n): Debounced => {\r\n let maxTimeoutId: number | undefined;\r\n let prevArguments: Parameters | null | undefined;\r\n let latestArguments: Parameters | null | undefined;\r\n let clear = noop;\r\n const { _timeout, _maxDelay, _mergeParams } = options || {};\r\n\r\n const invokeFunctionToDebounce = function (args: IArguments) {\r\n clear();\r\n clearT(maxTimeoutId);\r\n maxTimeoutId = prevArguments = undefined;\r\n clear = noop;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n functionToDebounce.apply(this, args);\r\n };\r\n\r\n const mergeParms = (\r\n curr: Parameters\r\n ): Parameters | false | null | undefined =>\r\n _mergeParams && prevArguments ? _mergeParams(prevArguments, curr) : curr;\r\n\r\n const flush = () => {\r\n /* istanbul ignore next */\r\n if (clear !== noop) {\r\n invokeFunctionToDebounce(mergeParms(latestArguments!) || latestArguments!);\r\n }\r\n };\r\n\r\n const debouncedFn = function () {\r\n // eslint-disable-next-line prefer-rest-params\r\n const args: Parameters = from(arguments) as Parameters;\r\n const finalTimeout = isFunction(_timeout) ? _timeout() : _timeout;\r\n const hasTimeout = isNumber(finalTimeout) && finalTimeout >= 0;\r\n\r\n if (hasTimeout) {\r\n const finalMaxWait = isFunction(_maxDelay) ? _maxDelay() : _maxDelay;\r\n const hasMaxWait = isNumber(finalMaxWait) && finalMaxWait >= 0;\r\n const setTimeoutFn = finalTimeout > 0 ? setT : rAF!;\r\n const clearTimeoutFn = finalTimeout > 0 ? clearT : cAF!;\r\n const mergeParamsResult = mergeParms(args);\r\n const invokedArgs = mergeParamsResult || args;\r\n const boundInvoke = invokeFunctionToDebounce.bind(0, invokedArgs);\r\n\r\n // if (!mergeParamsResult) {\r\n // invokeFunctionToDebounce(prevArguments || args);\r\n // }\r\n\r\n clear();\r\n // @ts-ignore\r\n const timeoutId = setTimeoutFn(boundInvoke, finalTimeout);\r\n clear = () => clearTimeoutFn(timeoutId);\r\n\r\n if (hasMaxWait && !maxTimeoutId) {\r\n maxTimeoutId = setT(flush, finalMaxWait as number);\r\n }\r\n\r\n prevArguments = latestArguments = invokedArgs;\r\n } else {\r\n invokeFunctionToDebounce(args);\r\n }\r\n };\r\n debouncedFn._flush = flush;\r\n\r\n return debouncedFn as Debounced;\r\n};\r\n","import type { PlainObject } from '~/typings';\r\nimport { isArray, isFunction, isPlainObject, isNull } from './types';\r\nimport { each } from './array';\r\n\r\n/**\r\n * Determines whether the passed object has a property with the passed name.\r\n * @param obj The object.\r\n * @param prop The name of the property.\r\n */\r\nexport const hasOwnProperty = (obj: any, prop: string | number | symbol): boolean =>\r\n Object.prototype.hasOwnProperty.call(obj, prop);\r\n\r\n/**\r\n * Returns the names of the enumerable string properties and methods of an object.\r\n * @param obj The object of which the properties shall be returned.\r\n */\r\nexport const keys = (obj: any): Array => (obj ? Object.keys(obj) : []);\r\n\r\ntype AssignDeep = {\r\n (target: T, object1: U): T & U;\r\n (target: T, object1: U, object2: V): T & U & V;\r\n (target: T, object1: U, object2: V, object3: W): T & U & V & W;\r\n (target: T, object1: U, object2: V, object3: W, object4: X): T & U & V & W & X;\r\n (target: T, object1: U, object2: V, object3: W, object4: X, object5: Y): T &\r\n U &\r\n V &\r\n W &\r\n X &\r\n Y;\r\n (\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n ): T & U & V & W & X & Y & Z;\r\n};\r\n\r\n// https://github.com/jquery/jquery/blob/master/src/core.js#L116\r\nexport const assignDeep: AssignDeep = (\r\n target: T,\r\n object1?: U,\r\n object2?: V,\r\n object3?: W,\r\n object4?: X,\r\n object5?: Y,\r\n object6?: Z\r\n): T & U & V & W & X & Y & Z => {\r\n const sources: Array = [object1, object2, object3, object4, object5, object6];\r\n\r\n // Handle case when target is a string or something (possible in deep copy)\r\n if ((typeof target !== 'object' || isNull(target)) && !isFunction(target)) {\r\n target = {} as T;\r\n }\r\n\r\n each(sources, (source) => {\r\n // Extend the base object\r\n each(source, (_, key) => {\r\n const copy: any = source[key];\r\n\r\n // Prevent Object.prototype pollution\r\n // Prevent never-ending loop\r\n if (target === copy) {\r\n return true;\r\n }\r\n\r\n const copyIsArray = isArray(copy);\r\n\r\n // Recurse if we're merging plain objects or arrays\r\n if (copy && isPlainObject(copy)) {\r\n const src = target[key as keyof T];\r\n let clone: any = src;\r\n\r\n // Ensure proper type for the source value\r\n if (copyIsArray && !isArray(src)) {\r\n clone = [];\r\n } else if (!copyIsArray && !isPlainObject(src)) {\r\n clone = {};\r\n }\r\n\r\n // Never move original objects, clone them\r\n target[key as keyof T] = assignDeep(clone, copy) as any;\r\n } else {\r\n target[key as keyof T] = copyIsArray ? copy.slice() : copy;\r\n }\r\n });\r\n });\r\n\r\n // Return the modified object\r\n return target as any;\r\n};\r\n\r\nexport const removeUndefinedProperties = (target: T, deep?: boolean): T =>\r\n each(assignDeep({}, target), (value, key, copy) => {\r\n if (value === undefined) {\r\n delete copy[key];\r\n } else if (deep && value && isPlainObject(value)) {\r\n copy[key as keyof typeof copy] = removeUndefinedProperties(value, deep) as any;\r\n }\r\n });\r\n\r\n/**\r\n * Returns true if the given object is empty, false otherwise.\r\n * @param obj The Object.\r\n */\r\nexport const isEmptyObject = (obj: any): boolean => {\r\n // eslint-disable-next-line no-restricted-syntax, no-unreachable-loop, guard-for-in\r\n for (const name in obj) return false;\r\n return true;\r\n /* eslint-enable */\r\n};\r\n","import { mathMax, mathMin } from './alias';\r\n\r\n/**\r\n * Caps the passed number between the `min` and `max` bounds.\r\n * @param min The min bound.\r\n * @param max The max bound.\r\n * @param number The number to be capped.\r\n * @returns The capped number between min and max.\r\n */\r\nexport const capNumber = (min: number, max: number, number: number) =>\r\n mathMax(min, mathMin(max, number));\r\n","import type { HTMLElementTarget } from './types';\r\nimport { bind, each, from, isArray } from '../utils';\r\n\r\nexport type AttributeElementTarget = HTMLElementTarget | Element;\r\n\r\nexport type DomTokens = string | string[] | false | null | undefined | void;\r\n\r\nexport const getDomTokensArray = (tokens: DomTokens) =>\r\n from(new Set((isArray(tokens) ? tokens : (tokens || '').split(' ')).filter((token) => token)));\r\n\r\n/**\r\n * Gets a attribute with the given attribute of the given element.\r\n * @param elm The element of which the attribute shall be get.\r\n * @param attrName The attribute name which shall be get.\r\n * @returns The attribute value or `null` when the attribute is not set or `false` if the element is undefined.\r\n */\r\nexport const getAttr = (elm: AttributeElementTarget, attrName: string) =>\r\n elm && elm.getAttribute(attrName);\r\n\r\n/**\r\n * Returns whether the given attribute exists on the given element.\r\n * @param elm The element.\r\n * @param attrName The attribute.\r\n * @returns A Truthy value indicates a present attrubte.\r\n */\r\nexport const hasAttr = (elm: AttributeElementTarget, attrName: string) =>\r\n elm && elm.hasAttribute(attrName);\r\n\r\n/**\r\n * Sets the given attributes to the given element.\r\n * @param elm The element of which the attributes shall be removed.\r\n * @param attrName The attribute names separated by a space.\r\n */\r\nexport const setAttrs = (\r\n elm: AttributeElementTarget,\r\n attrNames: string | string[],\r\n value: string | false | null | undefined\r\n) => {\r\n each(getDomTokensArray(attrNames), (attrName) => {\r\n elm && elm.setAttribute(attrName, value || '');\r\n });\r\n};\r\n\r\n/**\r\n * Removes the given attributes from the given element.\r\n * @param elm The element of which the attribute shall be removed.\r\n * @param attrName The attribute names separated by a space.\r\n */\r\nexport const removeAttrs = (elm: AttributeElementTarget, attrNames: string | string[]): void => {\r\n each(getDomTokensArray(attrNames), (attrName) => elm && elm.removeAttribute(attrName));\r\n};\r\n\r\nexport const domTokenListAttr = (elm: AttributeElementTarget, attrName: string) => {\r\n const initialArr = getDomTokensArray(getAttr(elm, attrName));\r\n const setElmAttr = bind(setAttrs, elm, attrName);\r\n const domTokenListOperation = (operationTokens: DomTokens, operation: 'add' | 'delete') => {\r\n const initialArrSet = new Set(initialArr);\r\n each(getDomTokensArray(operationTokens), (token) => initialArrSet[operation](token));\r\n return from(initialArrSet).join(' ');\r\n };\r\n\r\n return {\r\n _remove: (removeTokens: DomTokens) => setElmAttr(domTokenListOperation(removeTokens, 'delete')),\r\n _add: (addTokens: DomTokens) => setElmAttr(domTokenListOperation(addTokens, 'add')),\r\n _has: (hasTokens: DomTokens) => {\r\n const tokenSet = getDomTokensArray(hasTokens);\r\n return tokenSet.reduce(\r\n (boolean, token) => boolean && initialArr.includes(token),\r\n tokenSet.length > 0\r\n );\r\n },\r\n };\r\n};\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and removes the given value from it.\r\n * @param elm The element.\r\n * @param attrName The attributeName to which the value shall be removed.\r\n * @param value The value which shall be removed.\r\n */\r\nexport const removeAttrClass = (\r\n elm: AttributeElementTarget,\r\n attrName: string,\r\n value: DomTokens\r\n) => {\r\n domTokenListAttr(elm, attrName)._remove(value);\r\n};\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and adds value to it.\r\n * @param elm The element.\r\n * @param attrName The attributeName to which the value shall be added.\r\n * @param value The value which shall be added.\r\n */\r\nexport const addAttrClass = (elm: AttributeElementTarget, attrName: string, value: DomTokens) => {\r\n domTokenListAttr(elm, attrName)._add(value);\r\n return bind(removeAttrClass, elm, attrName, value);\r\n};\r\n\r\nexport const addRemoveAttrClass = (\r\n elm: AttributeElementTarget,\r\n attrName: string,\r\n value: DomTokens,\r\n add?: boolean\r\n) => {\r\n (add ? addAttrClass : removeAttrClass)(elm, attrName, value);\r\n};\r\n\r\n/**\r\n * Treats the given attribute like the \"class\" attribute and checks if the given value is in it.\r\n * @param elm The element.\r\n * @param attrName The attributeName from which the content shall be checked.\r\n * @param value The value.\r\n * @returns True if the given attribute has the value in it, false otherwise.\r\n */\r\nexport const hasAttrClass = (\r\n elm: AttributeElementTarget,\r\n attrName: string,\r\n value: DomTokens\r\n): boolean => domTokenListAttr(elm, attrName)._has(value);\r\n","import type { HTMLElementTarget } from './types';\r\nimport type { DomTokens } from './attribute';\r\nimport { each, from } from '../utils/array';\r\nimport { bind } from '../utils/function';\r\nimport { domTokenListAttr } from './attribute';\r\n\r\nconst createDomTokenListClass = (elm: HTMLElementTarget) => domTokenListAttr(elm, 'class');\r\n\r\n/**\r\n * Check whether the given element has the given class name(s).\r\n * @param elm The element.\r\n * @param className The class name(s).\r\n */\r\nexport const hasClass = (elm: HTMLElementTarget, className: DomTokens): boolean =>\r\n createDomTokenListClass(elm)._has(className);\r\n\r\n/**\r\n * Removes the given class name(s) from the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be removed. (separated by spaces)\r\n */\r\nexport const removeClass = (elm: HTMLElementTarget, className: DomTokens): void => {\r\n createDomTokenListClass(elm)._remove(className);\r\n};\r\n\r\n/**\r\n * Adds the given class name(s) to the given element.\r\n * @param elm The element.\r\n * @param className The class name(s) which shall be added. (separated by spaces)\r\n * @returns A function which removes the added class name(s).\r\n */\r\nexport const addClass = (elm: HTMLElementTarget, className: DomTokens): (() => void) => {\r\n createDomTokenListClass(elm)._add(className);\r\n return bind(removeClass, elm, className);\r\n};\r\n\r\n/**\r\n * Takes two className strings, compares them and returns the difference as array.\r\n * @param classNameA ClassName A.\r\n * @param classNameB ClassName B.\r\n */\r\nexport const diffClass = (classNameA: string, classNameB: string) => {\r\n const set = new Set(classNameA ? classNameA.split(' ') : []);\r\n\r\n each(classNameB ? classNameB.split(' ') : [], (className) => {\r\n set.has(className) ? set.delete(className) : set.add(className);\r\n });\r\n\r\n return from(set);\r\n};\r\n","import { isElement } from '../utils/types';\r\nimport { push, from } from '../utils/array';\r\n\r\ntype InputElementType = Node | Element | false | null | undefined;\r\ntype OutputElementType = Node | Element | false | null | undefined;\r\n\r\n/**\r\n * Find all elements with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst find = (selector: string, elm?: InputElementType): Element[] => {\r\n const arr: Array = [];\r\n const rootElm = elm ? isElement(elm) && elm : document;\r\n\r\n return rootElm ? push(arr, rootElm.querySelectorAll(selector)) : arr;\r\n};\r\n\r\n/**\r\n * Find the first element with the passed selector, outgoing (and including) the passed element or the document if no element was provided.\r\n * @param selector The selector which has to be searched by.\r\n * @param elm The element from which the search shall be outgoing.\r\n */\r\nconst findFirst = (selector: string, elm?: InputElementType): OutputElementType => {\r\n const rootElm = elm ? isElement(elm) && elm : document;\r\n\r\n return rootElm ? rootElm.querySelector(selector) : null;\r\n};\r\n\r\n/**\r\n * Determines whether the passed element is matching with the passed selector.\r\n * @param elm The element which has to be compared with the passed selector.\r\n * @param selector The selector which has to be compared with the passed element. Additional selectors: ':visible' and ':hidden'.\r\n */\r\nconst is = (elm: InputElementType, selector: string): boolean => {\r\n if (isElement(elm)) {\r\n return elm.matches(selector);\r\n }\r\n return false;\r\n};\r\n\r\nconst isBodyElement = (elm: InputElementType) => is(elm, 'body'); // don't do targetElement === ownerDocument.body in case initialization happens in memory\r\n\r\n/**\r\n * Returns the children (no text-nodes or comments) of the passed element which are matching the passed selector. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the children shall be returned.\r\n * @param selector The selector which must match with the children elements.\r\n */\r\nconst children = (elm: InputElementType, selector?: string): ReadonlyArray => {\r\n const childs: Array = [];\r\n\r\n return isElement(elm)\r\n ? push(\r\n childs,\r\n from(elm.children).filter((child) => (selector ? is(child, selector) : child))\r\n )\r\n : childs;\r\n};\r\n\r\n/**\r\n * Returns the childNodes (incl. text-nodes or comments etc.) of the passed element. An empty array is returned if the passed element is null.\r\n * @param elm The element of which the childNodes shall be returned.\r\n */\r\nconst contents = (elm: InputElementType): ReadonlyArray =>\r\n elm ? from(elm.childNodes) : [];\r\n\r\n/**\r\n * Returns the parent element of the passed element, or null if the passed element is null.\r\n * @param elm The element of which the parent element shall be returned.\r\n */\r\nconst parent = (elm: InputElementType): OutputElementType => elm && elm.parentElement;\r\n\r\n/**\r\n * Returns the closest element to the passed element which matches the given selector.\r\n * @param elm The element.\r\n * @param selector The selector.\r\n * @returns The closest element to the passed element which matches the given selector.\r\n */\r\nconst closest = (elm: InputElementType, selector: string): OutputElementType =>\r\n isElement(elm) && elm.closest(selector);\r\n\r\n/**\r\n * Gets the focused element of the passed or default document.\r\n * @returns The focused element of the passed document.\r\n */\r\nconst getFocusedElement = (doc?: Document) => (doc || document).activeElement;\r\n\r\n/**\r\n * Determines whether the given element lies between two selectors in the DOM.\r\n * @param elm The element.\r\n * @param highBoundarySelector The high boundary selector.\r\n * @param deepBoundarySelector The deep boundary selector.\r\n */\r\nconst liesBetween = (\r\n elm: InputElementType,\r\n highBoundarySelector: string,\r\n deepBoundarySelector: string\r\n): boolean => {\r\n const closestHighBoundaryElm = closest(elm, highBoundarySelector);\r\n const closestDeepBoundaryElm = elm && findFirst(deepBoundarySelector, closestHighBoundaryElm);\r\n const deepBoundaryIsValid =\r\n closest(closestDeepBoundaryElm, highBoundarySelector) === closestHighBoundaryElm;\r\n\r\n return closestHighBoundaryElm && closestDeepBoundaryElm\r\n ? closestHighBoundaryElm === elm ||\r\n closestDeepBoundaryElm === elm ||\r\n (deepBoundaryIsValid &&\r\n closest(closest(elm, deepBoundarySelector), highBoundarySelector) !==\r\n closestHighBoundaryElm)\r\n : false;\r\n};\r\n\r\nexport {\r\n find,\r\n findFirst,\r\n is,\r\n isBodyElement,\r\n children,\r\n contents,\r\n parent,\r\n liesBetween,\r\n closest,\r\n getFocusedElement,\r\n};\r\n","import { isArrayLike } from '../utils/types';\r\nimport { each, from } from '../utils/array';\r\nimport { noop } from '../utils/noop';\r\nimport { parent } from './traversal';\r\n\r\ntype ManipulationTarget = Node | false | null | undefined;\r\ntype NodeCollection = ArrayLike | ManipulationTarget;\r\n\r\n/**\r\n * Removes the given Nodes from their parent.\r\n * @param nodes The Nodes which shall be removed.\r\n */\r\nexport const removeElements = (nodes: NodeCollection): void => {\r\n if (isArrayLike(nodes)) {\r\n each(from(nodes), (e) => removeElements(e));\r\n } else if (nodes) {\r\n const parentElm = parent(nodes);\r\n parentElm && parentElm.removeChild(nodes);\r\n }\r\n};\r\n\r\n/**\r\n * Inserts Nodes before the given preferredAnchor element.\r\n * @param parentElm The parent of the preferredAnchor element or the element which shall be the parent of the inserted Nodes.\r\n * @param preferredAnchor The element before which the Nodes shall be inserted or null if the elements shall be appended at the end.\r\n * @param insertedElms The Nodes which shall be inserted.\r\n * @returns A function which removes the inserted nodes.\r\n */\r\nconst before = (\r\n parentElm: ManipulationTarget,\r\n preferredAnchor: ManipulationTarget,\r\n insertedElms: NodeCollection\r\n): (() => void) => {\r\n if (insertedElms && parentElm) {\r\n let anchor: ManipulationTarget = preferredAnchor;\r\n let fragment: DocumentFragment | Node | null | undefined;\r\n\r\n if (isArrayLike(insertedElms)) {\r\n fragment = document.createDocumentFragment();\r\n\r\n // append all insertedElms to the fragment and if one of these is the anchor, change the anchor\r\n each(insertedElms, (insertedElm) => {\r\n if (insertedElm === anchor) {\r\n anchor = insertedElm.previousSibling;\r\n }\r\n fragment!.appendChild(insertedElm);\r\n });\r\n } else {\r\n fragment = insertedElms;\r\n }\r\n\r\n // if the preferred anchor isn't null set it to a valid anchor\r\n if (preferredAnchor) {\r\n if (!anchor) {\r\n anchor = parentElm.firstChild;\r\n } else if (anchor !== preferredAnchor) {\r\n anchor = anchor.nextSibling;\r\n }\r\n }\r\n\r\n parentElm.insertBefore(fragment, anchor || null);\r\n return () => removeElements(insertedElms);\r\n }\r\n return noop;\r\n};\r\n\r\n/**\r\n * Appends the given children at the end of the given Node.\r\n * @param node The Node to which the children shall be appended.\r\n * @param children The Nodes which shall be appended.\r\n * @returns A function which removes the inserted nodes.\r\n */\r\nexport const appendChildren = (node: ManipulationTarget, children: NodeCollection) =>\r\n before(node, null, children);\r\n\r\n/**\r\n * Prepends the given children at the start of the given Node.\r\n * @param node The Node to which the children shall be prepended.\r\n * @param children The Nodes which shall be prepended.\r\n * @returns A function which removes the inserted nodes.\r\n */\r\nexport const prependChildren = (node: ManipulationTarget, children: NodeCollection) =>\r\n before(node, node && node.firstChild, children);\r\n\r\n/**\r\n * Inserts the given Nodes before the given Node.\r\n * @param node The Node before which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n * @returns A function which removes the inserted nodes.\r\n */\r\nexport const insertBefore = (node: ManipulationTarget, insertedNodes: NodeCollection) =>\r\n before(parent(node), node, insertedNodes);\r\n\r\n/**\r\n * Inserts the given Nodes after the given Node.\r\n * @param node The Node after which the given Nodes shall be inserted.\r\n * @param insertedNodes The Nodes which shall be inserted.\r\n * @returns A function which removes the inserted nodes.\r\n */\r\nexport const insertAfter = (node: ManipulationTarget, insertedNodes: NodeCollection) =>\r\n before(parent(node), node && node.nextSibling, insertedNodes);\r\n","import { each } from '../utils/array';\r\nimport { setAttrs } from './attribute';\r\nimport { contents } from './traversal';\r\nimport { removeElements } from './manipulation';\r\n\r\n/**\r\n * Creates a div DOM node.\r\n */\r\nexport const createDiv = (classNames?: string): HTMLDivElement => {\r\n const div = document.createElement('div');\r\n setAttrs(div, 'class', classNames);\r\n return div;\r\n};\r\n\r\n/**\r\n * Creates DOM nodes modeled after the passed html string and returns the root dom nodes as a array.\r\n * @param html The html string after which the DOM nodes shall be created.\r\n */\r\nexport const createDOM = (html: string): ReadonlyArray => {\r\n const createdDiv = createDiv();\r\n createdDiv.innerHTML = html.trim();\r\n\r\n return each(contents(createdDiv), (elm) => removeElements(elm));\r\n};\r\n","import type { PlainObject, StyleObject, StyleObjectKey, StyleObjectValue } from '~/typings';\r\nimport type { XY } from './offset';\r\nimport type { HTMLElementTarget } from './types';\r\nimport { wnd } from '../utils/alias';\r\nimport { each } from '../utils/array';\r\nimport { isString, isNumber, isObject } from '../utils/types';\r\n\r\nexport interface TRBL {\r\n t: number;\r\n r: number;\r\n b: number;\r\n l: number;\r\n}\r\n\r\nconst customCssPropRegex = /^--/;\r\n\r\nconst getCSSVal = (computedStyle: CSSStyleDeclaration, prop: StyleObjectKey): string =>\r\n computedStyle.getPropertyValue(prop) || computedStyle[prop as any] || '';\r\n\r\nconst validFiniteNumber = (number: number) => {\r\n const notNaN = number || 0;\r\n return isFinite(notNaN) ? notNaN : 0;\r\n};\r\n\r\nconst parseToZeroOrNumber = (value?: string): number => validFiniteNumber(parseFloat(value || ''));\r\n\r\nexport const ratioToCssPercent = (ratio: number) =>\r\n `${(validFiniteNumber(ratio) * 100).toFixed(3)}%`;\r\n\r\nexport const numberToCssPx = (number: number) => `${validFiniteNumber(number)}px`;\r\n\r\nexport function setStyles(elm: HTMLElementTarget, styles: StyleObject): void {\r\n elm &&\r\n each(styles, (rawValue: StyleObjectValue, name) => {\r\n try {\r\n const elmStyle = elm.style;\r\n const value = isNumber(rawValue) ? numberToCssPx(rawValue) : (rawValue || '') + '';\r\n\r\n if (customCssPropRegex.test(name)) {\r\n elmStyle.setProperty(name, value);\r\n } else {\r\n elmStyle[name as any] = value;\r\n }\r\n } catch {}\r\n });\r\n}\r\n\r\nexport function getStyles(\r\n elm: HTMLElementTarget,\r\n styles: Array,\r\n pseudoElm?: string | null | undefined\r\n): Partial>;\r\nexport function getStyles(\r\n elm: HTMLElementTarget,\r\n styles: StyleObjectKey,\r\n pseudoElm?: string | null | undefined\r\n): string;\r\nexport function getStyles(\r\n elm: HTMLElementTarget,\r\n styles: Array | StyleObjectKey,\r\n pseudoElm?: string | null | undefined\r\n): Partial> | string {\r\n const getSingleStyle = isString(styles);\r\n let getStylesResult: string | PlainObject = getSingleStyle ? '' : {};\r\n\r\n if (elm) {\r\n const computedStyle = wnd.getComputedStyle(elm, pseudoElm) || elm.style;\r\n getStylesResult = getSingleStyle\r\n ? getCSSVal(computedStyle, styles)\r\n : styles.reduce((result, key) => {\r\n result[key] = getCSSVal(computedStyle, key);\r\n return result;\r\n }, getStylesResult as PlainObject);\r\n }\r\n return getStylesResult;\r\n}\r\n\r\nexport const getDirectionIsRTL = (elm: HTMLElementTarget): boolean =>\r\n getStyles(elm, 'direction') === 'rtl';\r\n\r\n/**\r\n * Returns the top right bottom left values of the passed css property.\r\n * @param elm The element of which the values shall be returned.\r\n * @param propertyPrefix The css property prefix. (e.g. \"border\")\r\n * @param propertySuffix The css property suffix. (e.g. \"width\")\r\n */\r\nexport const topRightBottomLeft = (\r\n elm?: HTMLElementTarget,\r\n propertyPrefix?: string,\r\n propertySuffix?: string\r\n): TRBL => {\r\n const finalPrefix = propertyPrefix ? `${propertyPrefix}-` : '';\r\n const finalSuffix = propertySuffix ? `-${propertySuffix}` : '';\r\n const top = `${finalPrefix}top${finalSuffix}` as StyleObjectKey;\r\n const right = `${finalPrefix}right${finalSuffix}` as StyleObjectKey;\r\n const bottom = `${finalPrefix}bottom${finalSuffix}` as StyleObjectKey;\r\n const left = `${finalPrefix}left${finalSuffix}` as StyleObjectKey;\r\n const result = getStyles(elm, [top, right, bottom, left]);\r\n return {\r\n t: parseToZeroOrNumber(result[top]),\r\n r: parseToZeroOrNumber(result[right]),\r\n b: parseToZeroOrNumber(result[bottom]),\r\n l: parseToZeroOrNumber(result[left]),\r\n };\r\n};\r\n\r\nexport const getTrasformTranslateValue = (\r\n value: string | number | XY,\r\n isHorizontal?: boolean\r\n) =>\r\n `translate${\r\n isObject(value) ? `(${value.x},${value.y})` : `${isHorizontal ? 'X' : 'Y'}(${value})`\r\n }`;\r\n","import type { HTMLElementTarget } from './types';\r\nimport { getStyles } from './style';\r\nimport { mathRound, wnd } from '../utils/alias';\r\nimport { bind } from '../utils/function';\r\nimport { strHeight, strWidth } from '../utils/strings';\r\n\r\nexport interface WH {\r\n w: T;\r\n h: T;\r\n}\r\n\r\nconst elementHasDimensions = (elm: HTMLElement): boolean =>\r\n !!(elm.offsetWidth || elm.offsetHeight || elm.getClientRects().length);\r\nconst zeroObj: WH = {\r\n w: 0,\r\n h: 0,\r\n};\r\n\r\nconst getElmWidthHeightProperty = (\r\n property: E extends HTMLElement ? 'client' | 'offset' | 'scroll' : 'inner',\r\n elm: E | false | null | undefined\r\n): Readonly =>\r\n elm\r\n ? {\r\n w: (elm as any)[`${property}Width`],\r\n h: (elm as any)[`${property}Height`],\r\n }\r\n : zeroObj;\r\n\r\n/**\r\n * Returns the window inner- width and height.\r\n */\r\nexport const windowSize = (customWnd?: Window): Readonly =>\r\n getElmWidthHeightProperty('inner', customWnd || wnd);\r\n\r\n/**\r\n * Returns the scroll- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the scroll- width and height shall be returned.\r\n */\r\nexport const offsetSize = bind(getElmWidthHeightProperty, 'offset') satisfies (\r\n elm: HTMLElementTarget\r\n) => Readonly;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const clientSize = bind(getElmWidthHeightProperty, 'client') satisfies (\r\n elm: HTMLElementTarget\r\n) => Readonly;\r\n\r\n/**\r\n * Returns the client- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the client- width and height shall be returned.\r\n */\r\nexport const scrollSize = bind(getElmWidthHeightProperty, 'scroll') satisfies (\r\n elm: HTMLElementTarget\r\n) => Readonly;\r\n\r\n/**\r\n * Returns the fractional- width and height of the passed element. If the element is null the width and height values are 0.\r\n * @param elm The element of which the fractional- width and height shall be returned.\r\n */\r\nexport const fractionalSize = (elm: HTMLElementTarget): Readonly => {\r\n const cssWidth = parseFloat(getStyles(elm, strWidth)) || 0;\r\n const cssHeight = parseFloat(getStyles(elm, strHeight)) || 0;\r\n return {\r\n w: cssWidth - mathRound(cssWidth),\r\n h: cssHeight - mathRound(cssHeight),\r\n };\r\n};\r\n\r\n/**\r\n * Returns the BoundingClientRect of the passed element.\r\n * @param elm The element of which the BoundingClientRect shall be returned.\r\n */\r\nexport const getBoundingClientRect = (elm: HTMLElement): DOMRect => elm.getBoundingClientRect();\r\n\r\n/**\r\n * Determines whether the passed element has any dimensions.\r\n * @param elm The element.\r\n */\r\nexport const hasDimensions = (elm: HTMLElementTarget): boolean =>\r\n !!elm && elementHasDimensions(elm);\r\n\r\n/**\r\n * Determines whether the passed DOM Rect has any dimensions.\r\n */\r\nexport const domRectHasDimensions = (rect?: DOMRectReadOnly | false | null) =>\r\n !!(rect && (rect[strHeight] || rect[strWidth]));\r\n\r\n/**\r\n * Determines whether current DOM Rect has appeared according the the previous dom rect..\r\n * @param currContentRect The current DOM Rect.\r\n * @param prevContentRect The previous DOM Rect.\r\n * @returns Whether the dom rect appeared.\r\n */\r\nexport const domRectAppeared = (\r\n currContentRect: DOMRectReadOnly | false | null | undefined,\r\n prevContentRect: DOMRectReadOnly | false | null | undefined\r\n) => {\r\n const rectHasDimensions = domRectHasDimensions(currContentRect);\r\n const rectHadDimensions = domRectHasDimensions(prevContentRect);\r\n return !rectHadDimensions && rectHasDimensions;\r\n};\r\n","import type { DomTokens } from './attribute';\r\nimport { each, runEachAndClear } from '../utils/array';\r\nimport { bind } from '../utils/function';\r\nimport { keys } from '../utils';\r\nimport { getDomTokensArray } from './attribute';\r\n\r\nexport interface EventListenerOptions {\r\n _capture?: boolean;\r\n _passive?: boolean;\r\n _once?: boolean;\r\n}\r\n\r\nexport type EventListenerMap = {\r\n [eventNames: string]: (event: Event) => any;\r\n};\r\n\r\n/**\r\n * Removes the passed event listener for the passed event names with the passed options.\r\n * @param target The element from which the listener shall be removed.\r\n * @param eventNames The eventsnames for which the listener shall be removed.\r\n * @param listener The listener which shall be removed.\r\n * @param capture The options of the removed listener.\r\n */\r\nexport const removeEventListener = (\r\n target: EventTarget,\r\n eventNames: DomTokens,\r\n listener: (event: T) => any,\r\n capture?: boolean\r\n): void => {\r\n each(getDomTokensArray(eventNames), (eventName) => {\r\n target.removeEventListener(eventName, listener as EventListener, capture);\r\n });\r\n};\r\n\r\n/**\r\n * Adds the passed event listener for the passed event names with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventNames The eventsnames for which the listener shall be called.\r\n * @param listener The listener which is called on the eventnames.\r\n * @param options The options of the added listener.\r\n */\r\nexport const addEventListener = (\r\n target: EventTarget,\r\n eventNames: DomTokens,\r\n listener: (event: T) => any,\r\n options?: EventListenerOptions\r\n): (() => void) => {\r\n const passive = (options && options._passive) ?? true;\r\n const capture = (options && options._capture) || false;\r\n const once = (options && options._once) || false;\r\n const nativeOptions: AddEventListenerOptions = {\r\n passive,\r\n capture,\r\n };\r\n\r\n return bind(\r\n runEachAndClear,\r\n getDomTokensArray(eventNames).map((eventName) => {\r\n const finalListener = (\r\n once\r\n ? (evt: T) => {\r\n removeEventListener(target, eventName, finalListener, capture);\r\n listener(evt);\r\n }\r\n : listener\r\n ) as EventListener;\r\n\r\n target.addEventListener(eventName, finalListener, nativeOptions);\r\n return bind(removeEventListener, target, eventName, finalListener, capture);\r\n })\r\n );\r\n};\r\n\r\n/**\r\n * Adds the passed event listeners for the passed event names with the passed options.\r\n * @param target The element to which the listener shall be added.\r\n * @param eventListenerMap A map which descirbes the event names and event listeners to be added.\r\n * @param options The options of the added listeners.\r\n */\r\nexport const addEventListeners = (\r\n target: EventTarget,\r\n eventListenerMap: EventListenerMap,\r\n options?: EventListenerOptions\r\n): (() => void) =>\r\n bind(\r\n runEachAndClear,\r\n keys(eventListenerMap).map((eventNames) =>\r\n addEventListener(target, eventNames, eventListenerMap[eventNames], options)\r\n )\r\n );\r\n\r\n/**\r\n * Shorthand for the stopPropagation event Method.\r\n * @param evt The event of which the stopPropagation method shall be called.\r\n */\r\nexport const stopPropagation = (evt: Event): void => evt.stopPropagation();\r\n\r\n/**\r\n * Shorthand for the preventDefault event Method.\r\n * @param evt The event of which the preventDefault method shall be called.\r\n */\r\nexport const preventDefault = (evt: Event): void => evt.preventDefault();\r\n\r\n/**\r\n * Shorthand for the stopPropagation and preventDefault event Method.\r\n * @param evt The event of which the stopPropagation and preventDefault methods shall be called.\r\n */\r\nexport const stopAndPrevent = (evt: Event): void =>\r\n (stopPropagation(evt) as undefined) || (preventDefault(evt) as undefined);\r\n","import type { HTMLElementTarget } from './types';\r\nimport { getBoundingClientRect } from './dimensions';\r\nimport { wnd } from '../utils/alias';\r\n\r\nexport interface XY {\r\n x: T;\r\n y: T;\r\n}\r\n\r\nconst zeroObj: XY = {\r\n x: 0,\r\n y: 0,\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element relative to the document. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const absoluteCoordinates = (elm: HTMLElementTarget): Readonly => {\r\n const rect = elm && getBoundingClientRect(elm);\r\n return rect\r\n ? {\r\n x: rect.left + wnd.scrollX,\r\n y: rect.top + wnd.scrollY,\r\n }\r\n : zeroObj;\r\n};\r\n\r\n/**\r\n * Returns the offset- left and top coordinates of the passed element. If the element is null the top and left values are 0.\r\n * @param elm The element of which the offset- top and left coordinates shall be returned.\r\n */\r\nexport const offsetCoordinates = (elm: HTMLElementTarget): Readonly =>\r\n elm\r\n ? {\r\n x: elm.offsetLeft,\r\n y: elm.offsetTop,\r\n }\r\n : zeroObj;\r\n","import type { Env } from '~/environment';\r\nimport type { XY } from './offset';\r\nimport { capNumber, isNumber } from '../utils';\r\n\r\nexport type RTLScrollBehavior = Env['_rtlScrollBehavior'] | false | null | undefined;\r\n\r\n/**\r\n * Transforms a normalized scroll position to a RTL compatilbe scroll position value or vice versa (depending on the input format).\r\n * @param scrollPosition The scroll position value.\r\n * @param overflowAmount The (normalized) overflow amount value.\r\n * @param rtlScrollBehavior The RTL scroll behavior or `falsy` if the rtl scroll behavior doesn't apply.\r\n * @returns The input scroll position, just converted.\r\n * If the input `scrollPosition` is normalized the raw (RTL Compatible) format is returned.\r\n * If the input `scrollPosition` is raw (RTL Compatible) the normalized format is returned.\r\n */\r\nexport const convertScrollPosition = (\r\n scrollPosition: number,\r\n overflowAmount: number,\r\n rtlScrollBehavior?: RTLScrollBehavior\r\n) =>\r\n rtlScrollBehavior\r\n ? rtlScrollBehavior.n\r\n ? -scrollPosition + 0 // +0 avoids negative zero (-0) as a result\r\n : rtlScrollBehavior.i\r\n ? overflowAmount - scrollPosition\r\n : scrollPosition\r\n : scrollPosition;\r\n\r\n/**\r\n * Gets the raw (RTL compatilbe) scroll boundaries from the normalized overflow amount.\r\n * @param overflowAmount The normalzed overflow amount value.\r\n * @param rtlScrollBehavior The RTL scroll behavior or `falsy` if the rtl scroll behavior doesn't apply.\r\n * @returns The raw (RTL compatible) scroll boundaries. (min value will scroll to start (0%) and max will scroll to end (100%))\r\n */\r\nexport const getRawScrollBounds = (\r\n overflowAmount: number,\r\n rtlScrollBehavior?: RTLScrollBehavior\r\n): [min: number, max: number] => [\r\n convertScrollPosition(0, overflowAmount, rtlScrollBehavior),\r\n convertScrollPosition(overflowAmount, overflowAmount, rtlScrollBehavior),\r\n];\r\n\r\n/**\r\n * Gets the scroll ratio of the current raw (RTL compatilbe) scroll position.\r\n * @param rawScrollPosition The raw (RTL compatible) scroll position.\r\n * @param overflowAmount The normalized overflow amount.\r\n * @param rtlScrollBehavior The RTL scroll behavior or `falsy` if the rtl scroll behavior doesn't apply.\r\n * @returns The scroll ratio of the current scroll position 0..1.\r\n */\r\nexport const getRawScrollRatio = (\r\n rawScrollPosition: number,\r\n overflowAmount: number,\r\n rtlScrollBehavior?: RTLScrollBehavior\r\n) =>\r\n capNumber(\r\n 0,\r\n 1,\r\n convertScrollPosition(rawScrollPosition, overflowAmount, rtlScrollBehavior) / overflowAmount ||\r\n 0\r\n );\r\n\r\n/**\r\n * Scroll the passed element to the passed position.\r\n * @param elm The element to be scrolled.\r\n * @param position The scroll position.\r\n */\r\nexport const scrollElementTo = (\r\n elm: HTMLElement,\r\n position: Partial | number | false | null | undefined\r\n): void => {\r\n const { x, y } = isNumber(position) ? { x: position, y: position } : position || {};\r\n isNumber(x) && (elm.scrollLeft = x);\r\n isNumber(y) && (elm.scrollTop = y);\r\n};\r\n\r\n/**\r\n * Scroll the passed element to the passed position.\r\n * @param elm The element to be scrolled.\r\n * @param position The scroll position.\r\n */\r\nexport const getElmentScroll = (elm: HTMLElement): Readonly => ({\r\n x: elm.scrollLeft,\r\n y: elm.scrollTop,\r\n});\r\n","import { isBoolean, isFunction, isString } from './utils/types';\r\nimport { keys } from './utils/object';\r\nimport { each, push, from, isEmptyArray, runEachAndClear, createOrKeepArray } from './utils/array';\r\nimport { bind } from './utils/function';\r\n\r\nexport type EventListener, N extends keyof EventArgs> = (\r\n ...args: EventArgs[N]\r\n) => void;\r\n\r\nexport type EventListeners> = {\r\n [K in keyof EventArgs]?: EventListener | EventListener[] | null;\r\n};\r\n\r\nexport type RemoveEvent> = {\r\n (name?: N, listener?: EventListener): void;\r\n (name?: N, listener?: EventListener[]): void;\r\n (\r\n name?: N,\r\n listener?: EventListener | EventListener[]\r\n ): void;\r\n};\r\n\r\nexport type AddEvent> = {\r\n (eventListeners: EventListeners, pure?: boolean): () => void;\r\n (name: N, listener: EventListener): () => void;\r\n (name: N, listener: EventListener[]): () => void;\r\n (\r\n nameOrEventListeners: N | EventListeners,\r\n listener?: EventListener | EventListener[] | boolean\r\n ): () => void;\r\n};\r\n\r\nexport type TriggerEvent> = {\r\n (name: N, args: EventArgs[N]): void;\r\n};\r\n\r\nexport type EventListenerHub> = [\r\n AddEvent,\r\n RemoveEvent,\r\n TriggerEvent\r\n];\r\n\r\nconst manageListener = , N extends keyof EventArgs>(\r\n callback: (listener?: EventListener) => void,\r\n listener?: EventListener | EventListener[]\r\n) => {\r\n each(createOrKeepArray(listener), callback);\r\n};\r\n\r\nexport const createEventListenerHub = >(\r\n initialEventListeners?: EventListeners\r\n): EventListenerHub => {\r\n const events = new Map>>();\r\n\r\n const removeEvent: RemoveEvent = (name, listener) => {\r\n if (name) {\r\n const eventSet = events.get(name);\r\n manageListener((currListener) => {\r\n if (eventSet) {\r\n eventSet[currListener ? 'delete' : 'clear'](currListener! as any);\r\n }\r\n }, listener);\r\n } else {\r\n events.forEach((eventSet) => {\r\n eventSet.clear();\r\n });\r\n events.clear();\r\n }\r\n };\r\n\r\n const addEvent: AddEvent = (\r\n nameOrEventListeners: keyof EventArgs | EventListeners,\r\n listenerOrPure?:\r\n | EventListener\r\n | EventListener[]\r\n | boolean\r\n ) => {\r\n if (isString(nameOrEventListeners)) {\r\n const eventSet = events.get(nameOrEventListeners) || new Set();\r\n events.set(nameOrEventListeners, eventSet);\r\n\r\n manageListener((currListener) => {\r\n isFunction(currListener) && eventSet.add(currListener);\r\n }, listenerOrPure as Exclude);\r\n\r\n return bind(\r\n removeEvent,\r\n nameOrEventListeners,\r\n listenerOrPure as Exclude\r\n );\r\n }\r\n if (isBoolean(listenerOrPure) && listenerOrPure) {\r\n removeEvent();\r\n }\r\n\r\n const eventListenerKeys = keys(nameOrEventListeners) as (keyof EventListeners)[];\r\n const offFns: (() => void)[] = [];\r\n each(eventListenerKeys, (key) => {\r\n const eventListener = (nameOrEventListeners as EventListeners)[key];\r\n eventListener && push(offFns, addEvent(key, eventListener));\r\n });\r\n\r\n return bind(runEachAndClear, offFns);\r\n };\r\n\r\n const triggerEvent: TriggerEvent = (name, args) => {\r\n each(from(events.get(name)), (event) => {\r\n if (args && !isEmptyArray(args)) {\r\n (event as (...eventArgs: EventArgs[keyof EventArgs]) => void).apply(0, args);\r\n } else {\r\n (event as () => void)();\r\n }\r\n });\r\n };\r\n\r\n addEvent(initialEventListeners || {});\r\n\r\n return [addEvent, removeEvent, triggerEvent];\r\n};\r\n","import {\r\n assignDeep,\r\n each,\r\n isObject,\r\n keys,\r\n isArray,\r\n hasOwnProperty,\r\n isFunction,\r\n isEmptyObject,\r\n concat,\r\n} from '~/support';\r\nimport type { DeepPartial, DeepReadonly } from '~/typings';\r\n\r\nexport type OptionsField = string;\r\n\r\nexport type OptionsPrimitiveValue =\r\n | boolean\r\n | number\r\n | string\r\n | Array\r\n | ReadonlyArray\r\n | [any]\r\n | [any, ...any[]]\r\n | ((this: any, ...args: any[]) => any)\r\n | null;\r\n\r\nexport type OptionsObject = {\r\n [field: OptionsField]: OptionsPrimitiveValue | OptionsObject;\r\n};\r\n\r\ntype OptionsObjectFieldNameTuples = T extends OptionsPrimitiveValue\r\n ? []\r\n : {\r\n [K in Extract]: [K, ...OptionsObjectFieldNameTuples];\r\n }[Extract];\r\n\r\ntype JoinOptionsObjectFieldTuples<\r\n T extends OptionsField[],\r\n IncompletePath extends boolean = false\r\n> = T extends [infer F]\r\n ? F\r\n : T extends [infer F, ...infer R]\r\n ? F extends OptionsField\r\n ?\r\n | (IncompletePath extends true ? F : never)\r\n | `${F}.${JoinOptionsObjectFieldTuples>}`\r\n : never\r\n : OptionsField;\r\n\r\ntype SplitJoinedOptionsObjectFieldTuples = string extends S\r\n ? OptionsField[]\r\n : S extends ''\r\n ? []\r\n : S extends `${infer T}.${infer U}`\r\n ? [T, ...SplitJoinedOptionsObjectFieldTuples]\r\n : [S];\r\n\r\ntype OptionsObjectFieldTuplesType = T extends [infer F]\r\n ? F extends keyof O\r\n ? O[F]\r\n : never\r\n : T extends [infer F, ...infer R]\r\n ? F extends keyof O\r\n ? O[F] extends OptionsPrimitiveValue\r\n ? O[F]\r\n : OptionsObjectFieldTuplesType>\r\n : never\r\n : never;\r\n\r\ntype OptionsObjectFieldPath = JoinOptionsObjectFieldTuples<\r\n OptionsObjectFieldNameTuples,\r\n true\r\n>;\r\n\r\ntype OptionsObjectFieldPathType<\r\n O extends OptionsObject,\r\n P extends string\r\n> = OptionsObjectFieldTuplesType>;\r\n\r\nconst opsStringify = (value: any) =>\r\n JSON.stringify(value, (_, val) => {\r\n if (isFunction(val)) {\r\n throw 0;\r\n }\r\n return val;\r\n });\r\n\r\nconst getPropByPath = (obj: any, path: string): T =>\r\n obj\r\n ? `${path}`\r\n .split('.')\r\n .reduce((o, prop) => (o && hasOwnProperty(o, prop) ? o[prop] : undefined), obj)\r\n : undefined;\r\n\r\n/**\r\n * The overflow behavior of an axis.\r\n */\r\nexport type OverflowBehavior =\r\n /** No scrolling is possible and the content is clipped. */\r\n | 'hidden'\r\n /** No scrolling is possible and the content isn't clipped. */\r\n | 'visible'\r\n /** Scrolling is possible if there is an overflow. */\r\n | 'scroll'\r\n /**\r\n * If the other axis has no overflow the behavior is similar to `visible`.\r\n * If the other axis has overflow the behavior is similar to `hidden`.\r\n */\r\n | 'visible-hidden'\r\n /**\r\n * If the other axis has no overflow the behavior is similar to `visible`.\r\n * If the other axis has overflow the behavior is similar to `scroll`.\r\n */\r\n | 'visible-scroll';\r\n\r\n/**\r\n * The scrollbars visibility behavior.\r\n */\r\nexport type ScrollbarsVisibilityBehavior =\r\n /** The scrollbars are always visible. */\r\n | 'visible'\r\n /** The scrollbars are always hidden. */\r\n | 'hidden'\r\n /** The scrollbars are only visibile if there is overflow. */\r\n | 'auto';\r\n\r\n/**\r\n * The scrollbars auto hide behavior\r\n */\r\nexport type ScrollbarsAutoHideBehavior =\r\n /** The scrollbars are never hidden automatically. */\r\n | 'never'\r\n /** The scrollbars are hidden unless the user scrolls. */\r\n | 'scroll'\r\n /** The scrollbars are hidden unless the pointer moves in the host element or the user scrolls. */\r\n | 'move'\r\n /** The scrollbars are hidden if the pointer leaves the host element or unless the user scrolls. */\r\n | 'leave';\r\n\r\n/**\r\n * The options of a OverlayScrollbars instance.\r\n */\r\nexport type Options = {\r\n /** Whether the padding shall be absolute. */\r\n paddingAbsolute: boolean;\r\n /** Whether to show the native scrollbars. Has only an effect it the native scrollbars are overlaid. */\r\n showNativeOverlaidScrollbars: boolean;\r\n /** Customizes the automatic update behavior. */\r\n update: {\r\n /**\r\n * The given Event(s) from the elements with the given selector(s) will trigger an update.\r\n * Useful for everything the MutationObserver and ResizeObserver can't detect\r\n * e.g.: and Images `load` event or the `transitionend` / `animationend` events.\r\n */\r\n elementEvents: Array<[elementSelector: string, eventNames: string]> | null;\r\n /**\r\n * The debounce which is used to detect content changes.\r\n * If a tuple is provided you can customize the `timeout` and the `maxWait` in milliseconds.\r\n * If a single number customizes only the `timeout`.\r\n *\r\n * If the `timeout` is `0`, a debounce still exists. (its executed via `requestAnimationFrame`).\r\n */\r\n debounce: [timeout: number, maxWait: number] | number | null;\r\n /**\r\n * HTML attributes which will trigger an update if they're changed.\r\n * Basic attributes like `id`, `class`, `style` etc. are always observed and doesn't have to be added explicitly.\r\n */\r\n attributes: string[] | null;\r\n /**\r\n * A function which makes it possible to ignore a content mutation or null if nothing shall be ignored.\r\n * @param mutation The MutationRecord from the MutationObserver.\r\n * @returns A Truthy value if the mutation shall be ignored, a falsy value otherwise.\r\n */\r\n ignoreMutation: ((mutation: MutationRecord) => any) | null;\r\n };\r\n /** Customizes the overflow behavior per axis. */\r\n overflow: {\r\n /** The overflow behavior of the horizontal (x) axis. */\r\n x: OverflowBehavior;\r\n /** The overflow behavior of the vertical (y) axis. */\r\n y: OverflowBehavior;\r\n };\r\n /** Customizes appearance of the scrollbars. */\r\n scrollbars: {\r\n /**\r\n * The scrollbars theme.\r\n * The theme value will be added as `class` to all `scrollbar` elements of the instance.\r\n */\r\n theme: string | null;\r\n /** The scrollbars visibility behavior. */\r\n visibility: ScrollbarsVisibilityBehavior;\r\n /** The scrollbars auto hide behavior. */\r\n autoHide: ScrollbarsAutoHideBehavior;\r\n /** The scrollbars auto hide delay in milliseconds. */\r\n autoHideDelay: number;\r\n /** Whether the scrollbars auto hide behavior is suspended until a scroll happened. */\r\n autoHideSuspend: boolean;\r\n /** Whether its possible to drag the handle of a scrollbar to scroll the viewport. */\r\n dragScroll: boolean;\r\n /** Whether its possible to click the track of a scrollbar to scroll the viewport. */\r\n clickScroll: boolean;\r\n /**\r\n * An array of pointer types which shall be supported.\r\n * Common pointer types are: `mouse`, `pen` and `touch`.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerType\r\n */\r\n pointers: string[] | null;\r\n };\r\n};\r\n\r\nexport type ReadonlyOptions = DeepReadonly;\r\n\r\nexport type PartialOptions = DeepPartial;\r\n\r\nexport type OptionsCheckFn =

>(\r\n path: P\r\n) => [value: OptionsObjectFieldPathType, changed: boolean];\r\n\r\nexport const defaultOptions: ReadonlyOptions = {\r\n paddingAbsolute: false,\r\n showNativeOverlaidScrollbars: false,\r\n update: {\r\n elementEvents: [['img', 'load']],\r\n debounce: [0, 33],\r\n attributes: null,\r\n ignoreMutation: null,\r\n },\r\n overflow: {\r\n x: 'scroll',\r\n y: 'scroll',\r\n },\r\n scrollbars: {\r\n theme: 'os-theme-dark',\r\n visibility: 'auto',\r\n autoHide: 'never',\r\n autoHideDelay: 1300,\r\n autoHideSuspend: false,\r\n dragScroll: true,\r\n clickScroll: false,\r\n pointers: ['mouse', 'touch', 'pen'],\r\n },\r\n} satisfies OptionsObject & Options;\r\n\r\nexport const getOptionsDiff = (currOptions: T, newOptions: DeepPartial): DeepPartial => {\r\n const diff: DeepPartial = {};\r\n const optionsKeys = concat(keys(newOptions), keys(currOptions)) as Array<\r\n keyof T & keyof DeepPartial\r\n >;\r\n\r\n each(optionsKeys, (optionKey) => {\r\n const currOptionValue = currOptions[optionKey];\r\n const newOptionValue = newOptions[optionKey];\r\n\r\n if (isObject(currOptionValue) && isObject(newOptionValue)) {\r\n assignDeep((diff[optionKey] = {} as any), getOptionsDiff(currOptionValue, newOptionValue));\r\n // delete empty nested objects\r\n if (isEmptyObject(diff[optionKey])) {\r\n delete diff[optionKey];\r\n }\r\n } else if (hasOwnProperty(newOptions, optionKey) && newOptionValue !== currOptionValue) {\r\n let isDiff = true;\r\n\r\n if (isArray(currOptionValue) || isArray(newOptionValue)) {\r\n try {\r\n if (opsStringify(currOptionValue) === opsStringify(newOptionValue)) {\r\n isDiff = false;\r\n }\r\n } catch {}\r\n }\r\n\r\n if (isDiff) {\r\n diff[optionKey] = newOptionValue;\r\n }\r\n }\r\n });\r\n\r\n return diff;\r\n};\r\n\r\nexport const createOptionCheck =\r\n (\r\n options: T,\r\n changedOptions: DeepPartial,\r\n force?: boolean\r\n ): OptionsCheckFn =>\r\n (path) =>\r\n [getPropByPath(options, path), force || getPropByPath(changedOptions, path) !== undefined];\r\n","const dataAttributePrefix = `data-overlayscrollbars`;\r\n\r\n// environment\r\nexport const classNameEnvironment = 'os-environment';\r\nexport const classNameEnvironmentScrollbarHidden = `${classNameEnvironment}-scrollbar-hidden`;\r\n\r\n// initialize\r\nexport const dataAttributeInitialize = `${dataAttributePrefix}-initialize`;\r\n\r\n// host\r\nexport const dataAttributeHost = dataAttributePrefix;\r\nexport const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;\r\nexport const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;\r\nexport const dataValueHostOverflowVisible = 'overflowVisible';\r\nexport const dataValueHostScrollbarHidden = 'scrollbarHidden';\r\nexport const dataValueHostScrollbarPressed = 'scrollbarPressed';\r\nexport const dataValueHostUpdating = 'updating';\r\nexport const dataValueHostHtmlBody = 'body';\r\n\r\n// viewport\r\nexport const dataAttributeViewport = `${dataAttributePrefix}-viewport`;\r\nexport const dataValueViewportArrange = 'arrange';\r\nexport const dataValueViewportScrollbarHidden = 'scrollbarHidden';\r\nexport const dataValueViewportOverflowVisible = dataValueHostOverflowVisible;\r\n\r\n// padding\r\nexport const dataAttributePadding = `${dataAttributePrefix}-padding`;\r\nexport const dataValuePaddingOverflowVisible = dataValueViewportOverflowVisible;\r\n\r\n// content\r\nexport const dataAttributeContent = `${dataAttributePrefix}-content`;\r\n\r\n// size observer\r\nexport const classNameSizeObserver = 'os-size-observer';\r\nexport const classNameSizeObserverAppear = `${classNameSizeObserver}-appear`;\r\nexport const classNameSizeObserverListener = `${classNameSizeObserver}-listener`;\r\nexport const classNameSizeObserverListenerScroll = `${classNameSizeObserverListener}-scroll`;\r\nexport const classNameSizeObserverListenerItem = `${classNameSizeObserverListener}-item`;\r\nexport const classNameSizeObserverListenerItemFinal = `${classNameSizeObserverListenerItem}-final`;\r\n\r\n// trinsic observer\r\nexport const classNameTrinsicObserver = 'os-trinsic-observer';\r\n\r\n// scrollbars\r\nexport const classNameScrollbarThemeNone = 'os-theme-none';\r\nexport const classNameScrollbar = 'os-scrollbar';\r\nexport const classNameScrollbarRtl = `${classNameScrollbar}-rtl`;\r\nexport const classNameScrollbarHorizontal = `${classNameScrollbar}-horizontal`;\r\nexport const classNameScrollbarVertical = `${classNameScrollbar}-vertical`;\r\nexport const classNameScrollbarTrack = `${classNameScrollbar}-track`;\r\nexport const classNameScrollbarHandle = `${classNameScrollbar}-handle`;\r\nexport const classNameScrollbarVisible = `${classNameScrollbar}-visible`;\r\nexport const classNameScrollbarCornerless = `${classNameScrollbar}-cornerless`;\r\nexport const classNameScrollbarTransitionless = `${classNameScrollbar}-transitionless`;\r\nexport const classNameScrollbarInteraction = `${classNameScrollbar}-interaction`;\r\nexport const classNameScrollbarUnusable = `${classNameScrollbar}-unusable`;\r\nexport const classNameScrollbarAutoHide = `${classNameScrollbar}-auto-hide`;\r\nexport const classNameScrollbarAutoHideHidden = `${classNameScrollbarAutoHide}-hidden`;\r\nexport const classNameScrollbarWheel = `${classNameScrollbar}-wheel`;\r\nexport const classNameScrollbarTrackInteractive = `${classNameScrollbarTrack}-interactive`;\r\nexport const classNameScrollbarHandleInteractive = `${classNameScrollbarHandle}-interactive`;\r\n","import { each, keys } from '~/support';\r\nimport type { OverlayScrollbars, OverlayScrollbarsStatic } from '~/overlayscrollbars';\r\nimport type { EventListener, EventListenerArgs, EventListeners } from '..';\r\n\r\nexport type PluginModuleInstance = Record;\r\n\r\nexport type InstancePluginEvent = {\r\n /**\r\n * Adds event listeners to the instance.\r\n * @param eventListeners An object which contains the added listeners.\r\n * @returns Returns a function which removes the added listeners.\r\n */\r\n (eventListeners: EventListeners): () => void;\r\n /**\r\n * Adds a single event listener to the instance.\r\n * @param name The name of the event.\r\n * @param listener The listener which is invoked on that event.\r\n * @returns Returns a function which removes the added listeners.\r\n */\r\n (name: N, listener: EventListener): () => void;\r\n /**\r\n * Adds multiple event listeners to the instance.\r\n * @param name The name of the event.\r\n * @param listener The listeners which are invoked on that event.\r\n * @returns Returns a function which removes the added listeners.\r\n */\r\n (name: N, listener: EventListener[]): () => void;\r\n};\r\n\r\n/**\r\n * Describes a OverlayScrollbars plugin module.\r\n * Plugin modules must be side-effect free and deterministic. (same input produces same output)\r\n */\r\nexport type PluginModule<\r\n S extends PluginModuleInstance | void = PluginModuleInstance | void,\r\n I extends PluginModuleInstance | void = PluginModuleInstance | void\r\n> = (S extends PluginModuleInstance\r\n ? {\r\n /**\r\n * Creates a plugin which is bound to the static object.\r\n * The function will be called once with the static object as soon as the plugin is registered.\r\n * The plugin can add new methods or fields to the passed static object.\r\n * @param osStatic The static object the plugin is bound to.\r\n * @returns The plugins instance object or a falsy value if the plugin doesn't need any instance object.\r\n */\r\n static: (osStatic: OverlayScrollbarsStatic) => S | void;\r\n }\r\n : object) &\r\n (I extends PluginModuleInstance\r\n ? {\r\n /**\r\n * Creates a A plugin which is bound to an instance.\r\n * The function will be called each time a new instance is created.\r\n * The plugin can add new methods or fields to the passed instance object.\r\n * @param osInstance The instance object the plugin is bound to.\r\n * @param event A function which adds events to the instance which can't be removed from outside the plugin. (instance events added with the `on` function can be removed with the optional `pure` parameter)\r\n * @param osStatic The static object the plugin is bound to.\r\n * @returns The plugins instance object or a falsy value if the plugin doesn't need any instance object.\r\n */\r\n instance: (\r\n osInstance: OverlayScrollbars,\r\n event: InstancePluginEvent,\r\n osStatic: OverlayScrollbarsStatic\r\n ) => I | void;\r\n }\r\n : object);\r\n\r\n/**\r\n * Describes a OverlayScrollbar plugin.\r\n */\r\nexport type Plugin<\r\n Name extends string = string,\r\n S extends PluginModuleInstance | void = PluginModuleInstance | void,\r\n I extends PluginModuleInstance | void = PluginModuleInstance | void\r\n> = {\r\n /** The field is the plugins name. Plugin names must be globally unique, please choose wisely. */\r\n [pluginName in Name]: PluginModule;\r\n};\r\n\r\n/**\r\n * Describes a OverlayScrollbar plugin which has only a static module.\r\n */\r\nexport type StaticPlugin<\r\n Name extends string = string,\r\n T extends PluginModuleInstance = PluginModuleInstance\r\n> = Plugin;\r\n\r\n/**\r\n * Describes a OverlayScrollbar plugin which has only a instance module.\r\n */\r\nexport type InstancePlugin<\r\n Name extends string = string,\r\n T extends PluginModuleInstance = PluginModuleInstance\r\n> = Plugin;\r\n\r\n/**\r\n * Infers the type of the static modules instance of the passed plugin.\r\n */\r\nexport type InferStaticPluginModuleInstance = T extends StaticPlugin<\r\n infer Name\r\n>\r\n ? T[Name]['static'] extends (...args: any[]) => any\r\n ? ReturnType\r\n : void\r\n : void;\r\n\r\n/**\r\n * Infers the type of the instance modules instance of the passed plugin.\r\n */\r\nexport type InferInstancePluginModuleInstance = T extends InstancePlugin<\r\n infer Name\r\n>\r\n ? T[Name]['instance'] extends (...args: any[]) => any\r\n ? ReturnType\r\n : void\r\n : void;\r\n\r\n/** All registered plugin modules. */\r\nexport const pluginModules: Record = {};\r\n\r\n/** All static plugin module instances. */\r\nexport const staticPluginModuleInstances: Record = {};\r\n\r\n/**\r\n * Adds plugins.\r\n * @param addedPlugin The plugin(s) to add.\r\n * @returns The added plugin modules of the registered plugins.\r\n */\r\nexport const addPlugins = (addedPlugin: Plugin[]) => {\r\n each(addedPlugin, (plugin) =>\r\n each(plugin, (_, key) => {\r\n pluginModules[key] = plugin[key];\r\n })\r\n );\r\n};\r\n\r\nexport const registerPluginModuleInstances = (\r\n plugin: Plugin,\r\n staticObj: OverlayScrollbarsStatic,\r\n instanceInfo?: [\r\n instanceObj: OverlayScrollbars,\r\n event: InstancePluginEvent,\r\n instancePluginMap?: Record\r\n ]\r\n): Array =>\r\n keys(plugin).map((name) => {\r\n const { static: osStatic, instance: osInstance } = (\r\n plugin as Plugin\r\n )[name];\r\n const [instanceObj, event, instancePluginMap] = instanceInfo || [];\r\n const ctor = instanceInfo ? osInstance : osStatic;\r\n if (ctor) {\r\n const instance = instanceInfo\r\n ? (\r\n ctor as Extract<\r\n typeof ctor,\r\n (\r\n osInstance: OverlayScrollbars,\r\n event: InstancePluginEvent,\r\n osStatic: OverlayScrollbarsStatic\r\n ) => PluginModuleInstance | void\r\n >\r\n )(instanceObj!, event!, staticObj)\r\n : (\r\n ctor as Extract<\r\n typeof ctor,\r\n (osStatic: OverlayScrollbarsStatic) => PluginModuleInstance | void\r\n >\r\n )(staticObj);\r\n return ((instancePluginMap || staticPluginModuleInstances)[name] = instance);\r\n }\r\n });\r\n\r\nexport const getStaticPluginModuleInstance = (\r\n pluginModuleName: T extends StaticPlugin ? N : never\r\n): InferStaticPluginModuleInstance | undefined =>\r\n staticPluginModuleInstances[pluginModuleName] as InferStaticPluginModuleInstance | undefined;\r\n","import {\r\n createDOM,\r\n appendChildren,\r\n offsetSize,\r\n addEventListener,\r\n addClass,\r\n equalWH,\r\n cAF,\r\n rAF,\r\n stopPropagation,\r\n bind,\r\n scrollElementTo,\r\n strWidth,\r\n strHeight,\r\n setStyles,\r\n} from '~/support';\r\nimport {\r\n classNameSizeObserverListenerScroll,\r\n classNameSizeObserverListenerItem,\r\n classNameSizeObserverListenerItemFinal,\r\n} from '~/classnames';\r\nimport type { StaticPlugin } from '../plugins';\r\n\r\nexport const sizeObserverPluginName = '__osSizeObserverPlugin';\r\n\r\nexport const SizeObserverPlugin = /* @__PURE__ */ (() => ({\r\n [sizeObserverPluginName]: {\r\n static:\r\n () =>\r\n (\r\n listenerElement: HTMLElement,\r\n onSizeChangedCallback: (appear: boolean) => any,\r\n observeAppearChange: boolean | null | undefined\r\n ): [appearCallback: () => void, offFns: (() => any)[]] => {\r\n const scrollAmount = 3333333;\r\n const scrollEventName = 'scroll';\r\n const observerElementChildren = createDOM(\r\n `

`\r\n );\r\n const observerElementChildrenRoot = observerElementChildren[0] as HTMLElement;\r\n const shrinkElement = observerElementChildrenRoot.lastChild as HTMLElement;\r\n const expandElement = observerElementChildrenRoot.firstChild as HTMLElement;\r\n const expandElementChild = expandElement?.firstChild as HTMLElement;\r\n\r\n let cacheSize = offsetSize(observerElementChildrenRoot);\r\n let currSize = cacheSize;\r\n let isDirty = false;\r\n let rAFId: number;\r\n\r\n const reset = () => {\r\n scrollElementTo(expandElement, scrollAmount);\r\n scrollElementTo(shrinkElement, scrollAmount);\r\n };\r\n const onResized = (appear?: unknown) => {\r\n rAFId = 0;\r\n if (isDirty) {\r\n cacheSize = currSize;\r\n onSizeChangedCallback(appear === true);\r\n }\r\n };\r\n const onScroll = (scrollEvent?: Event | false) => {\r\n currSize = offsetSize(observerElementChildrenRoot);\r\n isDirty = !scrollEvent || !equalWH(currSize, cacheSize);\r\n\r\n if (scrollEvent) {\r\n stopPropagation(scrollEvent);\r\n\r\n if (isDirty && !rAFId) {\r\n cAF!(rAFId);\r\n rAFId = rAF!(onResized);\r\n }\r\n } else {\r\n onResized(scrollEvent === false);\r\n }\r\n\r\n reset();\r\n };\r\n const destroyFns = [\r\n appendChildren(listenerElement, observerElementChildren),\r\n addEventListener(expandElement, scrollEventName, onScroll),\r\n addEventListener(shrinkElement, scrollEventName, onScroll),\r\n ];\r\n\r\n addClass(listenerElement, classNameSizeObserverListenerScroll);\r\n\r\n // lets assume that the divs will never be that large and a constant value is enough\r\n setStyles(expandElementChild, {\r\n [strWidth]: scrollAmount,\r\n [strHeight]: scrollAmount,\r\n });\r\n\r\n rAF!(reset);\r\n\r\n return [observeAppearChange ? bind(onScroll, false) : reset, destroyFns];\r\n },\r\n },\r\n}))() satisfies StaticPlugin;\r\n","import { getStyles, strOverflowX, strOverflowY, strVisible } from '~/support';\r\nimport type { Env } from '~/environment';\r\nimport type { XY } from '~/support';\r\nimport type { Options, OptionsCheckFn, OverflowBehavior } from '~/options';\r\nimport type { OverflowStyle, StyleObject, StyleObjectKey } from '~/typings';\r\nimport type { StructureSetupElementsObj } from './structureSetup.elements';\r\n\r\nexport interface ViewportOverflowState {\r\n _overflowScroll: XY;\r\n _overflowStyle: XY;\r\n}\r\n\r\nexport const getShowNativeOverlaidScrollbars = (checkOption: OptionsCheckFn, env: Env) => {\r\n const { _nativeScrollbarsOverlaid } = env;\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] = checkOption(\r\n 'showNativeOverlaidScrollbars'\r\n );\r\n\r\n return [\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarsOverlaid.x &&\r\n _nativeScrollbarsOverlaid.y,\r\n showNativeOverlaidScrollbarsChanged,\r\n ] as const;\r\n};\r\n\r\nexport const overflowIsVisible = (overflowBehavior: string) =>\r\n overflowBehavior.indexOf(strVisible) === 0;\r\n\r\n/**\r\n * Gets the current overflow state of the viewport.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param viewportStyleObj The viewport style object where the overflow scroll property can be read of, or undefined if shall be determined.\r\n * @returns A object which contains informations about the current overflow state.\r\n */\r\nexport const getViewportOverflowState = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n viewportStyleObj?: StyleObject\r\n): ViewportOverflowState => {\r\n const { _viewport } = structureSetupElements;\r\n const getStatePerAxis = (styleKey: StyleObjectKey) => {\r\n const overflowStyle = getStyles(_viewport, styleKey);\r\n // can't do something like \"viewportStyleObj && viewportStyleObj[styleKey] || overflowStyle\" here!\r\n const objectPrefferedOverflowStyle = viewportStyleObj\r\n ? viewportStyleObj[styleKey]\r\n : overflowStyle;\r\n const overflowScroll = objectPrefferedOverflowStyle === 'scroll';\r\n\r\n return [overflowStyle, overflowScroll] as [\r\n overflowStyle: OverflowStyle,\r\n overflowScroll: boolean\r\n ];\r\n };\r\n\r\n const [xOverflowStyle, xOverflowScroll] = getStatePerAxis(strOverflowX);\r\n const [yOverflowStyle, yOverflowScroll] = getStatePerAxis(strOverflowY);\r\n\r\n return {\r\n _overflowStyle: {\r\n x: xOverflowStyle,\r\n y: yOverflowStyle,\r\n },\r\n _overflowScroll: {\r\n x: xOverflowScroll,\r\n y: yOverflowScroll,\r\n },\r\n };\r\n};\r\n\r\n/**\r\n * Sets the overflow property of the viewport and calculates the a overflow state according to the new parameters.\r\n * @param showNativeOverlaidScrollbars Whether to show natively overlaid scrollbars.\r\n * @param overflowAmount The overflow amount.\r\n * @param overflow The overflow behavior according to the options.\r\n * @param viewportStyleObj The viewport style object to which the overflow style shall be applied.\r\n * @returns A object which represents the newly set overflow state.\r\n */\r\nexport const setViewportOverflowState = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n hasOverflow: XY,\r\n overflowOption: XY,\r\n viewportStyleObj: StyleObject\r\n): ViewportOverflowState => {\r\n const hasAnyOverflow = hasOverflow.x || hasOverflow.y;\r\n\r\n const setAxisOverflowStyle = (behavior: OverflowBehavior, hasOverflowAxis: boolean) => {\r\n const overflowVisible = overflowIsVisible(behavior);\r\n const fallbackVisibilityBehavior = overflowVisible && hasAnyOverflow ? 'hidden' : '';\r\n const overflowVisibleBehavior =\r\n (hasOverflowAxis && overflowVisible && behavior.replace(`${strVisible}-`, '')) ||\r\n fallbackVisibilityBehavior;\r\n\r\n return [\r\n hasOverflowAxis && !overflowVisible ? behavior : '',\r\n overflowIsVisible(overflowVisibleBehavior) ? 'hidden' : overflowVisibleBehavior,\r\n ];\r\n };\r\n\r\n const [overflowX, visibleBehaviorX] = setAxisOverflowStyle(overflowOption.x, hasOverflow.x);\r\n const [overflowY, visibleBehaviorY] = setAxisOverflowStyle(overflowOption.y, hasOverflow.y);\r\n\r\n viewportStyleObj[strOverflowX] = visibleBehaviorX && overflowY ? visibleBehaviorX : overflowX;\r\n viewportStyleObj[strOverflowY] = visibleBehaviorY && overflowX ? visibleBehaviorY : overflowY;\r\n\r\n return getViewportOverflowState(structureSetupElements, viewportStyleObj);\r\n};\r\n","import {\r\n keys,\r\n noop,\r\n each,\r\n assignDeep,\r\n windowSize,\r\n wnd,\r\n mathAbs,\r\n mathRound,\r\n strMarginBottom,\r\n strMarginLeft,\r\n strMarginRight,\r\n strPaddingBottom,\r\n strPaddingLeft,\r\n strPaddingRight,\r\n strPaddingTop,\r\n getStyles,\r\n setStyles,\r\n addAttrClass,\r\n removeAttrClass,\r\n strWidth,\r\n} from '~/support';\r\nimport { dataValueViewportArrange, dataAttributeViewport } from '~/classnames';\r\nimport {\r\n getShowNativeOverlaidScrollbars,\r\n getViewportOverflowState,\r\n} from '~/setups/structureSetup/structureSetup.utils';\r\nimport type { ObserversSetupState } from '~/setups';\r\nimport type { Options, OptionsCheckFn } from '~/options';\r\nimport type { StructureSetupElementsObj } from '~/setups/structureSetup/structureSetup.elements';\r\nimport type { ViewportOverflowState } from '~/setups/structureSetup/structureSetup.utils';\r\nimport type { Env } from '~/environment';\r\nimport type { UpdateCache, WH, XY } from '~/support';\r\nimport type { StyleObject, StyleObjectKey } from '~/typings';\r\nimport type { StructureSetupState } from '~/setups/structureSetup';\r\nimport type { StaticPlugin } from '~/plugins';\r\n\r\nexport const scrollbarsHidingPluginName = '__osScrollbarsHidingPlugin';\r\n\r\nexport const ScrollbarsHidingPlugin = /* @__PURE__ */ (() => ({\r\n [scrollbarsHidingPluginName]: {\r\n static: () => ({\r\n _viewportArrangement: (\r\n structureSetupElements: StructureSetupElementsObj,\r\n structureSetupState: StructureSetupState,\r\n observersSetupState: ObserversSetupState,\r\n env: Env,\r\n checkOptions: OptionsCheckFn\r\n ) => {\r\n const { _viewportIsTarget, _viewport } = structureSetupElements;\r\n const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid, _nativeScrollbarsSize } = env;\r\n const doViewportArrange =\r\n !_viewportIsTarget &&\r\n !_nativeScrollbarsHiding &&\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n const [showNativeOverlaidScrollbars] = getShowNativeOverlaidScrollbars(checkOptions, env);\r\n\r\n const _getViewportOverflowHideOffset = (viewportOverflowState: ViewportOverflowState) => {\r\n const { _overflowScroll } = viewportOverflowState;\r\n const arrangeHideOffset =\r\n _nativeScrollbarsHiding || showNativeOverlaidScrollbars ? 0 : 42;\r\n\r\n const getHideOffsetPerAxis = (\r\n isOverlaid: boolean,\r\n overflowScroll: boolean,\r\n nativeScrollbarSize: number\r\n ) => {\r\n const nonScrollbarStylingHideOffset = isOverlaid\r\n ? arrangeHideOffset\r\n : nativeScrollbarSize;\r\n const scrollbarsHideOffset =\r\n overflowScroll && !_nativeScrollbarsHiding ? nonScrollbarStylingHideOffset : 0;\r\n const scrollbarsHideOffsetArrange = isOverlaid && !!arrangeHideOffset;\r\n\r\n return [scrollbarsHideOffset, scrollbarsHideOffsetArrange] as const;\r\n };\r\n\r\n const [xScrollbarsHideOffset, xScrollbarsHideOffsetArrange] = getHideOffsetPerAxis(\r\n _nativeScrollbarsOverlaid.x,\r\n _overflowScroll.x,\r\n _nativeScrollbarsSize.x\r\n );\r\n const [yScrollbarsHideOffset, yScrollbarsHideOffsetArrange] = getHideOffsetPerAxis(\r\n _nativeScrollbarsOverlaid.y,\r\n _overflowScroll.y,\r\n _nativeScrollbarsSize.y\r\n );\r\n\r\n return {\r\n _scrollbarsHideOffset: {\r\n x: xScrollbarsHideOffset,\r\n y: yScrollbarsHideOffset,\r\n },\r\n _scrollbarsHideOffsetArrange: {\r\n x: xScrollbarsHideOffsetArrange,\r\n y: yScrollbarsHideOffsetArrange,\r\n },\r\n };\r\n };\r\n\r\n /**\r\n * Hides the native scrollbars according to the passed parameters.\r\n * @param viewportOverflowState The viewport overflow state.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportArrange Whether special styles related to the viewport arrange strategy shall be applied.\r\n * @param viewportStyleObj The viewport style object to which the needed styles shall be applied.\r\n */\r\n const _hideNativeScrollbars = (\r\n viewportOverflowState: ViewportOverflowState,\r\n { _directionIsRTL }: ObserversSetupState,\r\n viewportArrange: boolean,\r\n viewportStyleObj: StyleObject\r\n ): void => {\r\n assignDeep(viewportStyleObj, {\r\n [strMarginRight]: 0,\r\n [strMarginBottom]: 0,\r\n [strMarginLeft]: 0,\r\n });\r\n if (!_viewportIsTarget) {\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } =\r\n _getViewportOverflowHideOffset(viewportOverflowState);\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _viewportPaddingStyle } = structureSetupState;\r\n const horizontalMarginKey: keyof StyleObject = _directionIsRTL\r\n ? strMarginLeft\r\n : strMarginRight;\r\n const viewportHorizontalPaddingKey: keyof StyleObject = _directionIsRTL\r\n ? strPaddingLeft\r\n : strPaddingRight;\r\n const horizontalMarginValue = _viewportPaddingStyle[horizontalMarginKey] as number;\r\n const verticalMarginValue = _viewportPaddingStyle[strMarginBottom] as number;\r\n const horizontalPaddingValue = _viewportPaddingStyle[\r\n viewportHorizontalPaddingKey\r\n ] as number;\r\n const verticalPaddingValue = _viewportPaddingStyle[strPaddingBottom] as number;\r\n\r\n // horizontal\r\n viewportStyleObj[strWidth] = `calc(100% + ${\r\n hideOffsetY + horizontalMarginValue * -1\r\n }px)`;\r\n viewportStyleObj[horizontalMarginKey] = -hideOffsetY + horizontalMarginValue;\r\n\r\n // vertical\r\n viewportStyleObj[strMarginBottom] = -hideOffsetX + verticalMarginValue;\r\n\r\n // viewport arrange additional styles\r\n if (viewportArrange) {\r\n viewportStyleObj[viewportHorizontalPaddingKey] =\r\n horizontalPaddingValue + (arrangeY ? hideOffsetY : 0);\r\n viewportStyleObj[strPaddingBottom] =\r\n verticalPaddingValue + (arrangeX ? hideOffsetX : 0);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Sets the styles of the viewport arrange element.\r\n * @param viewportOverflowState The viewport overflow state according to which the scrollbars shall be hidden.\r\n * @param viewportScrollSize The content scroll size.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @returns A boolean which indicates whether the viewport arrange element was adjusted.\r\n */\r\n const _arrangeViewport = (\r\n viewportOverflowState: ViewportOverflowState,\r\n viewportScrollSize: WH,\r\n sizeFraction: WH\r\n ) => {\r\n if (doViewportArrange) {\r\n const { _viewportPaddingStyle } = structureSetupState;\r\n const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } =\r\n _getViewportOverflowHideOffset(viewportOverflowState);\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;\r\n const { _directionIsRTL } = observersSetupState;\r\n const viewportArrangeHorizontalPaddingKey: keyof StyleObject = _directionIsRTL\r\n ? strPaddingRight\r\n : strPaddingLeft;\r\n const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[\r\n viewportArrangeHorizontalPaddingKey\r\n ] as number;\r\n const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;\r\n const fractionalContentWidth = viewportScrollSize.w + sizeFraction.w;\r\n const fractionalContenHeight = viewportScrollSize.h + sizeFraction.h;\r\n const arrangeSize = {\r\n w:\r\n hideOffsetY && arrangeY\r\n ? `${\r\n hideOffsetY + fractionalContentWidth - viewportArrangeHorizontalPaddingValue\r\n }px`\r\n : '',\r\n h:\r\n hideOffsetX && arrangeX\r\n ? `${\r\n hideOffsetX + fractionalContenHeight - viewportArrangeVerticalPaddingValue\r\n }px`\r\n : '',\r\n };\r\n\r\n setStyles(_viewport, {\r\n '--os-vaw': arrangeSize.w,\r\n '--os-vah': arrangeSize.h,\r\n });\r\n }\r\n\r\n return doViewportArrange;\r\n };\r\n\r\n /**\r\n * Removes all styles applied because of the viewport arrange strategy.\r\n * @param showNativeOverlaidScrollbars Whether native overlaid scrollbars are shown instead of hidden.\r\n * @param directionIsRTL Whether the direction is RTL or not.\r\n * @param viewportOverflowState The currentviewport overflow state or undefined if it has to be determined.\r\n * @returns A object with a function which applies all the removed styles and the determined viewport vverflow state.\r\n */\r\n const _undoViewportArrange = (viewportOverflowState?: ViewportOverflowState) => {\r\n if (doViewportArrange) {\r\n const finalViewportOverflowState =\r\n viewportOverflowState || getViewportOverflowState(structureSetupElements);\r\n const { _viewportPaddingStyle: viewportPaddingStyle } = structureSetupState;\r\n const { _scrollbarsHideOffsetArrange } = _getViewportOverflowHideOffset(\r\n finalViewportOverflowState\r\n );\r\n const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;\r\n const finalPaddingStyle: StyleObject = {};\r\n const assignProps = (props: string[]) =>\r\n each(props, (prop) => {\r\n finalPaddingStyle[prop as StyleObjectKey] =\r\n viewportPaddingStyle[prop as StyleObjectKey];\r\n });\r\n\r\n if (arrangeX) {\r\n assignProps([strMarginBottom, strPaddingTop, strPaddingBottom]);\r\n }\r\n\r\n if (arrangeY) {\r\n assignProps([strMarginLeft, strMarginRight, strPaddingLeft, strPaddingRight]);\r\n }\r\n\r\n const prevStyle = getStyles(_viewport, keys(finalPaddingStyle) as StyleObjectKey[]);\r\n removeAttrClass(_viewport, dataAttributeViewport, dataValueViewportArrange);\r\n\r\n setStyles(_viewport, finalPaddingStyle);\r\n\r\n return [\r\n () => {\r\n _hideNativeScrollbars(\r\n finalViewportOverflowState,\r\n observersSetupState,\r\n doViewportArrange,\r\n prevStyle\r\n );\r\n setStyles(_viewport, prevStyle);\r\n addAttrClass(_viewport, dataAttributeViewport, dataValueViewportArrange);\r\n },\r\n finalViewportOverflowState,\r\n ] as const;\r\n }\r\n return [noop] as const;\r\n };\r\n\r\n return {\r\n _getViewportOverflowHideOffset,\r\n _arrangeViewport,\r\n _undoViewportArrange,\r\n _hideNativeScrollbars,\r\n };\r\n },\r\n _envWindowZoom: () => {\r\n let size = { w: 0, h: 0 };\r\n let dpr = 0;\r\n const getWindowDPR = (): number => {\r\n const screen = wnd.screen;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const dDPI = screen.deviceXDPI || 0;\r\n // eslint-disable-next-line\r\n // @ts-ignore\r\n const sDPI = screen.logicalXDPI || 1;\r\n return wnd.devicePixelRatio || dDPI / sDPI;\r\n };\r\n const diffBiggerThanOne = (valOne: number, valTwo: number): boolean => {\r\n const absValOne = mathAbs(valOne);\r\n const absValTwo = mathAbs(valTwo);\r\n return !(\r\n absValOne === absValTwo ||\r\n absValOne + 1 === absValTwo ||\r\n absValOne - 1 === absValTwo\r\n );\r\n };\r\n\r\n return (\r\n envInstance: Env,\r\n updateNativeScrollbarSizeCache: UpdateCache>\r\n ): boolean | undefined => {\r\n const sizeNew = windowSize();\r\n const deltaSize = {\r\n w: sizeNew.w - size.w,\r\n h: sizeNew.h - size.h,\r\n };\r\n\r\n if (deltaSize.w === 0 && deltaSize.h === 0) {\r\n return;\r\n }\r\n\r\n const deltaAbsSize = {\r\n w: mathAbs(deltaSize.w),\r\n h: mathAbs(deltaSize.h),\r\n };\r\n const deltaAbsRatio = {\r\n w: mathAbs(mathRound(sizeNew.w / (size.w / 100.0))),\r\n h: mathAbs(mathRound(sizeNew.h / (size.h / 100.0))),\r\n };\r\n const dprNew = getWindowDPR();\r\n const deltaIsBigger = deltaAbsSize.w > 2 && deltaAbsSize.h > 2;\r\n const difference = !diffBiggerThanOne(deltaAbsRatio.w, deltaAbsRatio.h);\r\n const dprChanged = dprNew !== dpr && dprNew > 0;\r\n const isZoom = deltaIsBigger && difference && dprChanged;\r\n let scrollbarSizeChanged;\r\n let scrollbarSize;\r\n\r\n if (isZoom) {\r\n [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache();\r\n\r\n assignDeep(envInstance._nativeScrollbarsSize, scrollbarSize); // keep the object same!\r\n }\r\n\r\n size = sizeNew;\r\n dpr = dprNew;\r\n\r\n return scrollbarSizeChanged;\r\n };\r\n },\r\n }),\r\n },\r\n}))() satisfies StaticPlugin;\r\n","import { animateNumber, noop, setT } from '~/support';\r\nimport type { StaticPlugin } from '~/plugins';\r\n\r\nexport const clickScrollPluginModuleName = '__osClickScrollPlugin';\r\n\r\nexport const ClickScrollPlugin = /* @__PURE__ */ (() => ({\r\n [clickScrollPluginModuleName]: {\r\n static:\r\n () =>\r\n (\r\n moveHandleRelative: (deltaMovement: number) => void,\r\n getHandleOffset: (handleRect?: DOMRect, trackRect?: DOMRect) => number,\r\n startOffset: number,\r\n handleLength: number,\r\n relativeTrackPointerOffset: number\r\n ): (() => void) => {\r\n // click scroll animation\r\n let iteration = 0;\r\n let clear = noop;\r\n const animateClickScroll = (clickScrollProgress: number) => {\r\n clear = animateNumber(\r\n clickScrollProgress,\r\n clickScrollProgress + handleLength * Math.sign(startOffset),\r\n 133,\r\n (animationProgress, _, animationCompleted) => {\r\n moveHandleRelative(animationProgress);\r\n const handleStartBound = getHandleOffset();\r\n const handleEndBound = handleStartBound + handleLength;\r\n const mouseBetweenHandleBounds =\r\n relativeTrackPointerOffset >= handleStartBound &&\r\n relativeTrackPointerOffset <= handleEndBound;\r\n\r\n if (animationCompleted && !mouseBetweenHandleBounds) {\r\n if (iteration) {\r\n animateClickScroll(animationProgress);\r\n } else {\r\n const firstIterationPauseTimeout = setT(() => {\r\n animateClickScroll(animationProgress);\r\n }, 222);\r\n clear = () => {\r\n clearTimeout(firstIterationPauseTimeout);\r\n };\r\n }\r\n iteration++;\r\n }\r\n }\r\n );\r\n };\r\n\r\n animateClickScroll(0);\r\n\r\n return () => clear();\r\n },\r\n },\r\n}))() satisfies StaticPlugin;\r\n","import {\r\n createDOM,\r\n addClass,\r\n appendChildren,\r\n fractionalSize,\r\n clientSize,\r\n absoluteCoordinates,\r\n offsetSize,\r\n removeAttrs,\r\n removeElements,\r\n assignDeep,\r\n createCache,\r\n equalXY,\r\n createEventListenerHub,\r\n scrollT,\r\n bind,\r\n wnd,\r\n noop,\r\n scrollElementTo,\r\n strHidden,\r\n strOverflowX,\r\n strOverflowY,\r\n getStyles,\r\n setStyles,\r\n isBodyElement,\r\n} from '~/support';\r\nimport { classNameEnvironment, classNameEnvironmentScrollbarHidden } from '~/classnames';\r\nimport { defaultOptions } from '~/options';\r\nimport { getStaticPluginModuleInstance, scrollbarsHidingPluginName } from '~/plugins';\r\nimport type { XY, EventListener } from '~/support';\r\nimport type { Options, PartialOptions } from '~/options';\r\nimport type { ScrollbarsHidingPlugin } from '~/plugins';\r\nimport type { Initialization, PartialInitialization } from '~/initialization';\r\nimport type { StyleObjectKey } from './typings';\r\n\r\ntype EnvironmentEventArgs = {\r\n r: [scrollbarSizeChanged?: boolean];\r\n};\r\n\r\nexport interface Env {\r\n readonly _nativeScrollbarsSize: XY;\r\n readonly _nativeScrollbarsOverlaid: XY;\r\n readonly _nativeScrollbarsHiding: boolean;\r\n readonly _rtlScrollBehavior: { n: boolean; i: boolean };\r\n readonly _scrollTimeline: boolean;\r\n readonly _staticDefaultInitialization: Initialization;\r\n readonly _staticDefaultOptions: Options;\r\n _addResizeListener(listener: EventListener): () => void;\r\n _getDefaultInitialization(): Initialization;\r\n _setDefaultInitialization(newInitialization: PartialInitialization): Initialization;\r\n _getDefaultOptions(): Options;\r\n _setDefaultOptions(newDefaultOptions: PartialOptions): Options;\r\n}\r\n\r\nlet environmentInstance: Env;\r\n\r\nconst createEnvironment = (): Env => {\r\n const getNativeScrollbarSize = (\r\n measureElm: HTMLElement,\r\n measureElmChild: HTMLElement,\r\n clear?: boolean\r\n ): XY => {\r\n // fix weird safari issue where getComputedStyle returns all empty styles by appending twice\r\n appendChildren(document.body, measureElm);\r\n appendChildren(document.body, measureElm);\r\n\r\n const cSize = clientSize(measureElm);\r\n const oSize = offsetSize(measureElm);\r\n const fSize = fractionalSize(measureElmChild);\r\n\r\n clear && removeElements(measureElm);\r\n\r\n return {\r\n x: oSize.h - cSize.h + fSize.h,\r\n y: oSize.w - cSize.w + fSize.w,\r\n };\r\n };\r\n\r\n const getNativeScrollbarsHiding = (testElm: HTMLElement): boolean => {\r\n let result = false;\r\n const revertClass = addClass(testElm, classNameEnvironmentScrollbarHidden);\r\n try {\r\n result =\r\n getStyles(testElm, 'scrollbar-width' as StyleObjectKey) === 'none' ||\r\n getStyles(testElm, 'display', '::-webkit-scrollbar') === 'none';\r\n } catch {}\r\n revertClass();\r\n return result;\r\n };\r\n\r\n const getRtlScrollBehavior = (\r\n parentElm: HTMLElement,\r\n childElm: HTMLElement\r\n ): { i: boolean; n: boolean } => {\r\n setStyles(parentElm, {\r\n [strOverflowX]: strHidden,\r\n [strOverflowY]: strHidden,\r\n direction: 'rtl',\r\n });\r\n scrollElementTo(parentElm, { x: 0 });\r\n\r\n const parentOffset = absoluteCoordinates(parentElm);\r\n const childOffset = absoluteCoordinates(childElm);\r\n scrollElementTo(parentElm, { x: -999 }); // https://github.com/KingSora/OverlayScrollbars/issues/187\r\n const childOffsetAfterScroll = absoluteCoordinates(childElm);\r\n return {\r\n /**\r\n * origin direction = determines if the zero scroll position is on the left or right side\r\n * 'i' means 'invert' (i === true means that the axis must be inverted to be correct)\r\n * true = on the left side\r\n * false = on the right side\r\n */\r\n i: parentOffset.x === childOffset.x,\r\n /**\r\n * negative = determines if the maximum scroll is positive or negative\r\n * 'n' means 'negate' (n === true means that the axis must be negated to be correct)\r\n * true = negative\r\n * false = positive\r\n */\r\n n: childOffset.x !== childOffsetAfterScroll.x,\r\n };\r\n };\r\n\r\n // changes to this styles need to be reflected in the \"hide native scrollbars\" section of the structure styles\r\n const envStyle = `.${classNameEnvironment}{scroll-behavior:auto!important;position:fixed;opacity:0;visibility:hidden;overflow:scroll;height:200px;width:200px;z-index:-1}.${classNameEnvironment} div{width:200%;height:200%;margin:10px 0}.${classNameEnvironmentScrollbarHidden}{scrollbar-width:none!important}.${classNameEnvironmentScrollbarHidden}::-webkit-scrollbar,.${classNameEnvironmentScrollbarHidden}::-webkit-scrollbar-corner{appearance:none!important;display:none!important;width:0!important;height:0!important}`;\r\n const envDOM = createDOM(\r\n `
`\r\n );\r\n const envElm = envDOM[0] as HTMLElement;\r\n const envChildElm = envElm.firstChild as HTMLElement;\r\n const [addEvent, , triggerEvent] = createEventListenerHub();\r\n const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache(\r\n {\r\n _initialValue: getNativeScrollbarSize(envElm, envChildElm),\r\n _equal: equalXY,\r\n },\r\n bind(getNativeScrollbarSize, envElm, envChildElm, true)\r\n );\r\n const [nativeScrollbarsSize] = getNativeScrollbarSizeCache();\r\n const nativeScrollbarsHiding = getNativeScrollbarsHiding(envElm);\r\n const nativeScrollbarsOverlaid = {\r\n x: nativeScrollbarsSize.x === 0,\r\n y: nativeScrollbarsSize.y === 0,\r\n };\r\n const staticDefaultInitialization: Initialization = {\r\n elements: {\r\n host: null,\r\n padding: !nativeScrollbarsHiding,\r\n viewport: (target) => nativeScrollbarsHiding && isBodyElement(target) && target,\r\n content: false,\r\n },\r\n scrollbars: {\r\n slot: true,\r\n },\r\n cancel: {\r\n nativeScrollbarsOverlaid: false,\r\n body: null,\r\n },\r\n };\r\n const staticDefaultOptions = assignDeep({}, defaultOptions);\r\n const getDefaultOptions = bind(\r\n assignDeep as typeof assignDeep,\r\n {} as Options,\r\n staticDefaultOptions\r\n );\r\n const getDefaultInitialization = bind(\r\n assignDeep as typeof assignDeep,\r\n {} as Initialization,\r\n staticDefaultInitialization\r\n );\r\n\r\n const env: Env = {\r\n _nativeScrollbarsSize: nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid: nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding: nativeScrollbarsHiding,\r\n _scrollTimeline: !!scrollT,\r\n _rtlScrollBehavior: getRtlScrollBehavior(envElm, envChildElm),\r\n _addResizeListener: bind(addEvent, 'r'),\r\n _getDefaultInitialization: getDefaultInitialization,\r\n _setDefaultInitialization: (newInitializationStrategy) =>\r\n assignDeep(staticDefaultInitialization, newInitializationStrategy) &&\r\n getDefaultInitialization(),\r\n _getDefaultOptions: getDefaultOptions,\r\n _setDefaultOptions: (newDefaultOptions) =>\r\n assignDeep(staticDefaultOptions, newDefaultOptions) && getDefaultOptions(),\r\n _staticDefaultInitialization: assignDeep({}, staticDefaultInitialization),\r\n _staticDefaultOptions: assignDeep({}, staticDefaultOptions),\r\n };\r\n\r\n removeAttrs(envElm, 'style');\r\n removeElements(envElm);\r\n\r\n // needed in case content has css viewport units\r\n wnd.addEventListener('resize', () => {\r\n let scrollbarSizeChanged;\r\n if (!nativeScrollbarsHiding && (!nativeScrollbarsOverlaid.x || !nativeScrollbarsOverlaid.y)) {\r\n const scrollbarsHidingPlugin = getStaticPluginModuleInstance(\r\n scrollbarsHidingPluginName\r\n );\r\n const zoomFn = scrollbarsHidingPlugin ? scrollbarsHidingPlugin._envWindowZoom() : noop;\r\n scrollbarSizeChanged = !!zoomFn(env, updateNativeScrollbarSizeCache);\r\n }\r\n\r\n triggerEvent('r', [scrollbarSizeChanged]);\r\n });\r\n\r\n return env;\r\n};\r\n\r\nconst getEnvironment = (): Env => {\r\n if (!environmentInstance) {\r\n environmentInstance = createEnvironment();\r\n }\r\n return environmentInstance;\r\n};\r\n\r\nexport { getEnvironment };\r\n","import { isFunction, isHTMLElement, isNull, isUndefined } from '~/support';\r\nimport { getEnvironment } from '~/environment';\r\nimport type { DeepPartial } from '~/typings';\r\n\r\ntype FallbackStaticInitializtationElement = Extract<\r\n StaticInitializationElement,\r\n (...args: Args) => any\r\n> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\ntype FallbackDynamicInitializtationElement = Extract<\r\n DynamicInitializationElement,\r\n (...args: Args) => any\r\n> extends (...args: infer P) => any\r\n ? (...args: P) => HTMLElement\r\n : never;\r\n\r\nexport type StaticInitialization = HTMLElement | false | null;\r\nexport type DynamicInitialization = HTMLElement | boolean | null;\r\n\r\n/**\r\n * Static elements are elements which MUST be present in the final DOM.\r\n * If an `HTMLElement` is passed the passed element will be taken as the repsective element.\r\n * With `false`, `null` or `undefined` an appropriate element is generated automatically.\r\n */\r\nexport type StaticInitializationElement =\r\n /** A function which returns the the StaticInitialization value. */\r\n | ((...args: Args) => StaticInitialization)\r\n /** The StaticInitialization value. */\r\n | StaticInitialization;\r\n\r\n/**\r\n * Dynamic elements are elements which CAN be present in the final DOM.\r\n * If an `HTMLElement`is passed the passed element will be taken as the repsective element.\r\n * With `true` an appropriate element is generated automatically.\r\n * With `false`, `null` or `undefined` the element won't be in the DOM.\r\n */\r\nexport type DynamicInitializationElement =\r\n /** A function which returns the the DynamicInitialization value. */\r\n | ((...args: Args) => DynamicInitialization)\r\n /** The DynamicInitialization value. */\r\n | DynamicInitialization;\r\n\r\n/**\r\n * Describes how a OverlayScrollbar instance should initialize.\r\n */\r\nexport type Initialization = {\r\n /**\r\n * Customizes which elements are generated and used.\r\n * If a function is passed to any of the fields, it receives the `target` element as its argument.\r\n * Any passed function should be a \"pure\" function. (same input produces same output)\r\n */\r\n elements: {\r\n /**\r\n * Assign a custom element as the host element.\r\n * Only relevant if the target element is a Textarea.\r\n */\r\n host: StaticInitializationElement<[target: InitializationTargetElement]>;\r\n /** Assign a custom element as the viewport element. */\r\n viewport: StaticInitializationElement<[target: InitializationTargetElement]>;\r\n /** Assign a custom element as the padding element or force the element not to be generated. */\r\n padding: DynamicInitializationElement<[target: InitializationTargetElement]>;\r\n /** Assign a custom element as the content element or force the element not to be generated. */\r\n content: DynamicInitializationElement<[target: InitializationTargetElement]>;\r\n };\r\n /**\r\n * Customizes elements related to the scrollbars.\r\n * If a function is passed, it receives the `target`, `host` and `viewport` element as arguments.\r\n */\r\n scrollbars: {\r\n slot: DynamicInitializationElement<\r\n [target: InitializationTargetElement, host: HTMLElement, viewport: HTMLElement]\r\n >;\r\n };\r\n /**\r\n * Customizes the cancelation behavior.\r\n */\r\n cancel: {\r\n /** Whether the initialization shall be canceled if the native scrollbars are overlaid. */\r\n nativeScrollbarsOverlaid: boolean;\r\n /**\r\n * Whether the initialization shall be canceled if its applied to a body element.\r\n * With `true` an initialization is always canceled, with `false` its never canceled.\r\n * With `null` the initialization will only be canceled when the initialization would affect the browsers functionality. (window.scrollTo, mobile browser behavior etc.)\r\n */\r\n body: boolean | null;\r\n };\r\n};\r\n\r\nexport type PartialInitialization = DeepPartial;\r\n\r\n/** The initialization target element. */\r\nexport type InitializationTargetElement = HTMLElement; // | HTMLTextAreaElement;\r\n\r\n/**\r\n * The initialization target object.\r\n * OverlayScrollbars({ target: myElement }) is equivalent to OverlayScrollbars(myElement).\r\n */\r\nexport type InitializationTargetObject = PartialInitialization & {\r\n target: InitializationTargetElement;\r\n};\r\n\r\n/** The initialization target. */\r\nexport type InitializationTarget = InitializationTargetElement | InitializationTargetObject;\r\n\r\nexport const resolveInitialization = (\r\n args: any,\r\n value: any\r\n): T => (isFunction(value) ? value.apply(0, args) : value);\r\n\r\nexport const staticInitializationElement = (\r\n args: Args,\r\n fallbackStaticInitializationElement: FallbackStaticInitializtationElement,\r\n defaultStaticInitializationElement: StaticInitializationElement,\r\n staticInitializationElementValue?: StaticInitializationElement\r\n): HTMLElement => {\r\n const staticInitialization = isUndefined(staticInitializationElementValue)\r\n ? defaultStaticInitializationElement\r\n : staticInitializationElementValue;\r\n const resolvedInitialization = resolveInitialization(\r\n args,\r\n staticInitialization\r\n );\r\n return resolvedInitialization || fallbackStaticInitializationElement.apply(0, args);\r\n};\r\n\r\nexport const dynamicInitializationElement = (\r\n args: Args,\r\n fallbackDynamicInitializationElement: FallbackDynamicInitializtationElement,\r\n defaultDynamicInitializationElement: DynamicInitializationElement,\r\n dynamicInitializationElementValue?: DynamicInitializationElement\r\n): HTMLElement | false => {\r\n const dynamicInitialization = isUndefined(dynamicInitializationElementValue)\r\n ? defaultDynamicInitializationElement\r\n : dynamicInitializationElementValue;\r\n const resolvedInitialization = resolveInitialization(\r\n args,\r\n dynamicInitialization\r\n );\r\n return (\r\n !!resolvedInitialization &&\r\n (isHTMLElement(resolvedInitialization)\r\n ? resolvedInitialization\r\n : fallbackDynamicInitializationElement.apply(0, args))\r\n );\r\n};\r\n\r\nexport const cancelInitialization = (\r\n isBody: boolean,\r\n cancelInitializationValue?: DeepPartial | false | null | undefined\r\n): boolean => {\r\n const { nativeScrollbarsOverlaid, body } = cancelInitializationValue || {};\r\n const { _nativeScrollbarsOverlaid, _nativeScrollbarsHiding, _getDefaultInitialization } =\r\n getEnvironment();\r\n const { nativeScrollbarsOverlaid: defaultNativeScrollbarsOverlaid, body: defaultbody } =\r\n _getDefaultInitialization().cancel;\r\n\r\n const resolvedNativeScrollbarsOverlaid =\r\n nativeScrollbarsOverlaid ?? defaultNativeScrollbarsOverlaid;\r\n const resolvedDocumentScrollingElement = isUndefined(body) ? defaultbody : body;\r\n\r\n const finalNativeScrollbarsOverlaid =\r\n (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y) &&\r\n resolvedNativeScrollbarsOverlaid;\r\n const finalDocumentScrollingElement =\r\n isBody &&\r\n (isNull(resolvedDocumentScrollingElement)\r\n ? !_nativeScrollbarsHiding\r\n : resolvedDocumentScrollingElement);\r\n\r\n return !!finalNativeScrollbarsOverlaid || !!finalDocumentScrollingElement;\r\n};\r\n","import type { OverlayScrollbars } from '~/overlayscrollbars';\n\nconst targetInstanceMap: WeakMap = new WeakMap();\n\n/**\n * Adds the given OverlayScrollbars instance to the given element.\n * @param target The element which is the target of the OverlayScrollbars instance.\n * @param osInstance The OverlayScrollbars instance.\n */\nexport const addInstance = (target: Element, osInstance: OverlayScrollbars): void => {\n targetInstanceMap.set(target, osInstance);\n};\n\n/**\n * Removes a OverlayScrollbars instance from the given element.\n * @param target The element from which its OverlayScrollbars instance shall be removed.\n */\nexport const removeInstance = (target: Element): void => {\n targetInstanceMap.delete(target);\n};\n\n/**\n * Gets the OverlayScrollbars from the given element or undefined if it doesn't have one.\n * @param target The element of which its OverlayScrollbars instance shall be get.\n */\nexport const getInstance = (target: Element): OverlayScrollbars | undefined =>\n targetInstanceMap.get(target);\n","import {\r\n each,\r\n noop,\r\n debounce,\r\n MutationObserverConstructor,\r\n addEventListener,\r\n is,\r\n find,\r\n push,\r\n runEachAndClear,\r\n bind,\r\n isEmptyArray,\r\n deduplicateArray,\r\n inArray,\r\n concat,\r\n getAttr,\r\n} from '~/support';\r\n\r\ntype DOMContentObserverCallback = (contentChangedThroughEvent: boolean) => any;\r\n\r\ntype DOMTargetObserverCallback = (targetChangedAttrs: string[], targetStyleChanged: boolean) => any;\r\n\r\ninterface DOMObserverOptionsBase {\r\n _attributes?: string[];\r\n /**\r\n * A function which can ignore a changed attribute if it returns true.\r\n * for DOMTargetObserver this applies to the changes to the observed target\r\n * for DOMContentObserver this applies to changes to nested targets -> nested targets are elements which match the \"_nestedTargetSelector\" selector\r\n */\r\n _ignoreTargetChange?: DOMObserverIgnoreTargetChange;\r\n}\r\n\r\ninterface DOMContentObserverOptions extends DOMObserverOptionsBase {\r\n _eventContentChange?: DOMObserverEventContentChange; // [selector, eventname(s) | function returning eventname(s)] -> eventnames divided by whitespaces\r\n _nestedTargetSelector?: string;\r\n _ignoreContentChange?: DOMObserverIgnoreContentChange; // function which will prevent marking certain dom changes as content change if it returns true\r\n}\r\n\r\ninterface DOMTargetObserverOptions extends DOMObserverOptionsBase {\r\n /**\r\n * Marks certain attributes as style changing, should be a subset of the _attributes prop.\r\n * Used to set the \"targetStyleChanged\" param in the DOMTargetObserverCallback.\r\n */\r\n _styleChangingAttributes?: string[];\r\n}\r\n\r\ntype ContentChangeArrayItem = [selector?: string, eventNames?: string] | null | undefined;\r\n\r\nexport type DOMObserverEventContentChange =\r\n | Array\r\n | false\r\n | null\r\n | undefined;\r\n\r\nexport type DOMObserverIgnoreContentChange = (\r\n mutation: MutationRecord,\r\n isNestedTarget: boolean,\r\n domObserverTarget: HTMLElement,\r\n domObserverOptions?: DOMContentObserverOptions\r\n) => boolean;\r\n\r\nexport type DOMObserverIgnoreTargetChange = (\r\n target: Node,\r\n attributeName: string,\r\n oldAttributeValue: string | null,\r\n newAttributeValue: string | null\r\n) => boolean;\r\n\r\nexport type DOMObserverCallback = ContentObserver extends true\r\n ? DOMContentObserverCallback\r\n : DOMTargetObserverCallback;\r\n\r\nexport type DOMObserverOptions = ContentObserver extends true\r\n ? DOMContentObserverOptions\r\n : DOMTargetObserverOptions;\r\n\r\nexport type DOMObserver = [\r\n construct: () => () => void,\r\n update: () => void | false | Parameters>\r\n];\r\n\r\ntype EventContentChangeUpdateElement = (\r\n getElements?: (selector: string) => Node[],\r\n removed?: boolean\r\n) => void;\r\ntype EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];\r\n\r\n/**\r\n * Creates a set of helper functions to observe events of elements inside the target element.\r\n * @param target The target element of which the children elements shall be observed. (not only direct children but also nested ones)\r\n * @param eventContentChange The event content change array. (array of tuples: selector and eventname(s))\r\n * @param callback Callback which is called if one of the elements emits the corresponding event.\r\n * @returns A object which contains a set of helper functions to destroy and update the observation of elements.\r\n */\r\nconst createEventContentChange = (\r\n target: HTMLElement,\r\n callback: (...args: any) => any,\r\n eventContentChange?: DOMObserverEventContentChange\r\n): EventContentChange => {\r\n let destroyed = false;\r\n const map = eventContentChange ? new WeakMap any)[]>() : false; // weak map to prevent memory leak for detached elements\r\n const destroy = () => {\r\n destroyed = true;\r\n };\r\n const updateElements: EventContentChangeUpdateElement = (getElements) => {\r\n if (map && eventContentChange) {\r\n const eventElmList = eventContentChange.map((item) => {\r\n const [selector, eventNames] = item || [];\r\n const elements = eventNames && selector ? (getElements || find)(selector, target) : [];\r\n return [elements, eventNames] as const;\r\n });\r\n\r\n each(eventElmList, (item) =>\r\n each(item[0], (elm) => {\r\n const eventNames = item[1];\r\n const entries = map.get(elm) || [];\r\n const isTargetChild = target.contains(elm);\r\n\r\n if (isTargetChild && eventNames) {\r\n const removeListener = addEventListener(elm, eventNames, (event: Event) => {\r\n if (destroyed) {\r\n removeListener();\r\n map.delete(elm);\r\n } else {\r\n callback(event);\r\n }\r\n });\r\n map.set(elm, push(entries, removeListener));\r\n } else {\r\n runEachAndClear(entries);\r\n map.delete(elm);\r\n }\r\n })\r\n );\r\n }\r\n };\r\n\r\n updateElements();\r\n\r\n return [destroy, updateElements];\r\n};\r\n\r\n/**\r\n * Creates a DOM observer which observes DOM changes to either the target element or its children.\r\n * @param target The element which shall be observed.\r\n * @param isContentObserver Whether this observer is just observing the target or just the targets children. (not only direct children but also nested ones)\r\n * @param callback The callback which gets called if a change was detected.\r\n * @param options The options for DOM change detection.\r\n * @returns A object which represents the instance of the DOM observer.\r\n */\r\nexport const createDOMObserver = (\r\n target: HTMLElement,\r\n isContentObserver: ContentObserver,\r\n callback: DOMObserverCallback,\r\n options?: DOMObserverOptions\r\n): DOMObserver => {\r\n let isConnected = false;\r\n const {\r\n _attributes,\r\n _styleChangingAttributes,\r\n _eventContentChange,\r\n _nestedTargetSelector,\r\n _ignoreTargetChange,\r\n _ignoreContentChange,\r\n } = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};\r\n const debouncedEventContentChange = debounce(\r\n () => isConnected && (callback as DOMContentObserverCallback)(true),\r\n { _timeout: 33, _maxDelay: 99 }\r\n );\r\n const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(\r\n target,\r\n debouncedEventContentChange,\r\n _eventContentChange\r\n );\r\n\r\n // MutationObserver\r\n const finalAttributes = _attributes || [];\r\n const finalStyleChangingAttributes = _styleChangingAttributes || [];\r\n const observedAttributes = concat(finalAttributes, finalStyleChangingAttributes);\r\n const observerCallback = (\r\n fromRecords: boolean,\r\n mutations: MutationRecord[]\r\n ): void | Parameters> => {\r\n if (!isEmptyArray(mutations)) {\r\n const ignoreTargetChange = _ignoreTargetChange || noop;\r\n const ignoreContentChange = _ignoreContentChange || noop;\r\n const totalChangedNodes: Node[] = [];\r\n const targetChangedAttrs: string[] = [];\r\n let targetStyleChanged: boolean | '' | null | undefined = false;\r\n let contentChanged: boolean | '' | null | undefined = false;\r\n let childListChanged: boolean | '' | null | undefined = false;\r\n\r\n each(mutations, (mutation) => {\r\n const {\r\n attributeName,\r\n target: mutationTarget,\r\n type,\r\n oldValue,\r\n addedNodes,\r\n removedNodes,\r\n } = mutation;\r\n const isAttributesType = type === 'attributes';\r\n const isChildListType = type === 'childList';\r\n const targetIsMutationTarget = target === mutationTarget;\r\n const isAttrChange = isAttributesType && attributeName;\r\n // isAttrChange check needed, otherwise mutationTarget might not be a valid HTMLElement\r\n const attributeValue =\r\n (isAttrChange && getAttr(mutationTarget as HTMLElement, attributeName || '')) || null;\r\n const attributeChanged = isAttrChange && oldValue !== attributeValue;\r\n const styleChangingAttrChanged =\r\n inArray(finalStyleChangingAttributes, attributeName) && attributeChanged;\r\n\r\n // if is content observer and something changed in children\r\n if (isContentObserver && (isChildListType || !targetIsMutationTarget)) {\r\n const contentAttrChanged = isAttributesType && attributeChanged;\r\n const isNestedTarget =\r\n contentAttrChanged &&\r\n _nestedTargetSelector &&\r\n is(mutationTarget, _nestedTargetSelector);\r\n const baseAssertion = isNestedTarget\r\n ? !ignoreTargetChange(mutationTarget, attributeName, oldValue, attributeValue)\r\n : !isAttributesType || contentAttrChanged;\r\n const contentFinalChanged =\r\n baseAssertion && !ignoreContentChange(mutation, !!isNestedTarget, target, options);\r\n\r\n each(addedNodes, (node) => push(totalChangedNodes, node));\r\n each(removedNodes, (node) => push(totalChangedNodes, node));\r\n\r\n contentChanged = contentChanged || contentFinalChanged;\r\n childListChanged = childListChanged || isChildListType;\r\n }\r\n // if is target observer and target attr changed\r\n if (\r\n !isContentObserver &&\r\n targetIsMutationTarget &&\r\n attributeChanged &&\r\n !ignoreTargetChange(mutationTarget, attributeName!, oldValue, attributeValue)\r\n ) {\r\n push(targetChangedAttrs, attributeName);\r\n targetStyleChanged = targetStyleChanged || styleChangingAttrChanged;\r\n }\r\n });\r\n\r\n // adds / removes the new elements from the event content change\r\n updateEventContentChangeElements((selector: string) =>\r\n deduplicateArray(totalChangedNodes).reduce((arr, node) => {\r\n push(arr, find(selector, node));\r\n return is(node, selector) ? push(arr, node) : arr;\r\n }, [])\r\n );\r\n\r\n if (isContentObserver) {\r\n !fromRecords && contentChanged && (callback as DOMContentObserverCallback)(false);\r\n return [false] satisfies Parameters> as Parameters<\r\n DOMObserverCallback\r\n >;\r\n }\r\n\r\n if (!isEmptyArray(targetChangedAttrs) || targetStyleChanged) {\r\n const args = [\r\n deduplicateArray(targetChangedAttrs),\r\n targetStyleChanged,\r\n ] satisfies Parameters & Parameters>;\r\n !fromRecords && (callback as DOMTargetObserverCallback).apply(0, args);\r\n\r\n return args as Parameters>;\r\n }\r\n }\r\n };\r\n const mutationObserver: MutationObserver = new MutationObserverConstructor!(\r\n bind(observerCallback, false)\r\n );\r\n\r\n return [\r\n () => {\r\n mutationObserver.observe(target, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n attributeFilter: observedAttributes,\r\n subtree: isContentObserver,\r\n childList: isContentObserver,\r\n characterData: isContentObserver,\r\n });\r\n isConnected = true;\r\n\r\n return () => {\r\n if (isConnected) {\r\n destroyEventContentChange();\r\n mutationObserver.disconnect();\r\n isConnected = false;\r\n }\r\n };\r\n },\r\n () => {\r\n if (isConnected) {\r\n debouncedEventContentChange._flush();\r\n return observerCallback(true, mutationObserver.takeRecords());\r\n }\r\n },\r\n ];\r\n};\r\n","import {\r\n createCache,\r\n createDOM,\r\n runEachAndClear,\r\n addEventListener,\r\n addClass,\r\n push,\r\n ResizeObserverConstructor,\r\n removeClass,\r\n stopPropagation,\r\n appendChildren,\r\n getDirectionIsRTL,\r\n domRectHasDimensions,\r\n bind,\r\n noop,\r\n isArray,\r\n convertScrollPosition,\r\n scrollElementTo,\r\n domRectAppeared,\r\n concat,\r\n} from '~/support';\r\nimport { getEnvironment } from '~/environment';\r\nimport {\r\n classNameSizeObserver,\r\n classNameSizeObserverAppear,\r\n classNameSizeObserverListener,\r\n} from '~/classnames';\r\nimport { getStaticPluginModuleInstance, sizeObserverPluginName } from '~/plugins';\r\nimport type { CacheValues } from '~/support';\r\nimport type { SizeObserverPlugin } from '~/plugins';\r\n\r\nexport interface SizeObserverOptions {\r\n /** Whether direction changes should be observed. */\r\n _direction?: boolean;\r\n /** Whether appearing should be observed. */\r\n _appear?: boolean;\r\n}\r\n\r\nexport interface SizeObserverCallbackParams {\r\n _sizeChanged: boolean;\r\n _directionIsRTLCache?: CacheValues;\r\n _appear?: boolean;\r\n}\r\n\r\nexport type SizeObserver = () => () => void;\r\n\r\n/**\r\n * Creates a size observer which observes any size, padding, border, margin and box-sizing changes of the target element. Depending on the options also direction and appear can be observed.\r\n * @param target The target element which shall be observed.\r\n * @param onSizeChangedCallback The callback which gets called after a size change was detected.\r\n * @param options The options for size detection, whether to observe also direction and appear.\r\n * @returns A object which represents the instance of the size observer.\r\n */\r\nexport const createSizeObserver = (\r\n target: HTMLElement,\r\n onSizeChangedCallback: (params: SizeObserverCallbackParams) => any,\r\n options?: SizeObserverOptions\r\n): SizeObserver => {\r\n const scrollAmount = 3333333;\r\n const { _direction: observeDirectionChange, _appear: observeAppearChange } = options || {};\r\n const sizeObserverPlugin =\r\n getStaticPluginModuleInstance(sizeObserverPluginName);\r\n const { _rtlScrollBehavior: rtlScrollBehavior } = getEnvironment();\r\n const getIsDirectionRTL = bind(getDirectionIsRTL, target);\r\n const [updateResizeObserverContentRectCache] = createCache({\r\n _initialValue: false,\r\n _alwaysUpdateValues: true,\r\n });\r\n\r\n return () => {\r\n const destroyFns: (() => void)[] = [];\r\n const baseElements = createDOM(\r\n `
`\r\n );\r\n const sizeObserver = baseElements[0] as HTMLElement;\r\n const listenerElement = sizeObserver.firstChild as HTMLElement;\r\n const onSizeChangedCallbackProxy = (\r\n sizeChangedContext?: CacheValues | ResizeObserverEntry | boolean\r\n ) => {\r\n const isResizeObserverCall = sizeChangedContext instanceof ResizeObserverEntry;\r\n const hasDirectionCache = !isResizeObserverCall && isArray(sizeChangedContext);\r\n\r\n let skip = false;\r\n let appear = false;\r\n let doDirectionScroll = true; // always true if sizeChangedContext is Event (appear callback or RO. Polyfill)\r\n\r\n // if triggered from RO.\r\n if (isResizeObserverCall) {\r\n const [currRContentRect, , prevContentRect] = updateResizeObserverContentRectCache(\r\n sizeChangedContext.contentRect\r\n );\r\n const hasDimensions = domRectHasDimensions(currRContentRect);\r\n const appeared = domRectAppeared(currRContentRect, prevContentRect);\r\n const firstCall = !prevContentRect;\r\n appear = firstCall || appeared;\r\n skip = !appear && !hasDimensions; // skip if display is none or when window resize\r\n\r\n doDirectionScroll = !skip; // direction scroll when not skipping\r\n }\r\n // else if its triggered with DirectionCache\r\n else if (hasDirectionCache) {\r\n [, doDirectionScroll] = sizeChangedContext; // direction scroll when DirectionCache changed, false otherwise\r\n }\r\n // else if it triggered with appear from polyfill\r\n else {\r\n appear = sizeChangedContext === true;\r\n }\r\n\r\n if (observeDirectionChange && doDirectionScroll) {\r\n const rtl = hasDirectionCache ? sizeChangedContext[0] : getDirectionIsRTL(sizeObserver);\r\n scrollElementTo(sizeObserver, {\r\n x: convertScrollPosition(scrollAmount, scrollAmount, rtl && rtlScrollBehavior),\r\n y: scrollAmount,\r\n });\r\n }\r\n\r\n if (!skip) {\r\n onSizeChangedCallback({\r\n _directionIsRTLCache: hasDirectionCache ? sizeChangedContext : undefined,\r\n _sizeChanged: !hasDirectionCache,\r\n _appear: appear,\r\n });\r\n }\r\n };\r\n\r\n if (ResizeObserverConstructor) {\r\n const resizeObserverInstance = new ResizeObserverConstructor((entries) =>\r\n onSizeChangedCallbackProxy(entries.pop())\r\n );\r\n resizeObserverInstance.observe(listenerElement);\r\n push(destroyFns, () => {\r\n resizeObserverInstance.disconnect();\r\n });\r\n } else if (sizeObserverPlugin) {\r\n const [pluginAppearCallback, pluginDestroyFns] = sizeObserverPlugin(\r\n listenerElement,\r\n onSizeChangedCallbackProxy,\r\n observeAppearChange\r\n );\r\n push(\r\n destroyFns,\r\n concat(\r\n [\r\n addClass(sizeObserver, classNameSizeObserverAppear),\r\n addEventListener(sizeObserver, 'animationstart', pluginAppearCallback),\r\n ],\r\n pluginDestroyFns\r\n )\r\n );\r\n } else {\r\n return noop;\r\n }\r\n\r\n if (observeDirectionChange) {\r\n const [updateDirectionIsRTLCache] = createCache(\r\n {\r\n _initialValue: undefined,\r\n },\r\n getIsDirectionRTL\r\n );\r\n\r\n push(\r\n destroyFns,\r\n addEventListener(sizeObserver, 'scroll', (event) => {\r\n const directionIsRTLCacheValues = updateDirectionIsRTLCache();\r\n const [directionIsRTLCache, directionIsRTLCacheChanged, directionIsRTLCachePrevious] =\r\n directionIsRTLCacheValues;\r\n if (directionIsRTLCacheChanged) {\r\n removeClass(listenerElement, 'ltr rtl');\r\n addClass(listenerElement, directionIsRTLCache ? 'rtl' : 'ltr');\r\n\r\n onSizeChangedCallbackProxy([\r\n !!directionIsRTLCache,\r\n directionIsRTLCacheChanged,\r\n directionIsRTLCachePrevious,\r\n ]);\r\n }\r\n\r\n stopPropagation(event);\r\n })\r\n );\r\n }\r\n\r\n return bind(runEachAndClear, push(destroyFns, appendChildren(target, sizeObserver)));\r\n };\r\n};\r\n","import {\r\n createDiv,\r\n offsetSize,\r\n runEachAndClear,\r\n createCache,\r\n push,\r\n IntersectionObserverConstructor,\r\n appendChildren,\r\n bind,\r\n} from '~/support';\r\nimport { createSizeObserver } from '~/observers/sizeObserver';\r\nimport { classNameTrinsicObserver } from '~/classnames';\r\nimport type { WH, CacheValues } from '~/support';\r\n\r\nexport type TrinsicObserverCallback = (heightIntrinsic: CacheValues) => any;\r\nexport type TrinsicObserver = [\r\n construct: () => () => void,\r\n update: () => void | false | null | undefined | Parameters\r\n];\r\n\r\n/**\r\n * Creates a trinsic observer which observes changes to intrinsic or extrinsic sizing for the height of the target element.\r\n * @param target The element which shall be observed.\r\n * @param onTrinsicChangedCallback The callback which gets called after a change was detected.\r\n * @returns A object which represents the instance of the trinsic observer.\r\n */\r\nexport const createTrinsicObserver = (\r\n target: HTMLElement,\r\n onTrinsicChangedCallback: TrinsicObserverCallback\r\n): TrinsicObserver => {\r\n let intersectionObserverInstance: undefined | IntersectionObserver;\r\n const isHeightIntrinsic = (ioEntryOrSize: IntersectionObserverEntry | WH): boolean =>\r\n (ioEntryOrSize as WH).h === 0 ||\r\n (ioEntryOrSize as IntersectionObserverEntry).isIntersecting ||\r\n (ioEntryOrSize as IntersectionObserverEntry).intersectionRatio > 0;\r\n const trinsicObserver = createDiv(classNameTrinsicObserver);\r\n const [updateHeightIntrinsicCache] = createCache({\r\n _initialValue: false,\r\n });\r\n const triggerOnTrinsicChangedCallback = (\r\n updateValue: IntersectionObserverEntry | WH | undefined,\r\n fromRecords?: boolean\r\n ): void | Parameters => {\r\n if (updateValue) {\r\n const heightIntrinsic = updateHeightIntrinsicCache(isHeightIntrinsic(updateValue));\r\n const [, heightIntrinsicChanged] = heightIntrinsic;\r\n return (\r\n heightIntrinsicChanged &&\r\n !fromRecords &&\r\n onTrinsicChangedCallback(heightIntrinsic) && [heightIntrinsic]\r\n );\r\n }\r\n };\r\n const intersectionObserverCallback = (\r\n fromRecords: boolean,\r\n entries: IntersectionObserverEntry[]\r\n ) => triggerOnTrinsicChangedCallback(entries.pop(), fromRecords);\r\n\r\n return [\r\n () => {\r\n const destroyFns: (() => void)[] = [];\r\n\r\n if (IntersectionObserverConstructor) {\r\n intersectionObserverInstance = new IntersectionObserverConstructor(\r\n bind(intersectionObserverCallback, false),\r\n { root: target }\r\n );\r\n intersectionObserverInstance.observe(trinsicObserver);\r\n push(destroyFns, () => {\r\n intersectionObserverInstance!.disconnect();\r\n });\r\n } else {\r\n const onSizeChanged = () => {\r\n const newSize = offsetSize(trinsicObserver);\r\n triggerOnTrinsicChangedCallback(newSize);\r\n };\r\n push(destroyFns, createSizeObserver(trinsicObserver, onSizeChanged)());\r\n onSizeChanged();\r\n }\r\n\r\n return bind(runEachAndClear, push(destroyFns, appendChildren(target, trinsicObserver)));\r\n },\r\n () =>\r\n intersectionObserverInstance &&\r\n intersectionObserverCallback(true, intersectionObserverInstance.takeRecords()),\r\n ];\r\n};\r\n","import {\r\n ResizeObserverConstructor,\r\n assignDeep,\r\n closest,\r\n createCache,\r\n debounce,\r\n getDirectionIsRTL,\r\n each,\r\n equalWH,\r\n fractionalSize,\r\n isArray,\r\n isFunction,\r\n isNumber,\r\n isString,\r\n keys,\r\n liesBetween,\r\n removeAttrs,\r\n scrollSize,\r\n getElmentScroll,\r\n scrollElementTo,\r\n inArray,\r\n domRectAppeared,\r\n concat,\r\n getAttr,\r\n setAttrs,\r\n} from '~/support';\r\nimport { createDOMObserver, createSizeObserver, createTrinsicObserver } from '~/observers';\r\nimport { getEnvironment } from '~/environment';\r\nimport {\r\n classNameScrollbar,\r\n dataAttributeHost,\r\n dataAttributeViewport,\r\n dataValueHostUpdating,\r\n dataValueViewportArrange,\r\n dataValueViewportOverflowVisible,\r\n} from '~/classnames';\r\nimport { getStaticPluginModuleInstance, scrollbarsHidingPluginName } from '~/plugins';\r\nimport type { Options, OptionsCheckFn } from '~/options';\r\nimport type { ScrollbarsHidingPlugin } from '~/plugins';\r\nimport type { SizeObserverCallbackParams } from '~/observers';\r\nimport type { StructureSetupElementsObj } from '../structureSetup/structureSetup.elements';\r\nimport type { Setup, SetupUpdateInfo, StructureSetupState } from '~/setups';\r\nimport type { CacheValues, WH } from '~/support';\r\nimport type { PlainObject } from '~/typings';\r\n\r\nexport interface ObserversSetupState {\r\n _heightIntrinsic: boolean;\r\n _directionIsRTL: boolean;\r\n}\r\n\r\nexport interface ObserversSetupUpdateInfo extends SetupUpdateInfo {\r\n _takeRecords?: boolean;\r\n}\r\n\r\nexport type ObserversSetupUpdateHints = {\r\n _sizeChanged?: boolean;\r\n _directionChanged?: boolean;\r\n _heightIntrinsicChanged?: boolean;\r\n _hostMutation?: boolean;\r\n _contentMutation?: boolean;\r\n _appear?: boolean;\r\n _scrollbarSizeChanged?: boolean;\r\n};\r\n\r\nexport type ObserversSetup = Setup<\r\n ObserversSetupUpdateInfo,\r\n ObserversSetupState,\r\n ObserversSetupUpdateHints\r\n>;\r\n\r\nexport const createObserversSetup = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n structureSetupState: StructureSetupState,\r\n getCurrentOption: OptionsCheckFn,\r\n onObserversUpdated: (updateHints: ObserversSetupUpdateHints) => void\r\n): ObserversSetup => {\r\n let debounceTimeout: number | false | undefined;\r\n let debounceMaxDelay: number | false | undefined;\r\n let updateContentMutationObserver: (() => void) | undefined;\r\n let destroyContentMutationObserver: (() => void) | undefined;\r\n let prevContentRect: DOMRectReadOnly | undefined;\r\n let prevDirectionIsRTL: boolean | undefined;\r\n\r\n const { _nativeScrollbarsHiding } = getEnvironment();\r\n\r\n const hostSelector = `[${dataAttributeHost}]`;\r\n\r\n // TODO: observer textarea attrs if textarea\r\n\r\n const viewportSelector = `[${dataAttributeViewport}]`;\r\n const viewportAttrsFromTarget = ['tabindex'];\r\n const baseStyleChangingAttrsTextarea = ['wrap', 'cols', 'rows'];\r\n const baseStyleChangingAttrs = ['id', 'class', 'style', 'open'];\r\n const {\r\n _target,\r\n _host,\r\n _viewport,\r\n _content,\r\n _isTextarea,\r\n _viewportIsTarget,\r\n _viewportHasClass,\r\n _viewportAddRemoveClass,\r\n } = structureSetupElements;\r\n\r\n const state: ObserversSetupState = {\r\n _heightIntrinsic: false,\r\n _directionIsRTL: getDirectionIsRTL(_target),\r\n };\r\n const env = getEnvironment();\r\n const scrollbarsHidingPlugin = getStaticPluginModuleInstance(\r\n scrollbarsHidingPluginName\r\n );\r\n\r\n const [updateContentSizeCache] = createCache>(\r\n {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n },\r\n () => {\r\n const _undoViewportArrange =\r\n scrollbarsHidingPlugin &&\r\n scrollbarsHidingPlugin._viewportArrangement(\r\n structureSetupElements,\r\n structureSetupState,\r\n state,\r\n env,\r\n getCurrentOption\r\n )._undoViewportArrange;\r\n\r\n const hasOver = _viewportHasClass(dataValueViewportOverflowVisible);\r\n const isArranged = !_viewportIsTarget && _viewportHasClass(dataValueViewportArrange);\r\n const scrollOffset = isArranged && getElmentScroll(_viewport);\r\n\r\n _viewportAddRemoveClass(dataValueViewportOverflowVisible);\r\n _viewportIsTarget && _viewportAddRemoveClass(dataValueHostUpdating, true);\r\n const redoViewportArrange = isArranged && _undoViewportArrange && _undoViewportArrange()[0];\r\n\r\n const contentScroll = scrollSize(_content);\r\n const viewportScroll = scrollSize(_viewport);\r\n const fractional = fractionalSize(_viewport);\r\n\r\n _viewportAddRemoveClass(dataValueViewportOverflowVisible, hasOver);\r\n _viewportIsTarget && _viewportAddRemoveClass(dataValueHostUpdating);\r\n redoViewportArrange && redoViewportArrange();\r\n\r\n scrollElementTo(_viewport, scrollOffset);\r\n\r\n return {\r\n w: viewportScroll.w + contentScroll.w + fractional.w,\r\n h: viewportScroll.h + contentScroll.h + fractional.h,\r\n };\r\n }\r\n );\r\n\r\n const contentMutationObserverAttr = _isTextarea\r\n ? baseStyleChangingAttrsTextarea\r\n : concat(baseStyleChangingAttrs, baseStyleChangingAttrsTextarea);\r\n\r\n const onObserversUpdatedDebounced = debounce(onObserversUpdated, {\r\n _timeout: () => debounceTimeout,\r\n _maxDelay: () => debounceMaxDelay,\r\n _mergeParams(prev, curr) {\r\n const [prevObj] = prev;\r\n const [currObj] = curr;\r\n return [\r\n concat(keys(prevObj), keys(currObj)).reduce((obj, key) => {\r\n obj[key] = prevObj[key as keyof typeof prevObj] || currObj[key as keyof typeof currObj];\r\n return obj;\r\n }, {} as PlainObject),\r\n ] as [Partial];\r\n },\r\n });\r\n\r\n const setDirectionWhenViewportIsTarget = (updateHints: ObserversSetupUpdateHints) => {\r\n if (_viewportIsTarget) {\r\n const newDirectionIsRTL = getDirectionIsRTL(_target);\r\n assignDeep(updateHints, { _directionChanged: prevDirectionIsRTL !== newDirectionIsRTL });\r\n assignDeep(state, { _directionIsRTL: newDirectionIsRTL });\r\n prevDirectionIsRTL = newDirectionIsRTL;\r\n }\r\n };\r\n\r\n const updateViewportAttrsFromHost = (attributes?: string[]) => {\r\n each(attributes || viewportAttrsFromTarget, (attribute) => {\r\n if (inArray(viewportAttrsFromTarget, attribute)) {\r\n const hostAttr = getAttr(_host, attribute);\r\n if (isString(hostAttr)) {\r\n setAttrs(_viewport, attribute, hostAttr);\r\n } else {\r\n removeAttrs(_viewport, attribute);\r\n }\r\n }\r\n });\r\n };\r\n\r\n const onTrinsicChanged = (\r\n heightIntrinsicCache: CacheValues,\r\n fromRecords?: true\r\n ): ObserversSetupUpdateHints => {\r\n const [heightIntrinsic, heightIntrinsicChanged] = heightIntrinsicCache;\r\n const updateHints: ObserversSetupUpdateHints = {\r\n _heightIntrinsicChanged: heightIntrinsicChanged,\r\n };\r\n\r\n assignDeep(state, { _heightIntrinsic: heightIntrinsic });\r\n !fromRecords && onObserversUpdated(updateHints);\r\n\r\n return updateHints;\r\n };\r\n\r\n const onSizeChanged = ({\r\n _sizeChanged,\r\n _directionIsRTLCache,\r\n _appear,\r\n }: SizeObserverCallbackParams) => {\r\n const exclusiveSizeChange = _sizeChanged && !_appear && !_directionIsRTLCache;\r\n const updateFn =\r\n // use debounceed update:\r\n // if native scrollbars hiding is supported\r\n // and if the update is more than just a exclusive sizeChange (e.g. size change + appear, or size change + direction)\r\n !exclusiveSizeChange && _nativeScrollbarsHiding\r\n ? onObserversUpdatedDebounced\r\n : onObserversUpdated;\r\n\r\n const [directionIsRTL, directionIsRTLChanged] = _directionIsRTLCache || [];\r\n const updateHints: ObserversSetupUpdateHints = {\r\n _sizeChanged: _sizeChanged || _appear,\r\n _appear,\r\n _directionChanged: directionIsRTLChanged,\r\n };\r\n\r\n setDirectionWhenViewportIsTarget(updateHints);\r\n\r\n _directionIsRTLCache && assignDeep(state, { _directionIsRTL: directionIsRTL });\r\n\r\n updateFn(updateHints);\r\n };\r\n\r\n const onContentMutation = (\r\n contentChangedThroughEvent: boolean,\r\n fromRecords?: true\r\n ): ObserversSetupUpdateHints => {\r\n const [, _contentMutation] = updateContentSizeCache();\r\n const updateHints: ObserversSetupUpdateHints = {\r\n _contentMutation,\r\n };\r\n\r\n setDirectionWhenViewportIsTarget(updateHints);\r\n\r\n // if contentChangedThroughEvent is true its already debounced\r\n const updateFn = contentChangedThroughEvent ? onObserversUpdated : onObserversUpdatedDebounced;\r\n\r\n _contentMutation && !fromRecords && updateFn(updateHints);\r\n\r\n return updateHints;\r\n };\r\n\r\n const onHostMutation = (\r\n targetChangedAttrs: string[],\r\n targetStyleChanged: boolean,\r\n fromRecords?: true\r\n ): ObserversSetupUpdateHints => {\r\n const updateHints: ObserversSetupUpdateHints = {\r\n _hostMutation: targetStyleChanged,\r\n };\r\n\r\n setDirectionWhenViewportIsTarget(updateHints);\r\n\r\n if (targetStyleChanged && !fromRecords) {\r\n onObserversUpdatedDebounced(updateHints);\r\n } else if (!_viewportIsTarget) {\r\n updateViewportAttrsFromHost(targetChangedAttrs);\r\n }\r\n\r\n return updateHints;\r\n };\r\n\r\n const { _addResizeListener } = env;\r\n const [constructTrinsicObserver, updateTrinsicObserver] = _content\r\n ? createTrinsicObserver(_host, onTrinsicChanged)\r\n : [];\r\n\r\n const constructSizeObserver =\r\n !_viewportIsTarget &&\r\n createSizeObserver(_host, onSizeChanged, {\r\n _appear: true,\r\n _direction: true,\r\n });\r\n\r\n const [constructHostMutationObserver, updateHostMutationObserver] = createDOMObserver(\r\n _host,\r\n false,\r\n onHostMutation,\r\n {\r\n _styleChangingAttributes: baseStyleChangingAttrs,\r\n _attributes: concat(baseStyleChangingAttrs, viewportAttrsFromTarget),\r\n }\r\n );\r\n\r\n const viewportIsTargetResizeObserver =\r\n _viewportIsTarget &&\r\n ResizeObserverConstructor &&\r\n new ResizeObserverConstructor((entries) => {\r\n const currContentRect = entries[entries.length - 1].contentRect;\r\n onSizeChanged({\r\n _sizeChanged: true,\r\n _appear: domRectAppeared(currContentRect, prevContentRect),\r\n });\r\n prevContentRect = currContentRect;\r\n });\r\n\r\n return [\r\n () => {\r\n // order is matter!\r\n updateViewportAttrsFromHost();\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.observe(_host);\r\n const destroySizeObserver = constructSizeObserver && constructSizeObserver();\r\n const destroyTrinsicObserver = constructTrinsicObserver && constructTrinsicObserver();\r\n const destroyHostMutationObserver = constructHostMutationObserver();\r\n const removeResizeListener = _addResizeListener((_scrollbarSizeChanged) => {\r\n const [, _contentMutation] = updateContentSizeCache();\r\n onObserversUpdatedDebounced({ _scrollbarSizeChanged, _contentMutation });\r\n });\r\n\r\n return () => {\r\n viewportIsTargetResizeObserver && viewportIsTargetResizeObserver.disconnect();\r\n destroySizeObserver && destroySizeObserver();\r\n destroyTrinsicObserver && destroyTrinsicObserver();\r\n destroyContentMutationObserver && destroyContentMutationObserver();\r\n destroyHostMutationObserver();\r\n removeResizeListener();\r\n };\r\n },\r\n ({ _checkOption, _takeRecords, _force }) => {\r\n const updateHints: ObserversSetupUpdateHints = {};\r\n\r\n const [ignoreMutation] = _checkOption('update.ignoreMutation');\r\n const [attributes, attributesChanged] = _checkOption('update.attributes');\r\n const [elementEvents, elementEventsChanged] = _checkOption('update.elementEvents');\r\n const [debounceValue, debounceChanged] = _checkOption('update.debounce');\r\n const contentMutationObserverChanged = elementEventsChanged || attributesChanged;\r\n const takeRecords = _takeRecords || _force;\r\n const ignoreMutationFromOptions = (mutation: MutationRecord) =>\r\n isFunction(ignoreMutation) && ignoreMutation(mutation);\r\n\r\n if (contentMutationObserverChanged) {\r\n updateContentMutationObserver && updateContentMutationObserver();\r\n destroyContentMutationObserver && destroyContentMutationObserver();\r\n\r\n const [construct, update] = createDOMObserver(\r\n _content || _viewport,\r\n true,\r\n onContentMutation,\r\n {\r\n _attributes: concat(contentMutationObserverAttr, attributes || []),\r\n _eventContentChange: elementEvents,\r\n _nestedTargetSelector: hostSelector,\r\n _ignoreContentChange: (mutation, isNestedTarget) => {\r\n const { target: mutationTarget, attributeName } = mutation;\r\n const ignore =\r\n !isNestedTarget && attributeName && !_viewportIsTarget\r\n ? liesBetween(mutationTarget, hostSelector, viewportSelector)\r\n : false;\r\n return (\r\n ignore ||\r\n !!closest(mutationTarget, `.${classNameScrollbar}`) || // ignore explicitely all scrollbar elements\r\n !!ignoreMutationFromOptions(mutation)\r\n );\r\n },\r\n }\r\n );\r\n\r\n destroyContentMutationObserver = construct();\r\n updateContentMutationObserver = update;\r\n }\r\n\r\n if (debounceChanged) {\r\n onObserversUpdatedDebounced._flush();\r\n if (isArray(debounceValue)) {\r\n const timeout = debounceValue[0];\r\n const maxWait = debounceValue[1];\r\n debounceTimeout = isNumber(timeout) && timeout;\r\n debounceMaxDelay = isNumber(maxWait) && maxWait;\r\n } else if (isNumber(debounceValue)) {\r\n debounceTimeout = debounceValue;\r\n debounceMaxDelay = false;\r\n } else {\r\n debounceTimeout = false;\r\n debounceMaxDelay = false;\r\n }\r\n }\r\n\r\n if (takeRecords) {\r\n const hostUpdateResult = updateHostMutationObserver();\r\n const trinsicUpdateResult = updateTrinsicObserver && updateTrinsicObserver();\r\n const contentUpdateResult =\r\n updateContentMutationObserver && updateContentMutationObserver();\r\n\r\n hostUpdateResult &&\r\n assignDeep(\r\n updateHints,\r\n onHostMutation(hostUpdateResult[0], hostUpdateResult[1], takeRecords)\r\n );\r\n\r\n trinsicUpdateResult &&\r\n assignDeep(updateHints, onTrinsicChanged(trinsicUpdateResult[0], takeRecords));\r\n\r\n contentUpdateResult &&\r\n assignDeep(updateHints, onContentMutation(contentUpdateResult[0], takeRecords));\r\n }\r\n\r\n setDirectionWhenViewportIsTarget(updateHints);\r\n\r\n return updateHints;\r\n },\r\n state,\r\n ];\r\n};\r\n","import {\r\n addClass,\r\n appendChildren,\r\n createDiv,\r\n getDirectionIsRTL,\r\n each,\r\n getTrasformTranslateValue,\r\n isBoolean,\r\n parent,\r\n push,\r\n removeClass,\r\n removeElements,\r\n runEachAndClear,\r\n scrollT,\r\n bind,\r\n getElmentScroll,\r\n inArray,\r\n strWidth,\r\n strHeight,\r\n concat,\r\n assignDeep,\r\n ratioToCssPercent,\r\n numberToCssPx,\r\n setStyles,\r\n createOrKeepArray,\r\n getRawScrollBounds,\r\n getRawScrollRatio,\r\n getBoundingClientRect,\r\n capNumber,\r\n} from '~/support';\r\nimport {\r\n classNameScrollbar,\r\n classNameScrollbarHorizontal,\r\n classNameScrollbarVertical,\r\n classNameScrollbarTrack,\r\n classNameScrollbarHandle,\r\n} from '~/classnames';\r\nimport { getEnvironment } from '~/environment';\r\nimport { dynamicInitializationElement as generalDynamicInitializationElement } from '~/initialization';\r\nimport type { RTLScrollBehavior } from '~/support';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetElement,\r\n InitializationTargetObject,\r\n} from '~/initialization';\r\nimport type { StructureSetupElementsObj } from '../structureSetup/structureSetup.elements';\r\nimport type { ScrollbarsSetupEvents } from './scrollbarsSetup.events';\r\nimport type { StyleObject } from '~/typings';\r\nimport type { StructureSetupState } from '../structureSetup';\r\n\r\nexport interface ScrollbarStructure {\r\n _scrollbar: HTMLElement;\r\n _track: HTMLElement;\r\n _handle: HTMLElement;\r\n}\r\n\r\nexport interface ScrollbarsSetupElement {\r\n _scrollTimeline: AnimationTimeline | undefined;\r\n _scrollbarStructures: ScrollbarStructure[];\r\n _clone: () => ScrollbarStructure;\r\n _style: (\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => void;\r\n}\r\n\r\nexport interface ScrollbarsSetupElementsObj {\r\n _scrollbarsAddRemoveClass: (\r\n classNames: string | false | null | undefined,\r\n add?: boolean,\r\n isHorizontal?: boolean\r\n ) => void;\r\n _refreshScrollbarsHandleLength: () => void;\r\n _refreshScrollbarsHandleOffset: () => void;\r\n _refreshScrollbarsScrollbarOffset: () => void;\r\n _horizontal: ScrollbarsSetupElement;\r\n _vertical: ScrollbarsSetupElement;\r\n}\r\n\r\nexport type ScrollbarsSetupElements = [\r\n elements: ScrollbarsSetupElementsObj,\r\n appendElements: () => () => void\r\n];\r\n\r\ntype PotentialAnimation = Animation | false | null | undefined;\r\n\r\nexport const createScrollbarsSetupElements = (\r\n target: InitializationTarget,\r\n structureSetupElements: StructureSetupElementsObj,\r\n structureSetupState: StructureSetupState,\r\n scrollbarsSetupEvents: ScrollbarsSetupEvents\r\n): ScrollbarsSetupElements => {\r\n const { _getDefaultInitialization, _rtlScrollBehavior } = getEnvironment();\r\n const { scrollbars: defaultInitScrollbars } = _getDefaultInitialization();\r\n const { slot: defaultInitScrollbarsSlot } = defaultInitScrollbars;\r\n const {\r\n _target,\r\n _host,\r\n _viewport,\r\n _targetIsElm,\r\n _scrollOffsetElement,\r\n _isBody,\r\n _viewportIsTarget,\r\n } = structureSetupElements;\r\n const { scrollbars: scrollbarsInit } = (_targetIsElm ? {} : target) as InitializationTargetObject;\r\n const { slot: initScrollbarsSlot } = scrollbarsInit || {};\r\n const elementAnimations = new Map();\r\n const initScrollTimeline = (axis: 'x' | 'y') =>\r\n scrollT &&\r\n new scrollT({\r\n source: _scrollOffsetElement,\r\n axis,\r\n });\r\n const scrollTimelineX = initScrollTimeline('x');\r\n const scrollTimelineY = initScrollTimeline('y');\r\n const evaluatedScrollbarSlot = generalDynamicInitializationElement<\r\n [InitializationTargetElement, HTMLElement, HTMLElement]\r\n >(\r\n [_target, _host, _viewport],\r\n () => (_viewportIsTarget && _isBody ? _target : _host),\r\n defaultInitScrollbarsSlot,\r\n initScrollbarsSlot\r\n );\r\n\r\n /**\r\n * Gets the scrollbar handle length ratio.\r\n * @param isHorizontal Whether the axis is horizontal.\r\n * @param scrollbarStructure The scrollbar structure. Only passed when the length ratio is calculated for the offset ratio (respects handle min. & max. size via. css)\r\n * @returns The scrollbar handle length ratio.\r\n */\r\n const getScrollbarHandleLengthRatio = (\r\n isHorizontal?: boolean,\r\n scrollbarStructure?: ScrollbarStructure\r\n ) => {\r\n if (scrollbarStructure) {\r\n const axis = isHorizontal ? strWidth : strHeight;\r\n const { _track, _handle } = scrollbarStructure;\r\n\r\n const handleSize = getBoundingClientRect(_handle)[axis];\r\n const trackSize = getBoundingClientRect(_track)[axis];\r\n\r\n return capNumber(0, 1, handleSize / trackSize || 0);\r\n }\r\n\r\n const axis = isHorizontal ? 'x' : 'y';\r\n const { _overflowAmount, _overflowEdge } = structureSetupState;\r\n\r\n const viewportSize = _overflowEdge[axis];\r\n const overflowAmount = _overflowAmount[axis];\r\n\r\n return capNumber(0, 1, viewportSize / (viewportSize + overflowAmount) || 0);\r\n };\r\n\r\n /**\r\n * Gets the scrollbar handle offset ratio.\r\n * @param structureSetupState The structure setup state.\r\n * @param scrollbarStructure The scrollbar structure.\r\n * @param scrollPercent The scroll percent 0..1.\r\n * @param isHorizontal Whether the axis is horizontal.\r\n * @returns The scrollbar handle offset ratio.\r\n */\r\n const getScrollbarHandleOffsetRatio = (\r\n scrollbarStructure: ScrollbarStructure,\r\n scrollPercent: number,\r\n isHorizontal?: boolean,\r\n rtlScrollBehavior?: RTLScrollBehavior\r\n ) => {\r\n const lengthRatio = getScrollbarHandleLengthRatio(isHorizontal, scrollbarStructure);\r\n\r\n return (\r\n (1 / lengthRatio) *\r\n (1 - lengthRatio) *\r\n (rtlScrollBehavior ? 1 - scrollPercent : scrollPercent) || 0\r\n );\r\n };\r\n\r\n /**\r\n * Adds additional directional keyframes to the passed keyframes.\r\n * @param keyframes The keyframes.\r\n * @param directionRTL Whether the direction is RTL.\r\n * @returns The passed keyframes with additional directional keyframes.\r\n */\r\n const addDirectionRTLKeyframes = (\r\n keyframes: Keyframe[] | PropertyIndexedKeyframes | null,\r\n directionRTL?: boolean | RTLScrollBehavior\r\n ) =>\r\n assignDeep(\r\n keyframes,\r\n directionRTL\r\n ? {\r\n clear: ['left'], // dummy keyframe for direction rtl animation because of chrome bug\r\n }\r\n : {}\r\n );\r\n\r\n /**\r\n * Cancels the animations of the passed elements or of all elements if no elements are passed.\r\n * @param elements The elements of which the animation shall be canceled.\r\n */\r\n const cancelElementAnimations = (elements?: HTMLElement | HTMLElement[]) => {\r\n elementAnimations.forEach((currAnimations, element) => {\r\n const doCancel = elements ? inArray(createOrKeepArray(elements), element) : true;\r\n if (doCancel) {\r\n each(currAnimations || [], (animation) => {\r\n animation && animation.cancel();\r\n });\r\n elementAnimations.delete(element);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Sets of overwrites the animation of the passed element.\r\n * @param element The element of which the animation shall be set.\r\n * @param timeline The animation timeline of the animation.\r\n * @param keyframes The keyframes of the animation.\r\n * @param composite The composite information of the animation.\r\n */\r\n const setElementAnimation = (\r\n element: HTMLElement,\r\n timeline: AnimationTimeline,\r\n keyframes: Keyframe[] | PropertyIndexedKeyframes | null,\r\n composite?: CompositeOperation\r\n ) => {\r\n const activeAnimations = elementAnimations.get(element) || [];\r\n const activeAnimation = activeAnimations.find(\r\n (animation) => animation && animation.timeline === timeline\r\n );\r\n\r\n if (activeAnimation) {\r\n activeAnimation.effect = new KeyframeEffect(element, keyframes, { composite });\r\n } else {\r\n elementAnimations.set(\r\n element,\r\n concat(activeAnimations, [\r\n element.animate(keyframes, {\r\n timeline,\r\n composite,\r\n }),\r\n ])\r\n );\r\n }\r\n };\r\n\r\n const scrollbarStructureAddRemoveClass = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n classNames: string | false | null | undefined,\r\n add?: boolean\r\n ) => {\r\n const action = add ? addClass : removeClass;\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n action(scrollbarStructure._scrollbar, classNames);\r\n });\r\n };\r\n const scrollbarStyle = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n elmStyle: (\r\n scrollbarStructure: ScrollbarStructure\r\n ) => [HTMLElement | false | null | undefined, StyleObject]\r\n ) => {\r\n each(scrollbarStructures, (scrollbarStructure) => {\r\n const [elm, styles] = elmStyle(scrollbarStructure);\r\n setStyles(elm, styles);\r\n });\r\n };\r\n const scrollbarStructureRefreshHandleLength = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n isHorizontal?: boolean\r\n ) => {\r\n scrollbarStyle(scrollbarStructures, (structure) => {\r\n const { _handle } = structure;\r\n return [\r\n _handle,\r\n {\r\n [isHorizontal ? strWidth : strHeight]: ratioToCssPercent(\r\n getScrollbarHandleLengthRatio(isHorizontal)\r\n ),\r\n },\r\n ];\r\n });\r\n };\r\n const scrollbarStructureRefreshHandleOffset = (\r\n scrollbarStructures: ScrollbarStructure[],\r\n isHorizontal?: boolean\r\n ) => {\r\n const { _overflowAmount } = structureSetupState;\r\n const overflowAmount = isHorizontal ? _overflowAmount.x : _overflowAmount.y;\r\n const getTransformValue = (\r\n structure: ScrollbarStructure,\r\n rawScrollPosition: number,\r\n rtlScrollBehavior: RTLScrollBehavior\r\n ) =>\r\n getTrasformTranslateValue(\r\n ratioToCssPercent(\r\n getScrollbarHandleOffsetRatio(\r\n structure,\r\n getRawScrollRatio(rawScrollPosition, overflowAmount, rtlScrollBehavior),\r\n isHorizontal,\r\n rtlScrollBehavior\r\n )\r\n ),\r\n isHorizontal\r\n );\r\n if (scrollTimelineX && scrollTimelineY) {\r\n each(scrollbarStructures, (structure: ScrollbarStructure) => {\r\n const { _scrollbar, _handle } = structure;\r\n const rtlScrollBehavior =\r\n isHorizontal && getDirectionIsRTL(_scrollbar) && _rtlScrollBehavior;\r\n\r\n setElementAnimation(\r\n _handle,\r\n isHorizontal ? scrollTimelineX : scrollTimelineY,\r\n addDirectionRTLKeyframes(\r\n {\r\n transform: getRawScrollBounds(overflowAmount, rtlScrollBehavior).map((bound) =>\r\n getTransformValue(structure, bound, rtlScrollBehavior)\r\n ),\r\n },\r\n rtlScrollBehavior\r\n )\r\n );\r\n });\r\n } else {\r\n const scroll = getElmentScroll(_scrollOffsetElement);\r\n scrollbarStyle(scrollbarStructures, (structure) => {\r\n const { _handle, _scrollbar } = structure;\r\n return [\r\n _handle,\r\n {\r\n transform: getTransformValue(\r\n structure,\r\n isHorizontal ? scroll.x : scroll.y,\r\n isHorizontal && getDirectionIsRTL(_scrollbar) && _rtlScrollBehavior\r\n ),\r\n },\r\n ];\r\n });\r\n }\r\n };\r\n const doRefreshScrollbarOffset = (scrollbar: HTMLElement) =>\r\n _viewportIsTarget && !_isBody && parent(scrollbar) === _viewport;\r\n\r\n const destroyFns: (() => void)[] = [];\r\n const horizontalScrollbars: ScrollbarStructure[] = [];\r\n const verticalScrollbars: ScrollbarStructure[] = [];\r\n\r\n const scrollbarsAddRemoveClass = (\r\n className: string | false | null | undefined,\r\n add?: boolean,\r\n onlyHorizontal?: boolean\r\n ) => {\r\n const singleAxis = isBoolean(onlyHorizontal);\r\n const runHorizontal = singleAxis ? onlyHorizontal : true;\r\n const runVertical = singleAxis ? !onlyHorizontal : true;\r\n runHorizontal && scrollbarStructureAddRemoveClass(horizontalScrollbars, className, add);\r\n runVertical && scrollbarStructureAddRemoveClass(verticalScrollbars, className, add);\r\n };\r\n const refreshScrollbarsHandleLength = () => {\r\n scrollbarStructureRefreshHandleLength(horizontalScrollbars, true);\r\n scrollbarStructureRefreshHandleLength(verticalScrollbars);\r\n };\r\n const refreshScrollbarsHandleOffset = () => {\r\n scrollbarStructureRefreshHandleOffset(horizontalScrollbars, true);\r\n scrollbarStructureRefreshHandleOffset(verticalScrollbars);\r\n };\r\n const refreshScrollbarsScrollbarOffset = () => {\r\n if (_viewportIsTarget) {\r\n const { _overflowAmount } = structureSetupState;\r\n const cushion = 0.5; // otherwise it sometimes happens that scrolling to 100% will cause the scrollbars to disappear\r\n if (scrollTimelineX && scrollTimelineY) {\r\n each(concat(verticalScrollbars, horizontalScrollbars), ({ _scrollbar }) => {\r\n if (doRefreshScrollbarOffset(_scrollbar)) {\r\n const setScrollbarElementAnimation = (\r\n timeline: AnimationTimeline,\r\n overflowAmount: number,\r\n isHorizontal?: boolean\r\n ) => {\r\n const rtlScrollBehavior =\r\n isHorizontal && getDirectionIsRTL(_scrollbar) && _rtlScrollBehavior;\r\n setElementAnimation(\r\n _scrollbar,\r\n timeline,\r\n addDirectionRTLKeyframes(\r\n {\r\n transform: getRawScrollBounds(overflowAmount - cushion, rtlScrollBehavior).map(\r\n (bound) => getTrasformTranslateValue(numberToCssPx(bound), isHorizontal)\r\n ),\r\n },\r\n rtlScrollBehavior\r\n ),\r\n 'add'\r\n );\r\n };\r\n\r\n setScrollbarElementAnimation(scrollTimelineX, _overflowAmount.x, true);\r\n setScrollbarElementAnimation(scrollTimelineY, _overflowAmount.y);\r\n } else {\r\n cancelElementAnimations(_scrollbar);\r\n }\r\n });\r\n } else {\r\n const scroll = getElmentScroll(_scrollOffsetElement);\r\n const styleScrollbarPosition = (structure: ScrollbarStructure) => {\r\n const { _scrollbar } = structure;\r\n const elm = doRefreshScrollbarOffset(_scrollbar) && _scrollbar;\r\n const getTranslateValue = (\r\n axisScroll: number,\r\n axisOverflowAmount: number,\r\n rtlScrollBehavior?: RTLScrollBehavior\r\n ) => {\r\n const percent = getRawScrollRatio(axisScroll, axisOverflowAmount, rtlScrollBehavior);\r\n const px = axisOverflowAmount * percent;\r\n return numberToCssPx(rtlScrollBehavior ? -px : px);\r\n };\r\n\r\n return [\r\n elm,\r\n {\r\n transform: elm\r\n ? getTrasformTranslateValue({\r\n x: getTranslateValue(\r\n scroll.x,\r\n _overflowAmount.x,\r\n getDirectionIsRTL(_scrollbar) && _rtlScrollBehavior\r\n ),\r\n y: getTranslateValue(scroll.y, _overflowAmount.y),\r\n })\r\n : '',\r\n },\r\n ] as [HTMLElement | false, StyleObject];\r\n };\r\n scrollbarStyle(horizontalScrollbars, styleScrollbarPosition);\r\n scrollbarStyle(verticalScrollbars, styleScrollbarPosition);\r\n }\r\n }\r\n };\r\n const generateScrollbarDOM = (isHorizontal?: boolean): ScrollbarStructure => {\r\n const scrollbarClassName = isHorizontal\r\n ? classNameScrollbarHorizontal\r\n : classNameScrollbarVertical;\r\n const scrollbar = createDiv(`${classNameScrollbar} ${scrollbarClassName}`);\r\n const track = createDiv(classNameScrollbarTrack);\r\n const handle = createDiv(classNameScrollbarHandle);\r\n const result = {\r\n _scrollbar: scrollbar,\r\n _track: track,\r\n _handle: handle,\r\n };\r\n\r\n push(isHorizontal ? horizontalScrollbars : verticalScrollbars, result);\r\n push(destroyFns, [\r\n appendChildren(scrollbar, track),\r\n appendChildren(track, handle),\r\n bind(removeElements, scrollbar),\r\n cancelElementAnimations,\r\n scrollbarsSetupEvents(\r\n result,\r\n scrollbarsAddRemoveClass,\r\n scrollbarStructureRefreshHandleOffset,\r\n isHorizontal\r\n ),\r\n ]);\r\n\r\n return result;\r\n };\r\n const generateHorizontalScrollbarStructure = bind(generateScrollbarDOM, true);\r\n const generateVerticalScrollbarStructure = bind(generateScrollbarDOM, false);\r\n const appendElements = () => {\r\n appendChildren(evaluatedScrollbarSlot, horizontalScrollbars[0]._scrollbar);\r\n appendChildren(evaluatedScrollbarSlot, verticalScrollbars[0]._scrollbar);\r\n\r\n return bind(runEachAndClear, destroyFns);\r\n };\r\n\r\n generateHorizontalScrollbarStructure();\r\n generateVerticalScrollbarStructure();\r\n\r\n return [\r\n {\r\n _refreshScrollbarsHandleLength: refreshScrollbarsHandleLength,\r\n _refreshScrollbarsHandleOffset: refreshScrollbarsHandleOffset,\r\n _refreshScrollbarsScrollbarOffset: refreshScrollbarsScrollbarOffset,\r\n _scrollbarsAddRemoveClass: scrollbarsAddRemoveClass,\r\n _horizontal: {\r\n _scrollTimeline: scrollTimelineX,\r\n _scrollbarStructures: horizontalScrollbars,\r\n _clone: generateHorizontalScrollbarStructure,\r\n _style: bind(scrollbarStyle, horizontalScrollbars),\r\n },\r\n _vertical: {\r\n _scrollTimeline: scrollTimelineY,\r\n _scrollbarStructures: verticalScrollbars,\r\n _clone: generateVerticalScrollbarStructure,\r\n _style: bind(scrollbarStyle, verticalScrollbars),\r\n },\r\n },\r\n appendElements,\r\n ];\r\n};\r\n","import {\r\n getBoundingClientRect,\r\n offsetSize,\r\n addEventListener,\r\n preventDefault,\r\n runEachAndClear,\r\n stopPropagation,\r\n selfClearTimeout,\r\n parent,\r\n closest,\r\n push,\r\n bind,\r\n mathRound,\r\n strWidth,\r\n strHeight,\r\n getElmentScroll,\r\n scrollElementTo,\r\n addAttrClass,\r\n getFocusedElement,\r\n setT,\r\n hasAttr,\r\n} from '~/support';\r\nimport { clickScrollPluginModuleName, getStaticPluginModuleInstance } from '~/plugins';\r\nimport {\r\n classNameScrollbarHandle,\r\n classNameScrollbarInteraction,\r\n classNameScrollbarWheel,\r\n dataAttributeHost,\r\n dataAttributeViewport,\r\n dataValueHostScrollbarPressed,\r\n} from '~/classnames';\r\nimport type { ClickScrollPlugin } from '~/plugins';\r\nimport type { ReadonlyOptions } from '~/options';\r\nimport type { StructureSetupState } from '~/setups';\r\nimport type { ScrollbarsSetupElementsObj, ScrollbarStructure } from './scrollbarsSetup.elements';\r\nimport type { StructureSetupElementsObj } from '../structureSetup/structureSetup.elements';\r\n\r\nexport type ScrollbarsSetupEvents = (\r\n scrollbarStructure: ScrollbarStructure,\r\n scrollbarsAddRemoveClass: ScrollbarsSetupElementsObj['_scrollbarsAddRemoveClass'],\r\n refreshScrollbarStructuresHandleOffset: (\r\n scrollbarStructure: ScrollbarStructure[],\r\n isHorizontal?: boolean\r\n ) => void,\r\n isHorizontal?: boolean\r\n) => () => void;\r\n\r\nexport const createScrollbarsSetupEvents = (\r\n options: ReadonlyOptions,\r\n structureSetupElements: StructureSetupElementsObj,\r\n structureSetupState: StructureSetupState,\r\n scrollbarHandlePointerInteraction: (event: PointerEvent) => void\r\n): ScrollbarsSetupEvents => {\r\n const { _host, _viewport, _viewportIsTarget, _scrollOffsetElement, _documentElm } =\r\n structureSetupElements;\r\n\r\n return (\r\n scrollbarStructure,\r\n scrollbarsAddRemoveClass,\r\n refreshScrollbarStructuresHandleOffset,\r\n isHorizontal\r\n ) => {\r\n const { _scrollbar, _track, _handle } = scrollbarStructure;\r\n const [wheelTimeout, clearWheelTimeout] = selfClearTimeout(333);\r\n const [requestHandleTransitionAnimationFrame, cancelHandleTransitionTimeout] =\r\n selfClearTimeout();\r\n const refreshHandleOffsetTransition = bind(\r\n refreshScrollbarStructuresHandleOffset,\r\n [scrollbarStructure],\r\n isHorizontal\r\n );\r\n const scrollByFn = !!_scrollOffsetElement.scrollBy;\r\n\r\n const clientXYKey = `client${isHorizontal ? 'X' : 'Y'}` as 'clientX' | 'clientY';\r\n const widthHeightKey = isHorizontal ? strWidth : strHeight;\r\n const leftTopKey = isHorizontal ? 'left' : 'top';\r\n const whKey = isHorizontal ? 'w' : 'h';\r\n const xyKey = isHorizontal ? 'x' : 'y';\r\n\r\n const isAffectingTransition = (event: TransitionEvent) =>\r\n event.propertyName.indexOf(widthHeightKey) > -1;\r\n\r\n const createInteractiveScrollEvents = () => {\r\n const releasePointerCaptureEvents = 'pointerup pointerleave pointercancel lostpointercapture';\r\n\r\n const createRelativeHandleMove =\r\n (mouseDownScroll: number, invertedScale: number) => (deltaMovement: number) => {\r\n const { _overflowAmount } = structureSetupState;\r\n const handleTrackDiff = offsetSize(_track)[whKey] - offsetSize(_handle)[whKey];\r\n const scrollDeltaPercent = (invertedScale * deltaMovement) / handleTrackDiff;\r\n const scrollDelta = scrollDeltaPercent * _overflowAmount[xyKey];\r\n\r\n scrollElementTo(_scrollOffsetElement, {\r\n [xyKey]: mouseDownScroll + scrollDelta,\r\n });\r\n };\r\n\r\n return addEventListener(_track, 'pointerdown', (pointerDownEvent: PointerEvent) => {\r\n const isDragScroll =\r\n closest(pointerDownEvent.target as Node, `.${classNameScrollbarHandle}`) === _handle;\r\n const pointerCaptureElement = isDragScroll ? _handle : _track;\r\n\r\n const scrollbarOptions = options.scrollbars;\r\n const { button, isPrimary, pointerType } = pointerDownEvent;\r\n const { pointers } = scrollbarOptions;\r\n\r\n const continuePointerDown =\r\n button === 0 &&\r\n isPrimary &&\r\n scrollbarOptions[isDragScroll ? 'dragScroll' : 'clickScroll'] &&\r\n (pointers || []).includes(pointerType);\r\n\r\n if (continuePointerDown) {\r\n const instantClickScroll = !isDragScroll && pointerDownEvent.shiftKey;\r\n const getHandleRect = bind(getBoundingClientRect, _handle);\r\n const getTrackRect = bind(getBoundingClientRect, _track);\r\n const getHandleOffset = (handleRect?: DOMRect, trackRect?: DOMRect) =>\r\n (handleRect || getHandleRect())[leftTopKey] - (trackRect || getTrackRect())[leftTopKey];\r\n const axisScale =\r\n mathRound(getBoundingClientRect(_scrollOffsetElement)[widthHeightKey]) /\r\n offsetSize(_scrollOffsetElement)[whKey] || 1;\r\n const moveHandleRelative = createRelativeHandleMove(\r\n getElmentScroll(_scrollOffsetElement)[xyKey] || 0,\r\n 1 / axisScale\r\n );\r\n const pointerDownOffset = pointerDownEvent[clientXYKey];\r\n const handleRect = getHandleRect();\r\n const trackRect = getTrackRect();\r\n const handleLength = handleRect[widthHeightKey];\r\n const handleCenter = getHandleOffset(handleRect, trackRect) + handleLength / 2;\r\n const relativeTrackPointerOffset = pointerDownOffset - trackRect[leftTopKey];\r\n const startOffset = isDragScroll ? 0 : relativeTrackPointerOffset - handleCenter;\r\n const releasePointerCapture = (pointerUpEvent: PointerEvent) => {\r\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\r\n runEachAndClear(offFns);\r\n pointerCaptureElement.releasePointerCapture(pointerUpEvent.pointerId);\r\n };\r\n const removeAttrClass = addAttrClass(\r\n _host,\r\n dataAttributeHost,\r\n dataValueHostScrollbarPressed\r\n );\r\n\r\n const offFns = [\r\n removeAttrClass,\r\n addEventListener(_documentElm, releasePointerCaptureEvents, releasePointerCapture),\r\n addEventListener(_documentElm, 'selectstart', (event: Event) => preventDefault(event), {\r\n _passive: false,\r\n }),\r\n addEventListener(_track, releasePointerCaptureEvents, releasePointerCapture),\r\n addEventListener(_track, 'pointermove', (pointerMoveEvent: PointerEvent) => {\r\n const relativeMovement = pointerMoveEvent[clientXYKey] - pointerDownOffset;\r\n\r\n if (isDragScroll || instantClickScroll) {\r\n moveHandleRelative(startOffset + relativeMovement);\r\n }\r\n }),\r\n ];\r\n\r\n pointerCaptureElement.setPointerCapture(pointerDownEvent.pointerId);\r\n\r\n if (instantClickScroll) {\r\n moveHandleRelative(startOffset);\r\n } else if (!isDragScroll) {\r\n const animateClickScroll = getStaticPluginModuleInstance(\r\n clickScrollPluginModuleName\r\n );\r\n\r\n animateClickScroll &&\r\n push(\r\n offFns,\r\n animateClickScroll(\r\n moveHandleRelative,\r\n getHandleOffset,\r\n startOffset,\r\n handleLength,\r\n relativeTrackPointerOffset\r\n )\r\n );\r\n }\r\n }\r\n });\r\n };\r\n\r\n let wheelScrollBy = true;\r\n\r\n return bind(runEachAndClear, [\r\n addEventListener(_handle, 'pointermove pointerleave', scrollbarHandlePointerInteraction),\r\n addEventListener(_scrollbar, 'pointerenter', () => {\r\n scrollbarsAddRemoveClass(classNameScrollbarInteraction, true);\r\n }),\r\n addEventListener(_scrollbar, 'pointerleave pointercancel', () => {\r\n scrollbarsAddRemoveClass(classNameScrollbarInteraction, false);\r\n }),\r\n // focus viewport when clicking on a scrollbar\r\n !_viewportIsTarget &&\r\n addEventListener(_scrollbar, 'mousedown', () => {\r\n const focusedElement = getFocusedElement();\r\n if (\r\n hasAttr(focusedElement, dataAttributeViewport) ||\r\n hasAttr(focusedElement, dataAttributeHost) ||\r\n focusedElement === document.body\r\n ) {\r\n setT(() => {\r\n _viewport.focus({ preventScroll: true });\r\n }, 25);\r\n }\r\n }),\r\n // propagate wheel events to viewport when mouse is over scrollbar\r\n addEventListener(\r\n _scrollbar,\r\n 'wheel',\r\n (wheelEvent: WheelEvent) => {\r\n const { deltaX, deltaY, deltaMode } = wheelEvent;\r\n\r\n // the first wheel event is swallowed, simulate scroll to compensate for it\r\n if (scrollByFn && wheelScrollBy && deltaMode === 0 && parent(_scrollbar) === _host) {\r\n _scrollOffsetElement.scrollBy({\r\n left: deltaX,\r\n top: deltaY,\r\n behavior: 'smooth',\r\n });\r\n }\r\n\r\n wheelScrollBy = false;\r\n scrollbarsAddRemoveClass(classNameScrollbarWheel, true);\r\n wheelTimeout(() => {\r\n wheelScrollBy = true;\r\n scrollbarsAddRemoveClass(classNameScrollbarWheel);\r\n });\r\n\r\n preventDefault(wheelEvent);\r\n },\r\n { _passive: false, _capture: true }\r\n ),\r\n // when the handle has a size transition, update the handle offset each frame for the time of the transition\r\n addEventListener(_handle, 'transitionstart', (event: TransitionEvent) => {\r\n if (isAffectingTransition(event)) {\r\n const animateHandleOffset = () => {\r\n refreshHandleOffsetTransition();\r\n requestHandleTransitionAnimationFrame(animateHandleOffset);\r\n };\r\n animateHandleOffset();\r\n }\r\n }),\r\n addEventListener(_handle, 'transitionend transitioncancel', (event: TransitionEvent) => {\r\n if (isAffectingTransition(event)) {\r\n cancelHandleTransitionTimeout();\r\n refreshHandleOffsetTransition();\r\n }\r\n }),\r\n // rootClickStopPropagationEvent\r\n addEventListener(\r\n _scrollbar,\r\n 'mousedown',\r\n bind(addEventListener, _documentElm, 'click', stopPropagation, {\r\n _once: true,\r\n _capture: true,\r\n }),\r\n { _capture: true }\r\n ),\r\n createInteractiveScrollEvents(),\r\n clearWheelTimeout,\r\n cancelHandleTransitionTimeout,\r\n ]);\r\n };\r\n};\r\n","import {\r\n isHTMLElement,\r\n appendChildren,\r\n createDiv,\r\n is,\r\n contents,\r\n insertAfter,\r\n parent,\r\n removeElements,\r\n push,\r\n runEachAndClear,\r\n removeAttrs,\r\n hasAttrClass,\r\n addEventListener,\r\n bind,\r\n inArray,\r\n addAttrClass,\r\n addRemoveAttrClass,\r\n setAttrs,\r\n getAttr,\r\n noop,\r\n stopPropagation,\r\n isBodyElement,\r\n getFocusedElement,\r\n wnd,\r\n} from '~/support';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeInitialize,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataAttributeViewport,\r\n dataValueViewportScrollbarHidden,\r\n dataAttributePadding,\r\n dataAttributeContent,\r\n dataValueHostHtmlBody,\r\n} from '~/classnames';\r\nimport { getEnvironment } from '~/environment';\r\nimport {\r\n staticInitializationElement as generalStaticInitializationElement,\r\n dynamicInitializationElement as generalDynamicInitializationElement,\r\n} from '~/initialization';\r\nimport type {\r\n InitializationTarget,\r\n InitializationTargetElement,\r\n InitializationTargetObject,\r\n} from '~/initialization';\r\n\r\nexport type StructureSetupElements = [\r\n elements: StructureSetupElementsObj,\r\n appendElements: () => () => void,\r\n canceled: () => void\r\n];\r\n\r\nexport interface StructureSetupElementsObj {\r\n _target: InitializationTargetElement;\r\n _host: HTMLElement;\r\n _viewport: HTMLElement;\r\n _padding: HTMLElement | false;\r\n _content: HTMLElement | false;\r\n _scrollOffsetElement: HTMLElement;\r\n _scrollEventElement: HTMLElement | Document;\r\n _originalScrollOffsetElement: HTMLElement;\r\n // ctx ----\r\n _isTextarea: boolean;\r\n _isBody: boolean;\r\n _documentElm: Document;\r\n _targetIsElm: boolean;\r\n _viewportIsTarget: boolean;\r\n _windowElm: () => Window;\r\n _viewportHasClass: (viewportAttributeClassName: string) => boolean;\r\n _viewportAddRemoveClass: (viewportAttributeClassName: string, add?: boolean) => void;\r\n}\r\n\r\nexport const createStructureSetupElements = (\r\n target: InitializationTarget\r\n): StructureSetupElements => {\r\n const env = getEnvironment();\r\n const { _getDefaultInitialization, _nativeScrollbarsHiding } = env;\r\n const { elements: defaultInitElements } = _getDefaultInitialization();\r\n const {\r\n host: defaultHostInitialization,\r\n padding: defaultPaddingInitialization,\r\n viewport: defaultViewportInitialization,\r\n content: defaultContentInitialization,\r\n } = defaultInitElements;\r\n const targetIsElm = isHTMLElement(target);\r\n const targetStructureInitialization = (targetIsElm ? {} : target) as InitializationTargetObject;\r\n const { elements: initElements } = targetStructureInitialization;\r\n const {\r\n host: hostInitialization,\r\n padding: paddingInitialization,\r\n viewport: viewportInitialization,\r\n content: contentInitialization,\r\n } = initElements || {};\r\n\r\n const targetElement = targetIsElm ? target : targetStructureInitialization.target;\r\n const isBody = isBodyElement(targetElement);\r\n const isTextarea = is(targetElement, 'textarea');\r\n const ownerDocument = targetElement.ownerDocument;\r\n const docElement = ownerDocument.documentElement;\r\n const getDocumentWindow = () => ownerDocument.defaultView || wnd;\r\n const focusElm = (customActiveElm: Element | null) => {\r\n if (customActiveElm && (customActiveElm as HTMLElement).focus) {\r\n (customActiveElm as HTMLElement).focus({ preventScroll: true });\r\n }\r\n };\r\n const staticInitializationElement = bind(generalStaticInitializationElement, [targetElement]);\r\n const dynamicInitializationElement = bind(generalDynamicInitializationElement, [targetElement]);\r\n const createNewDiv = bind(createDiv, '');\r\n const generateViewportElement = bind(\r\n staticInitializationElement,\r\n createNewDiv,\r\n defaultViewportInitialization\r\n );\r\n const generateContentElement = bind(\r\n dynamicInitializationElement,\r\n createNewDiv,\r\n defaultContentInitialization\r\n );\r\n const possibleViewportElement = generateViewportElement(viewportInitialization);\r\n const viewportIsTarget = possibleViewportElement === targetElement;\r\n const viewportIsTargetBody = viewportIsTarget && isBody;\r\n const possibleContentElement = !viewportIsTarget && generateContentElement(contentInitialization);\r\n // edge case if passed viewportElement is contentElement:\r\n // viewport element has higher priority and content element will not be generated\r\n // will act the same way as initialization: `{ elements: { viewport, content: false } }`\r\n const viewportIsContent = !viewportIsTarget && possibleViewportElement === possibleContentElement;\r\n const viewportElement = viewportIsTargetBody ? docElement : possibleViewportElement;\r\n const nonBodyHostElement = isTextarea\r\n ? staticInitializationElement(createNewDiv, defaultHostInitialization, hostInitialization)\r\n : (targetElement as HTMLElement);\r\n const hostElement = viewportIsTargetBody ? viewportElement : nonBodyHostElement;\r\n const paddingElement =\r\n !viewportIsTarget &&\r\n dynamicInitializationElement(createNewDiv, defaultPaddingInitialization, paddingInitialization);\r\n const contentElement = !viewportIsContent && possibleContentElement;\r\n const generatedElements = [contentElement, viewportElement, paddingElement, hostElement].map(\r\n (elm) => isHTMLElement(elm) && !parent(elm) && elm\r\n );\r\n const elementIsGenerated = (elm: HTMLElement | false) => elm && inArray(generatedElements, elm);\r\n const originalNonBodyScrollOffsetElement = elementIsGenerated(viewportElement)\r\n ? targetElement\r\n : viewportElement;\r\n\r\n const evaluatedTargetObj: StructureSetupElementsObj = {\r\n _target: targetElement,\r\n _host: hostElement,\r\n _viewport: viewportElement,\r\n _padding: paddingElement,\r\n _content: contentElement,\r\n _scrollOffsetElement: viewportIsTargetBody ? docElement : viewportElement,\r\n _scrollEventElement: viewportIsTargetBody ? ownerDocument : viewportElement,\r\n _originalScrollOffsetElement: isBody ? docElement : originalNonBodyScrollOffsetElement,\r\n _documentElm: ownerDocument,\r\n _isTextarea: isTextarea,\r\n _isBody: isBody,\r\n _targetIsElm: targetIsElm,\r\n _viewportIsTarget: viewportIsTarget,\r\n _windowElm: getDocumentWindow,\r\n _viewportHasClass: (viewportAttributeClassName: string) =>\r\n hasAttrClass(\r\n viewportElement,\r\n viewportIsTarget ? dataAttributeHost : dataAttributeViewport,\r\n viewportAttributeClassName\r\n ),\r\n _viewportAddRemoveClass: (viewportAttributeClassName: string, add?: boolean) =>\r\n addRemoveAttrClass(\r\n viewportElement,\r\n viewportIsTarget ? dataAttributeHost : dataAttributeViewport,\r\n viewportAttributeClassName,\r\n add\r\n ),\r\n };\r\n const { _target, _host, _padding, _viewport, _content } = evaluatedTargetObj;\r\n const destroyFns: (() => any)[] = [\r\n () => {\r\n // always remove dataAttributeHost & dataAttributeInitialize from host and from element if target is body\r\n removeAttrs(_host, [dataAttributeHost, dataAttributeInitialize]);\r\n removeAttrs(_target, dataAttributeInitialize);\r\n if (isBody) {\r\n removeAttrs(docElement, [dataAttributeInitialize, dataAttributeHost]);\r\n }\r\n },\r\n ];\r\n const isTextareaHostGenerated = isTextarea && elementIsGenerated(_host);\r\n let targetContents = isTextarea\r\n ? _target\r\n : contents(\r\n [_content, _viewport, _padding, _host, _target].find(\r\n (elm) => elm && !elementIsGenerated(elm)\r\n )\r\n );\r\n const contentSlot = viewportIsTargetBody ? _target : _content || _viewport;\r\n const destroy = bind(runEachAndClear, destroyFns);\r\n const appendElements = () => {\r\n const docWnd = getDocumentWindow();\r\n const initActiveElm = getFocusedElement();\r\n const unwrap = (elm: HTMLElement | false | null | undefined) => {\r\n appendChildren(parent(elm), contents(elm));\r\n removeElements(elm);\r\n };\r\n // wrapping / unwrapping will cause the focused element to blur, this should prevent those events to surface\r\n const prepareWrapUnwrapFocus = (activeElement?: Element | null) =>\r\n activeElement\r\n ? addEventListener(\r\n activeElement,\r\n 'focusin focusout focus blur',\r\n (event) => {\r\n stopPropagation(event);\r\n event.stopImmediatePropagation();\r\n },\r\n {\r\n _capture: true,\r\n _passive: false,\r\n }\r\n )\r\n : noop;\r\n const tabIndexStr = 'tabindex';\r\n const ogTabindex = getAttr(_viewport, tabIndexStr);\r\n const undoInitWrapUndwrapFocus = prepareWrapUnwrapFocus(initActiveElm);\r\n setAttrs(_host, dataAttributeHost, viewportIsTarget ? 'viewport' : 'host');\r\n setAttrs(_padding, dataAttributePadding, '');\r\n setAttrs(_content, dataAttributeContent, '');\r\n\r\n if (!viewportIsTarget) {\r\n setAttrs(_viewport, dataAttributeViewport, '');\r\n setAttrs(_viewport, tabIndexStr, ogTabindex || '-1');\r\n isBody && addAttrClass(docElement, dataAttributeHost, dataValueHostHtmlBody);\r\n }\r\n\r\n // only insert host for textarea after target if it was generated\r\n if (isTextareaHostGenerated) {\r\n insertAfter(_target, _host);\r\n\r\n push(destroyFns, () => {\r\n insertAfter(_host, _target);\r\n removeElements(_host);\r\n });\r\n }\r\n\r\n appendChildren(contentSlot, targetContents);\r\n appendChildren(_host, _padding);\r\n appendChildren(_padding || _host, !viewportIsTarget && _viewport);\r\n appendChildren(_viewport, _content);\r\n\r\n push(destroyFns, [\r\n undoInitWrapUndwrapFocus,\r\n () => {\r\n const destroyActiveElm = getFocusedElement();\r\n const undoDestroyWrapUndwrapFocus = prepareWrapUnwrapFocus(destroyActiveElm);\r\n removeAttrs(_padding, dataAttributePadding);\r\n removeAttrs(_content, dataAttributeContent);\r\n removeAttrs(_viewport, [\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataAttributeViewport,\r\n ]);\r\n ogTabindex\r\n ? setAttrs(_viewport, tabIndexStr, ogTabindex)\r\n : removeAttrs(_viewport, tabIndexStr);\r\n\r\n elementIsGenerated(_content) && unwrap(_content);\r\n elementIsGenerated(_viewport) && unwrap(_viewport);\r\n elementIsGenerated(_padding) && unwrap(_padding);\r\n focusElm(destroyActiveElm);\r\n undoDestroyWrapUndwrapFocus();\r\n },\r\n ]);\r\n\r\n if (_nativeScrollbarsHiding && !viewportIsTarget) {\r\n addAttrClass(_viewport, dataAttributeViewport, dataValueViewportScrollbarHidden);\r\n push(destroyFns, bind(removeAttrs, _viewport, dataAttributeViewport));\r\n }\r\n\r\n // focus viewport if previously focused element was target, otherwise focus previously focused element\r\n focusElm(\r\n !viewportIsTarget && initActiveElm === targetElement && docWnd.top === docWnd\r\n ? _viewport\r\n : initActiveElm\r\n );\r\n undoInitWrapUndwrapFocus();\r\n\r\n // @ts-ignore\r\n targetContents = 0;\r\n\r\n return destroy;\r\n };\r\n\r\n return [evaluatedTargetObj, appendElements, destroy];\r\n};\r\n","import { setStyles, strHeight } from '~/support';\r\nimport type { CreateStructureUpdateSegment } from '../structureSetup';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the trinsic behavior of the content element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createTrinsicUpdateSegment: CreateStructureUpdateSegment =\r\n ({ _content }) =>\r\n ({ _observersUpdateHints, _observersState, _force }) => {\r\n const { _heightIntrinsicChanged } = _observersUpdateHints || {};\r\n const { _heightIntrinsic } = _observersState;\r\n const heightIntrinsicChanged = _content && (_heightIntrinsicChanged || _force);\r\n\r\n if (heightIntrinsicChanged) {\r\n setStyles(_content, {\r\n [strHeight]: _heightIntrinsic && '100%',\r\n });\r\n }\r\n };\r\n","import {\r\n createCache,\r\n topRightBottomLeft,\r\n equalTRBL,\r\n assignDeep,\r\n bind,\r\n strMarginBottom,\r\n strMarginLeft,\r\n strMarginRight,\r\n strPaddingBottom,\r\n strPaddingLeft,\r\n strPaddingRight,\r\n strPaddingTop,\r\n strWidth,\r\n setStyles,\r\n} from '~/support';\r\nimport { getEnvironment } from '~/environment';\r\nimport type { StyleObject } from '~/typings';\r\nimport type { CreateStructureUpdateSegment } from '../structureSetup';\r\n\r\n/**\r\n * Lifecycle with the responsibility to adjust the padding styling of the padding and viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createPaddingUpdateSegment: CreateStructureUpdateSegment = (\r\n { _host, _padding, _viewport, _viewportIsTarget },\r\n state\r\n) => {\r\n const [updatePaddingCache, currentPaddingCache] = createCache(\r\n {\r\n _equal: equalTRBL,\r\n _initialValue: topRightBottomLeft(),\r\n },\r\n bind(topRightBottomLeft, _host, 'padding', '')\r\n );\r\n\r\n return ({ _checkOption, _observersUpdateHints, _observersState, _force }) => {\r\n let [padding, paddingChanged] = currentPaddingCache(_force);\r\n const { _nativeScrollbarsHiding } = getEnvironment();\r\n const { _sizeChanged, _contentMutation, _directionChanged } = _observersUpdateHints || {};\r\n const { _directionIsRTL } = _observersState;\r\n const [paddingAbsolute, paddingAbsoluteChanged] = _checkOption('paddingAbsolute');\r\n const contentMutation = _force || _contentMutation;\r\n\r\n if (_sizeChanged || paddingChanged || contentMutation) {\r\n [padding, paddingChanged] = updatePaddingCache(_force);\r\n }\r\n\r\n const paddingStyleChanged =\r\n !_viewportIsTarget && (paddingAbsoluteChanged || _directionChanged || paddingChanged);\r\n\r\n if (paddingStyleChanged) {\r\n // if there is no padding element and no scrollbar styling, paddingAbsolute isn't supported\r\n const paddingRelative = !paddingAbsolute || (!_padding && !_nativeScrollbarsHiding);\r\n const paddingHorizontal = padding.r + padding.l;\r\n const paddingVertical = padding.t + padding.b;\r\n\r\n const paddingStyle: StyleObject = {\r\n [strMarginRight]: paddingRelative && !_directionIsRTL ? -paddingHorizontal : 0,\r\n [strMarginBottom]: paddingRelative ? -paddingVertical : 0,\r\n [strMarginLeft]: paddingRelative && _directionIsRTL ? -paddingHorizontal : 0,\r\n top: paddingRelative ? -padding.t : 0,\r\n right: paddingRelative ? (_directionIsRTL ? -padding.r : 'auto') : 0,\r\n left: paddingRelative ? (_directionIsRTL ? 'auto' : -padding.l) : 0,\r\n [strWidth]: paddingRelative && `calc(100% + ${paddingHorizontal}px)`,\r\n };\r\n const viewportStyle: StyleObject = {\r\n [strPaddingTop]: paddingRelative ? padding.t : 0,\r\n [strPaddingRight]: paddingRelative ? padding.r : 0,\r\n [strPaddingBottom]: paddingRelative ? padding.b : 0,\r\n [strPaddingLeft]: paddingRelative ? padding.l : 0,\r\n };\r\n\r\n // if there is no padding element apply the style to the viewport element instead\r\n setStyles(_padding || _viewport, paddingStyle);\r\n setStyles(_viewport, viewportStyle);\r\n\r\n assignDeep(state, {\r\n _padding: padding,\r\n _paddingAbsolute: !paddingRelative,\r\n _viewportPaddingStyle: _padding\r\n ? viewportStyle\r\n : assignDeep({}, paddingStyle, viewportStyle),\r\n });\r\n }\r\n\r\n return {\r\n _paddingStyleChanged: paddingStyleChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n createCache,\r\n scrollSize,\r\n fractionalSize,\r\n equalWH,\r\n clientSize,\r\n equalXY,\r\n assignDeep,\r\n bind,\r\n wnd,\r\n mathMax,\r\n windowSize,\r\n strHidden,\r\n strOverflowX,\r\n strOverflowY,\r\n setStyles,\r\n addRemoveAttrClass,\r\n setAttrs,\r\n} from '~/support';\r\nimport { getEnvironment } from '~/environment';\r\nimport {\r\n dataAttributeHost,\r\n dataAttributeHostOverflowX,\r\n dataAttributeHostOverflowY,\r\n dataValueHostOverflowVisible,\r\n dataValueViewportScrollbarHidden,\r\n dataValueViewportOverflowVisible,\r\n dataAttributeViewport,\r\n dataAttributePadding,\r\n dataValuePaddingOverflowVisible,\r\n} from '~/classnames';\r\nimport { getStaticPluginModuleInstance, scrollbarsHidingPluginName } from '~/plugins';\r\nimport type { WH, XY } from '~/support';\r\nimport type { ScrollbarsHidingPlugin } from '~/plugins/scrollbarsHidingPlugin';\r\nimport type { StyleObject, OverflowStyle } from '~/typings';\r\nimport type { CreateStructureUpdateSegment } from '../structureSetup';\r\nimport type { ViewportOverflowState } from '../structureSetup.utils';\r\nimport {\r\n getShowNativeOverlaidScrollbars,\r\n getViewportOverflowState,\r\n overflowIsVisible,\r\n setViewportOverflowState,\r\n} from '../structureSetup.utils';\r\n\r\n/**\r\n * Lifecycle with the responsibility to set the correct overflow and scrollbar hiding styles of the viewport element.\r\n * @param structureUpdateHub\r\n * @returns\r\n */\r\nexport const createOverflowUpdateSegment: CreateStructureUpdateSegment = (\r\n structureSetupElements,\r\n structureSetupState\r\n) => {\r\n const env = getEnvironment();\r\n const {\r\n _host,\r\n _padding,\r\n _viewport,\r\n _viewportIsTarget,\r\n _isBody,\r\n _viewportAddRemoveClass,\r\n _windowElm,\r\n } = structureSetupElements;\r\n const { _nativeScrollbarsHiding } = env;\r\n const viewportIsTargetBody = _isBody && _viewportIsTarget;\r\n const max0 = bind(mathMax, 0);\r\n\r\n const whCacheOptions = {\r\n _equal: equalWH,\r\n _initialValue: { w: 0, h: 0 },\r\n };\r\n const xyCacheOptions = {\r\n _equal: equalXY,\r\n _initialValue: { x: strHidden, y: strHidden } as XY,\r\n };\r\n const getOverflowAmount = (viewportScrollSize: WH, viewportClientSize: WH) => {\r\n const tollerance = wnd.devicePixelRatio % 1 !== 0 ? 1 : 0;\r\n const amount = {\r\n w: max0(viewportScrollSize.w - viewportClientSize.w),\r\n h: max0(viewportScrollSize.h - viewportClientSize.h),\r\n };\r\n\r\n return {\r\n w: amount.w > tollerance ? amount.w : 0,\r\n h: amount.h > tollerance ? amount.h : 0,\r\n };\r\n };\r\n\r\n const [updateSizeFraction, getCurrentSizeFraction] = createCache>(\r\n whCacheOptions,\r\n bind(fractionalSize, _viewport)\r\n );\r\n const [updateViewportScrollSizeCache, getCurrentViewportScrollSizeCache] = createCache<\r\n WH\r\n >(whCacheOptions, bind(scrollSize, _viewport));\r\n const [updateOverflowAmountCache, getCurrentOverflowAmountCache] =\r\n createCache>(whCacheOptions);\r\n const [updateOverflowEdge, getCurrentOverflowEdgeCache] = createCache>(whCacheOptions);\r\n const [updateOverflowStyleCache] = createCache>(xyCacheOptions);\r\n\r\n const scrollbarsHidingPlugin = getStaticPluginModuleInstance(\r\n scrollbarsHidingPluginName\r\n );\r\n\r\n return (\r\n { _checkOption, _observersUpdateHints, _observersState, _force },\r\n { _paddingStyleChanged }\r\n ) => {\r\n const { _sizeChanged, _contentMutation, _directionChanged, _scrollbarSizeChanged } =\r\n _observersUpdateHints || {};\r\n const scrollbarsHidingPluginViewportArrangement =\r\n scrollbarsHidingPlugin &&\r\n scrollbarsHidingPlugin._viewportArrangement(\r\n structureSetupElements,\r\n structureSetupState,\r\n _observersState,\r\n env,\r\n _checkOption\r\n );\r\n\r\n const { _arrangeViewport, _undoViewportArrange, _hideNativeScrollbars } =\r\n scrollbarsHidingPluginViewportArrangement || {};\r\n\r\n const [showNativeOverlaidScrollbars, showNativeOverlaidScrollbarsChanged] =\r\n getShowNativeOverlaidScrollbars(_checkOption, env);\r\n const [overflow, overflowChanged] = _checkOption('overflow');\r\n\r\n const adjustViewportArrange =\r\n _sizeChanged ||\r\n _paddingStyleChanged ||\r\n _contentMutation ||\r\n _directionChanged ||\r\n _scrollbarSizeChanged ||\r\n showNativeOverlaidScrollbarsChanged;\r\n const overflowXVisible = overflowIsVisible(overflow.x);\r\n const overflowYVisible = overflowIsVisible(overflow.y);\r\n const overflowVisible = overflowXVisible || overflowYVisible;\r\n\r\n let sizeFractionCache = getCurrentSizeFraction(_force);\r\n let viewportScrollSizeCache = getCurrentViewportScrollSizeCache(_force);\r\n let overflowAmuntCache = getCurrentOverflowAmountCache(_force);\r\n let overflowEdgeCache = getCurrentOverflowEdgeCache(_force);\r\n\r\n let preMeasureViewportOverflowState: ViewportOverflowState | undefined;\r\n\r\n if (showNativeOverlaidScrollbarsChanged && _nativeScrollbarsHiding) {\r\n _viewportAddRemoveClass(dataValueViewportScrollbarHidden, !showNativeOverlaidScrollbars);\r\n }\r\n\r\n if (adjustViewportArrange) {\r\n if (overflowVisible) {\r\n _viewportAddRemoveClass(dataValueViewportOverflowVisible, false);\r\n }\r\n\r\n const [redoViewportArrange, undoViewportArrangeOverflowState] = _undoViewportArrange\r\n ? _undoViewportArrange(preMeasureViewportOverflowState)\r\n : [];\r\n\r\n const [sizeFraction, sizeFractionChanged] = (sizeFractionCache = updateSizeFraction(_force));\r\n const [viewportScrollSize, viewportScrollSizeChanged] = (viewportScrollSizeCache =\r\n updateViewportScrollSizeCache(_force));\r\n const viewportClientSize = clientSize(_viewport);\r\n const arrangedViewportScrollSize = viewportScrollSize;\r\n const arrangedViewportClientSize = viewportClientSize;\r\n\r\n redoViewportArrange && redoViewportArrange();\r\n\r\n // if re measure is required (only required if content arrange strategy is used)\r\n if (\r\n (viewportScrollSizeChanged || sizeFractionChanged || showNativeOverlaidScrollbarsChanged) &&\r\n undoViewportArrangeOverflowState &&\r\n !showNativeOverlaidScrollbars &&\r\n _arrangeViewport &&\r\n _arrangeViewport(undoViewportArrangeOverflowState, viewportScrollSize, sizeFraction)\r\n ) {\r\n // arrangedViewportClientSize = clientSize(_viewport);\r\n // arrangedViewportScrollSize = scrollSize(_viewport);\r\n }\r\n\r\n const windowInnerSize = windowSize(_windowElm());\r\n const overflowAmountScrollSize = {\r\n w: max0(mathMax(viewportScrollSize.w, arrangedViewportScrollSize.w) + sizeFraction.w),\r\n h: max0(mathMax(viewportScrollSize.h, arrangedViewportScrollSize.h) + sizeFraction.h),\r\n };\r\n\r\n const overflowAmountClientSize = {\r\n w: max0(\r\n (viewportIsTargetBody\r\n ? windowInnerSize.w\r\n : arrangedViewportClientSize.w + max0(viewportClientSize.w - viewportScrollSize.w)) +\r\n sizeFraction.w\r\n ),\r\n h: max0(\r\n (viewportIsTargetBody\r\n ? windowInnerSize.h\r\n : arrangedViewportClientSize.h + max0(viewportClientSize.h - viewportScrollSize.h)) +\r\n sizeFraction.h\r\n ),\r\n };\r\n\r\n overflowEdgeCache = updateOverflowEdge(overflowAmountClientSize);\r\n overflowAmuntCache = updateOverflowAmountCache(\r\n getOverflowAmount(overflowAmountScrollSize, overflowAmountClientSize),\r\n _force\r\n );\r\n }\r\n\r\n const [overflowEdge, overflowEdgeChanged] = overflowEdgeCache;\r\n const [overflowAmount, overflowAmountChanged] = overflowAmuntCache;\r\n const [viewportScrollSize, viewportScrollSizeChanged] = viewportScrollSizeCache;\r\n const [sizeFraction, sizeFractionChanged] = sizeFractionCache;\r\n const hasOverflow = {\r\n x: overflowAmount.w > 0,\r\n y: overflowAmount.h > 0,\r\n };\r\n const removeClipping =\r\n (overflowXVisible && overflowYVisible && (hasOverflow.x || hasOverflow.y)) ||\r\n (overflowXVisible && hasOverflow.x && !hasOverflow.y) ||\r\n (overflowYVisible && hasOverflow.y && !hasOverflow.x);\r\n const adjustViewportStyle =\r\n _paddingStyleChanged ||\r\n _directionChanged ||\r\n _scrollbarSizeChanged ||\r\n sizeFractionChanged ||\r\n viewportScrollSizeChanged ||\r\n overflowEdgeChanged ||\r\n overflowAmountChanged ||\r\n overflowChanged ||\r\n showNativeOverlaidScrollbarsChanged ||\r\n adjustViewportArrange;\r\n\r\n if (adjustViewportStyle) {\r\n const viewportStyle: StyleObject = {};\r\n const viewportOverflowState = setViewportOverflowState(\r\n structureSetupElements,\r\n hasOverflow,\r\n overflow,\r\n viewportStyle\r\n );\r\n\r\n _hideNativeScrollbars &&\r\n _hideNativeScrollbars(\r\n viewportOverflowState,\r\n _observersState,\r\n !!_arrangeViewport &&\r\n _arrangeViewport(viewportOverflowState, viewportScrollSize, sizeFraction),\r\n viewportStyle\r\n );\r\n\r\n if (_viewportIsTarget) {\r\n setAttrs(_host, dataAttributeHostOverflowX, viewportStyle[strOverflowX] as string);\r\n setAttrs(_host, dataAttributeHostOverflowY, viewportStyle[strOverflowY] as string);\r\n } else {\r\n setStyles(_viewport, viewportStyle);\r\n }\r\n }\r\n\r\n addRemoveAttrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);\r\n addRemoveAttrClass(\r\n _padding,\r\n dataAttributePadding,\r\n dataValuePaddingOverflowVisible,\r\n removeClipping\r\n );\r\n if (!_viewportIsTarget) {\r\n addRemoveAttrClass(\r\n _viewport,\r\n dataAttributeViewport,\r\n dataValueViewportOverflowVisible,\r\n overflowVisible\r\n );\r\n }\r\n\r\n const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(\r\n getViewportOverflowState(structureSetupElements)._overflowStyle\r\n );\r\n\r\n assignDeep(structureSetupState, {\r\n _overflowStyle: overflowStyle,\r\n _overflowEdge: {\r\n x: overflowEdge.w,\r\n y: overflowEdge.h,\r\n },\r\n _overflowAmount: {\r\n x: overflowAmount.w,\r\n y: overflowAmount.h,\r\n },\r\n _hasOverflow: hasOverflow,\r\n });\r\n\r\n return {\r\n _overflowStyleChanged: overflowStyleChanged,\r\n _overflowEdgeChanged: overflowEdgeChanged,\r\n _overflowAmountChanged: overflowAmountChanged,\r\n };\r\n };\r\n};\r\n","import {\r\n assignDeep,\r\n bind,\r\n getElmentScroll,\r\n isEmptyObject,\r\n keys,\r\n runEachAndClear,\r\n scrollElementTo,\r\n} from '~/support';\r\nimport { createOptionCheck } from '~/options';\r\nimport type { OptionsCheckFn, Options, PartialOptions, ReadonlyOptions } from '~/options';\r\nimport type { DeepReadonly } from '~/typings';\r\nimport type { InitializationTarget } from '~/initialization';\r\nimport type { ObserversSetupState, ObserversSetupUpdateHints } from './observersSetup';\r\nimport type { StructureSetupState, StructureSetupUpdateHints } from './structureSetup';\r\nimport type { StructureSetupElementsObj } from './structureSetup/structureSetup.elements';\r\nimport type { ScrollbarsSetupElementsObj } from './scrollbarsSetup/scrollbarsSetup.elements';\r\nimport { createObserversSetup } from './observersSetup';\r\nimport { createScrollbarsSetup } from './scrollbarsSetup';\r\nimport { createStructureSetup } from './structureSetup';\r\n\r\nexport type SetupUpdateHints = Partial>;\r\n\r\nexport type SetupUpdateInfo = {\r\n _checkOption: OptionsCheckFn;\r\n _changedOptions: PartialOptions;\r\n _force: boolean;\r\n};\r\n\r\nexport type Setup<\r\n U extends SetupUpdateInfo,\r\n S extends Readonly>,\r\n H extends SetupUpdateHints | void\r\n> = [\r\n /** The create function which returns the `destroy` function. */\r\n _create: () => () => void,\r\n /** Function which updates the setup and returns the update result. */\r\n _update: (updateInfo: U) => H,\r\n /** Function which returns the current state. */\r\n _state: S\r\n];\r\n\r\nexport interface SetupsUpdateInfo {\r\n /** The options that changed or `undefined` if none changed. */\r\n _changedOptions?: PartialOptions;\r\n /** Whether chache should be ignored. */\r\n _force?: boolean;\r\n /** Whether observers should take their records and thus update as well. */\r\n _takeRecords?: boolean;\r\n /** Whether one or more scrollbars has been cloned. */\r\n _cloneScrollbar?: boolean;\r\n}\r\n\r\nexport interface SetupsUpdateHints {\r\n readonly _observersUpdateHints: DeepReadonly;\r\n readonly _structureUpdateHints: DeepReadonly;\r\n}\r\n\r\nexport interface SetupsState {\r\n readonly _observersSetupState: DeepReadonly;\r\n readonly _structureSetupState: DeepReadonly;\r\n}\r\n\r\nexport interface SetupsElements {\r\n readonly _structureSetupElements: DeepReadonly;\r\n readonly _scrollbarsSetupElements: DeepReadonly;\r\n}\r\n\r\nexport type Setups = [\r\n construct: () => () => void,\r\n update: (updateInfo: SetupsUpdateInfo) => boolean,\r\n getState: () => SetupsState,\r\n elements: SetupsElements,\r\n canceled: () => void\r\n];\r\n\r\nexport const createSetups = (\r\n target: InitializationTarget,\r\n options: ReadonlyOptions,\r\n onUpdated: (updateInfo: SetupsUpdateInfo, updateHints: SetupsUpdateHints) => void,\r\n onScroll: (scrollEvent: Event) => void\r\n): Setups => {\r\n const getCurrentOption = createOptionCheck(options, {});\r\n const [\r\n structureSetupCreate,\r\n structureSetupUpdate,\r\n structureSetupState,\r\n structureSetupElements,\r\n structureSetupCanceled,\r\n ] = createStructureSetup(target);\r\n const [observersSetupCreate, observersSetupUpdate, observersSetupState] = createObserversSetup(\r\n structureSetupElements,\r\n structureSetupState,\r\n getCurrentOption,\r\n (observersUpdateHints) => {\r\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\r\n update({}, observersUpdateHints);\r\n }\r\n );\r\n const [scrollbarsSetupCreate, scrollbarsSetupUpdate, , scrollbarsSetupElements] =\r\n createScrollbarsSetup(\r\n target,\r\n options,\r\n observersSetupState,\r\n structureSetupState,\r\n structureSetupElements,\r\n onScroll\r\n );\r\n\r\n const updateHintsAreTruthy = (hints: SetupUpdateHints) =>\r\n keys(hints).some((key) => !!hints[key as keyof typeof hints]);\r\n\r\n const update = (\r\n updateInfo: SetupsUpdateInfo,\r\n observerUpdateHints?: ObserversSetupUpdateHints\r\n ): boolean => {\r\n const {\r\n _changedOptions: rawChangedOptions,\r\n _force: rawForce,\r\n _takeRecords,\r\n _cloneScrollbar,\r\n } = updateInfo;\r\n const _changedOptions = rawChangedOptions || {};\r\n const _force = !!rawForce;\r\n const baseUpdateInfoObj: SetupUpdateInfo = {\r\n _checkOption: createOptionCheck(options, _changedOptions, _force),\r\n _changedOptions,\r\n _force,\r\n };\r\n\r\n if (_cloneScrollbar) {\r\n scrollbarsSetupUpdate(baseUpdateInfoObj);\r\n return false;\r\n }\r\n\r\n const observersHints =\r\n observerUpdateHints ||\r\n observersSetupUpdate(\r\n assignDeep({}, baseUpdateInfoObj, {\r\n _takeRecords,\r\n })\r\n );\r\n\r\n const structureHints = structureSetupUpdate(\r\n assignDeep({}, baseUpdateInfoObj, {\r\n _observersState: observersSetupState,\r\n _observersUpdateHints: observersHints,\r\n })\r\n );\r\n scrollbarsSetupUpdate(\r\n assignDeep({}, baseUpdateInfoObj, {\r\n _observersUpdateHints: observersHints,\r\n _structureUpdateHints: structureHints,\r\n })\r\n );\r\n\r\n const truthyObserversHints = updateHintsAreTruthy(observersHints);\r\n const truthyStructureHints = updateHintsAreTruthy(structureHints);\r\n const changed =\r\n truthyObserversHints || truthyStructureHints || !isEmptyObject(_changedOptions) || _force;\r\n\r\n changed &&\r\n onUpdated(updateInfo, {\r\n _observersUpdateHints: observersHints,\r\n _structureUpdateHints: structureHints,\r\n });\r\n\r\n return changed;\r\n };\r\n\r\n return [\r\n () => {\r\n const { _originalScrollOffsetElement, _viewport } = structureSetupElements;\r\n const initialScroll = getElmentScroll(_originalScrollOffsetElement);\r\n const destroyFns = [observersSetupCreate(), structureSetupCreate(), scrollbarsSetupCreate()];\r\n\r\n scrollElementTo(_viewport, initialScroll);\r\n\r\n return bind(runEachAndClear, destroyFns);\r\n },\r\n update,\r\n () => ({\r\n _observersSetupState: observersSetupState,\r\n _structureSetupState: structureSetupState,\r\n }),\r\n {\r\n _structureSetupElements: structureSetupElements,\r\n _scrollbarsSetupElements: scrollbarsSetupElements,\r\n },\r\n structureSetupCanceled,\r\n ];\r\n};\r\n","import { getEnvironment } from '~/environment';\r\nimport {\r\n addAttrClass,\r\n assignDeep,\r\n each,\r\n getElmentScroll,\r\n noop,\r\n scrollElementTo,\r\n strHidden,\r\n strMarginBottom,\r\n strMarginLeft,\r\n strMarginRight,\r\n strPaddingBottom,\r\n strPaddingLeft,\r\n strPaddingRight,\r\n strPaddingTop,\r\n type TRBL,\r\n type XY,\r\n} from '~/support';\r\nimport { dataAttributeHost, dataValueHostUpdating } from '~/classnames';\r\nimport type { StructureSetupElementsObj } from './structureSetup.elements';\r\nimport type {\r\n ObserversSetupState,\r\n ObserversSetupUpdateHints,\r\n Setup,\r\n SetupUpdateInfo,\r\n} from '~/setups';\r\nimport type { InitializationTarget } from '~/initialization';\r\nimport type { StyleObject, OverflowStyle } from '~/typings';\r\nimport { createStructureSetupElements } from './structureSetup.elements';\r\nimport {\r\n createOverflowUpdateSegment,\r\n createPaddingUpdateSegment,\r\n createTrinsicUpdateSegment,\r\n} from './updateSegments';\r\n\r\nexport interface StructureSetupState {\r\n _padding: TRBL;\r\n _paddingAbsolute: boolean;\r\n _viewportPaddingStyle: StyleObject;\r\n _overflowEdge: XY;\r\n _overflowAmount: XY;\r\n _overflowStyle: XY;\r\n _hasOverflow: XY;\r\n}\r\n\r\nexport interface StructureSetupUpdateInfo extends SetupUpdateInfo {\r\n _observersState: ObserversSetupState;\r\n _observersUpdateHints?: ObserversSetupUpdateHints;\r\n}\r\n\r\nexport type StructureSetupUpdateHints = {\r\n _overflowEdgeChanged?: boolean;\r\n _overflowAmountChanged?: boolean;\r\n _overflowStyleChanged?: boolean;\r\n _paddingStyleChanged?: boolean;\r\n};\r\n\r\nexport type StructureSetup = [\r\n ...Setup,\r\n /** The elements created by the structure setup. */\r\n StructureSetupElementsObj,\r\n /** Function to be called when the initialization was canceled. */\r\n () => void\r\n];\r\n\r\nexport type StructureUpdateSegment = (\r\n updateInfo: StructureSetupUpdateInfo,\r\n updateHints: Readonly\r\n) => StructureSetupUpdateHints | void;\r\n\r\nexport type CreateStructureUpdateSegment = (\r\n structureSetupElements: StructureSetupElementsObj,\r\n state: StructureSetupState\r\n) => StructureUpdateSegment;\r\n\r\nexport const createStructureSetup = (target: InitializationTarget): StructureSetup => {\r\n const [elements, appendStructureElements, canceled] = createStructureSetupElements(target);\r\n const state: StructureSetupState = {\r\n _padding: {\r\n t: 0,\r\n r: 0,\r\n b: 0,\r\n l: 0,\r\n },\r\n _paddingAbsolute: false,\r\n _viewportPaddingStyle: {\r\n [strMarginRight]: 0,\r\n [strMarginBottom]: 0,\r\n [strMarginLeft]: 0,\r\n [strPaddingTop]: 0,\r\n [strPaddingRight]: 0,\r\n [strPaddingBottom]: 0,\r\n [strPaddingLeft]: 0,\r\n },\r\n _overflowEdge: { x: 0, y: 0 },\r\n _overflowAmount: { x: 0, y: 0 },\r\n _overflowStyle: {\r\n x: strHidden,\r\n y: strHidden,\r\n },\r\n _hasOverflow: {\r\n x: false,\r\n y: false,\r\n },\r\n };\r\n const { _target, _viewport, _viewportIsTarget } = elements;\r\n const { _nativeScrollbarsHiding, _nativeScrollbarsOverlaid } = getEnvironment();\r\n const doViewportArrange =\r\n !_nativeScrollbarsHiding && (_nativeScrollbarsOverlaid.x || _nativeScrollbarsOverlaid.y);\r\n\r\n const updateSegments: StructureUpdateSegment[] = [\r\n createTrinsicUpdateSegment(elements, state),\r\n createPaddingUpdateSegment(elements, state),\r\n createOverflowUpdateSegment(elements, state),\r\n ];\r\n\r\n return [\r\n appendStructureElements,\r\n (updateInfo) => {\r\n const updateHints: StructureSetupUpdateHints = {};\r\n const adjustScrollOffset = doViewportArrange;\r\n const scrollOffset = adjustScrollOffset && getElmentScroll(_viewport);\r\n\r\n const removeAttrClass = _viewportIsTarget\r\n ? addAttrClass(_viewport, dataAttributeHost, dataValueHostUpdating)\r\n : noop;\r\n\r\n each(updateSegments, (updateSegment) => {\r\n assignDeep(updateHints, updateSegment(updateInfo, updateHints) || {});\r\n });\r\n\r\n removeAttrClass();\r\n\r\n scrollElementTo(_viewport, scrollOffset);\r\n !_viewportIsTarget && scrollElementTo(_target, 0);\r\n\r\n return updateHints;\r\n },\r\n state,\r\n elements,\r\n canceled,\r\n ];\r\n};\r\n","import { bind, noop, addEventListener, push, runEachAndClear, selfClearTimeout } from '~/support';\r\nimport { getEnvironment } from '~/environment';\r\nimport {\r\n classNameScrollbarThemeNone,\r\n classNameScrollbarVisible,\r\n classNameScrollbarUnusable,\r\n classNameScrollbarCornerless,\r\n classNameScrollbarAutoHideHidden,\r\n classNameScrollbarHandleInteractive,\r\n classNameScrollbarTrackInteractive,\r\n classNameScrollbarRtl,\r\n classNameScrollbarAutoHide,\r\n} from '~/classnames';\r\nimport type { OverflowBehavior, ReadonlyOptions } from '~/options';\r\nimport type { ScrollbarsSetupElementsObj } from './scrollbarsSetup.elements';\r\nimport type {\r\n ObserversSetupState,\r\n ObserversSetupUpdateHints,\r\n Setup,\r\n SetupUpdateInfo,\r\n StructureSetupState,\r\n StructureSetupUpdateHints,\r\n} from '~/setups';\r\nimport type { InitializationTarget } from '~/initialization';\r\nimport type { OverflowStyle } from '~/typings';\r\nimport type { StructureSetupElementsObj } from '../structureSetup/structureSetup.elements';\r\nimport { createScrollbarsSetupElements } from './scrollbarsSetup.elements';\r\nimport { createScrollbarsSetupEvents } from './scrollbarsSetup.events';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ScrollbarsSetupState {}\r\n\r\nexport interface ScrollbarsSetupUpdateInfo extends SetupUpdateInfo {\r\n _observersUpdateHints?: ObserversSetupUpdateHints;\r\n _structureUpdateHints?: StructureSetupUpdateHints;\r\n}\r\n\r\nexport type ScrollbarsSetup = [\r\n ...Setup,\r\n /** The elements created by the scrollbars setup. */\r\n ScrollbarsSetupElementsObj\r\n];\r\n\r\nexport const createScrollbarsSetup = (\r\n target: InitializationTarget,\r\n options: ReadonlyOptions,\r\n observersSetupState: ObserversSetupState,\r\n structureSetupState: StructureSetupState,\r\n structureSetupElements: StructureSetupElementsObj,\r\n onScroll: (event: Event) => void\r\n): ScrollbarsSetup => {\r\n let mouseInHost: boolean | undefined;\r\n let autoHideIsMove: boolean | undefined;\r\n let autoHideIsLeave: boolean | undefined;\r\n let autoHideIsNever: boolean | undefined;\r\n let prevTheme: string | null | undefined;\r\n let instanceAutoHideSuspendScrollDestroyFn = noop;\r\n let instanceAutoHideDelay = 0;\r\n\r\n // needed to not fire unnecessary operations for pointer events on safari which will cause side effects: https://github.com/KingSora/OverlayScrollbars/issues/560\r\n const isHoverablePointerType = (event: PointerEvent) => event.pointerType === 'mouse';\r\n\r\n const [requestScrollAnimationFrame, cancelScrollAnimationFrame] = selfClearTimeout();\r\n const [autoHideInstantInteractionTimeout, clearAutoHideInstantInteractionTimeout] =\r\n selfClearTimeout(100);\r\n const [autoHideSuspendTimeout, clearAutoHideSuspendTimeout] = selfClearTimeout(100);\r\n const [auotHideTimeout, clearAutoHideTimeout] = selfClearTimeout(() => instanceAutoHideDelay);\r\n const [elements, appendElements] = createScrollbarsSetupElements(\r\n target,\r\n structureSetupElements,\r\n structureSetupState,\r\n createScrollbarsSetupEvents(\r\n options,\r\n structureSetupElements,\r\n structureSetupState,\r\n (event) =>\r\n isHoverablePointerType(event) &&\r\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\r\n manageScrollbarsAutoHideInstantInteraction()\r\n )\r\n );\r\n const { _host, _scrollEventElement, _isBody } = structureSetupElements;\r\n const {\r\n _scrollbarsAddRemoveClass,\r\n _refreshScrollbarsHandleLength,\r\n _refreshScrollbarsHandleOffset,\r\n _refreshScrollbarsScrollbarOffset,\r\n } = elements;\r\n const manageScrollbarsAutoHide = (removeAutoHide: boolean, delayless?: boolean) => {\r\n clearAutoHideTimeout();\r\n if (removeAutoHide) {\r\n _scrollbarsAddRemoveClass(classNameScrollbarAutoHideHidden);\r\n } else {\r\n const hide = bind(_scrollbarsAddRemoveClass, classNameScrollbarAutoHideHidden, true);\r\n if (instanceAutoHideDelay > 0 && !delayless) {\r\n auotHideTimeout(hide);\r\n } else {\r\n hide();\r\n }\r\n }\r\n };\r\n const manageScrollbarsAutoHideInstantInteraction = () => {\r\n if (autoHideIsLeave ? !mouseInHost : !autoHideIsNever) {\r\n manageScrollbarsAutoHide(true);\r\n autoHideInstantInteractionTimeout(() => {\r\n manageScrollbarsAutoHide(false);\r\n });\r\n }\r\n };\r\n const manageAutoHideSuspension = (add: boolean) => {\r\n _scrollbarsAddRemoveClass(classNameScrollbarAutoHide, add, true);\r\n _scrollbarsAddRemoveClass(classNameScrollbarAutoHide, add, false);\r\n };\r\n const onHostMouseEnter = (event: PointerEvent) => {\r\n if (isHoverablePointerType(event)) {\r\n mouseInHost = autoHideIsLeave;\r\n autoHideIsLeave && manageScrollbarsAutoHide(true);\r\n }\r\n };\r\n const destroyFns: (() => void)[] = [\r\n clearAutoHideTimeout,\r\n clearAutoHideInstantInteractionTimeout,\r\n clearAutoHideSuspendTimeout,\r\n cancelScrollAnimationFrame,\r\n () => instanceAutoHideSuspendScrollDestroyFn(),\r\n\r\n addEventListener(_host, 'pointerover', onHostMouseEnter, { _once: true }),\r\n addEventListener(_host, 'pointerenter', onHostMouseEnter),\r\n addEventListener(_host, 'pointerleave', (event: PointerEvent) => {\r\n if (isHoverablePointerType(event)) {\r\n mouseInHost = false;\r\n autoHideIsLeave && manageScrollbarsAutoHide(false);\r\n }\r\n }),\r\n addEventListener(_host, 'pointermove', (event: PointerEvent) => {\r\n isHoverablePointerType(event) &&\r\n autoHideIsMove &&\r\n manageScrollbarsAutoHideInstantInteraction();\r\n }),\r\n addEventListener(_scrollEventElement, 'scroll', (event) => {\r\n requestScrollAnimationFrame(() => {\r\n _refreshScrollbarsHandleOffset();\r\n manageScrollbarsAutoHideInstantInteraction();\r\n });\r\n\r\n onScroll(event);\r\n\r\n _refreshScrollbarsScrollbarOffset();\r\n }),\r\n ];\r\n\r\n return [\r\n () => bind(runEachAndClear, push(destroyFns, appendElements())),\r\n ({ _checkOption, _force, _observersUpdateHints, _structureUpdateHints }) => {\r\n const { _overflowEdgeChanged, _overflowAmountChanged, _overflowStyleChanged } =\r\n _structureUpdateHints || {};\r\n const { _directionChanged, _appear } = _observersUpdateHints || {};\r\n const { _directionIsRTL } = observersSetupState;\r\n const { _nativeScrollbarsOverlaid } = getEnvironment();\r\n const { _overflowStyle, _hasOverflow } = structureSetupState;\r\n const [showNativeOverlaidScrollbarsOption, showNativeOverlaidScrollbarsChanged] =\r\n _checkOption('showNativeOverlaidScrollbars');\r\n const [theme, themeChanged] = _checkOption('scrollbars.theme');\r\n const [visibility, visibilityChanged] = _checkOption('scrollbars.visibility');\r\n const [autoHide, autoHideChanged] = _checkOption('scrollbars.autoHide');\r\n const [autoHideSuspend, autoHideSuspendChanged] = _checkOption('scrollbars.autoHideSuspend');\r\n const [autoHideDelay] = _checkOption('scrollbars.autoHideDelay');\r\n const [dragScroll, dragScrollChanged] = _checkOption('scrollbars.dragScroll');\r\n const [clickScroll, clickScrollChanged] = _checkOption('scrollbars.clickScroll');\r\n const [overflow, overflowChanged] = _checkOption('overflow');\r\n const trulyAppeared = _appear && !_force;\r\n const hasOverflow = _hasOverflow.x || _hasOverflow.y;\r\n const updateScrollbars =\r\n _overflowEdgeChanged || _overflowAmountChanged || _directionChanged || _force;\r\n const updateVisibility = _overflowStyleChanged || visibilityChanged || overflowChanged;\r\n const showNativeOverlaidScrollbars =\r\n showNativeOverlaidScrollbarsOption &&\r\n _nativeScrollbarsOverlaid.x &&\r\n _nativeScrollbarsOverlaid.y;\r\n\r\n const setScrollbarVisibility = (\r\n overflowBehavior: OverflowBehavior,\r\n overflowStyle: OverflowStyle,\r\n isHorizontal: boolean\r\n ) => {\r\n const isVisible =\r\n overflowBehavior.includes('scroll') &&\r\n (visibility === 'visible' || (visibility === 'auto' && overflowStyle === 'scroll'));\r\n\r\n _scrollbarsAddRemoveClass(classNameScrollbarVisible, isVisible, isHorizontal);\r\n\r\n return isVisible;\r\n };\r\n\r\n instanceAutoHideDelay = autoHideDelay;\r\n\r\n if (trulyAppeared) {\r\n if (autoHideSuspend && hasOverflow) {\r\n manageAutoHideSuspension(false);\r\n instanceAutoHideSuspendScrollDestroyFn();\r\n autoHideSuspendTimeout(() => {\r\n instanceAutoHideSuspendScrollDestroyFn = addEventListener(\r\n _scrollEventElement,\r\n 'scroll',\r\n bind(manageAutoHideSuspension, true),\r\n {\r\n _once: true,\r\n }\r\n );\r\n });\r\n } else {\r\n manageAutoHideSuspension(true);\r\n }\r\n }\r\n\r\n if (showNativeOverlaidScrollbarsChanged) {\r\n _scrollbarsAddRemoveClass(classNameScrollbarThemeNone, showNativeOverlaidScrollbars);\r\n }\r\n\r\n if (themeChanged) {\r\n _scrollbarsAddRemoveClass(prevTheme);\r\n _scrollbarsAddRemoveClass(theme, true);\r\n\r\n prevTheme = theme;\r\n }\r\n\r\n if (autoHideSuspendChanged && !autoHideSuspend) {\r\n manageAutoHideSuspension(true);\r\n }\r\n\r\n if (autoHideChanged) {\r\n autoHideIsMove = autoHide === 'move';\r\n autoHideIsLeave = autoHide === 'leave';\r\n autoHideIsNever = autoHide === 'never';\r\n manageScrollbarsAutoHide(autoHideIsNever, true);\r\n }\r\n\r\n if (dragScrollChanged) {\r\n _scrollbarsAddRemoveClass(classNameScrollbarHandleInteractive, dragScroll);\r\n }\r\n\r\n if (clickScrollChanged) {\r\n _scrollbarsAddRemoveClass(classNameScrollbarTrackInteractive, clickScroll);\r\n }\r\n\r\n if (updateVisibility) {\r\n const xVisible = setScrollbarVisibility(overflow.x, _overflowStyle.x, true);\r\n const yVisible = setScrollbarVisibility(overflow.y, _overflowStyle.y, false);\r\n const hasCorner = xVisible && yVisible;\r\n\r\n _scrollbarsAddRemoveClass(classNameScrollbarCornerless, !hasCorner);\r\n }\r\n\r\n if (updateScrollbars) {\r\n // order is matter! length has to be refreshed before offset\r\n _refreshScrollbarsHandleLength();\r\n _refreshScrollbarsHandleOffset();\r\n _refreshScrollbarsScrollbarOffset();\r\n\r\n _scrollbarsAddRemoveClass(classNameScrollbarUnusable, !_hasOverflow.x, true);\r\n _scrollbarsAddRemoveClass(classNameScrollbarUnusable, !_hasOverflow.y, false);\r\n _scrollbarsAddRemoveClass(classNameScrollbarRtl, _directionIsRTL && !_isBody);\r\n }\r\n },\r\n {},\r\n elements,\r\n ];\r\n};\r\n","import {\r\n assignDeep,\r\n isEmptyObject,\r\n isFunction,\r\n isHTMLElement,\r\n createEventListenerHub,\r\n isPlainObject,\r\n keys,\r\n isArray,\r\n push,\r\n runEachAndClear,\r\n bind,\r\n removeUndefinedProperties,\r\n} from '~/support';\r\nimport { getOptionsDiff } from '~/options';\r\nimport { getEnvironment } from '~/environment';\r\nimport { cancelInitialization } from '~/initialization';\r\nimport { addInstance, getInstance, removeInstance } from '~/instances';\r\nimport { createSetups } from '~/setups';\r\nimport {\r\n addPlugins,\r\n getStaticPluginModuleInstance,\r\n optionsValidationPluginModuleName,\r\n pluginModules,\r\n registerPluginModuleInstances,\r\n} from '~/plugins';\r\nimport type { XY, TRBL } from '~/support';\r\nimport type { Options, PartialOptions, ReadonlyOptions } from '~/options';\r\nimport type {\r\n InferInstancePluginModuleInstance,\r\n InferStaticPluginModuleInstance,\r\n InstancePlugin,\r\n OptionsValidationPlugin,\r\n Plugin,\r\n PluginModuleInstance,\r\n StaticPlugin,\r\n} from '~/plugins';\r\nimport type { Initialization, InitializationTarget, PartialInitialization } from '~/initialization';\r\nimport type { OverflowStyle } from '~/typings';\r\nimport type { EventListenerArgs, EventListener, EventListeners } from '~/eventListeners';\r\nimport type {\r\n ScrollbarsSetupElement,\r\n ScrollbarStructure,\r\n} from '~/setups/scrollbarsSetup/scrollbarsSetup.elements';\r\n\r\n// Notes:\r\n// Height intrinsic detection use \"content: true\" init strategy - or open ticket for custom height intrinsic observer\r\n\r\n/**\r\n * Describes the OverlayScrollbars environment.\r\n */\r\nexport interface Environment {\r\n /** The native scrollbars size of the browser / system. */\r\n scrollbarsSize: XY;\r\n /** Whether the native scrollbars are overlaid. */\r\n scrollbarsOverlaid: XY;\r\n /** Whether the browser supports native scrollbars hiding. */\r\n scrollbarsHiding: boolean;\r\n /** The rtl scroll behavior of the browser. */\r\n rtlScrollBehavior: { n: boolean; i: boolean };\r\n /** Whether the browser supports the ScrollTimeline API. */\r\n scrollTimeline: boolean;\r\n /** The default Initialization to use if nothing else is specified. */\r\n staticDefaultInitialization: Initialization;\r\n /** The default Options to use if nothing else is specified. */\r\n staticDefaultOptions: Options;\r\n\r\n /** Returns the current default Initialization. */\r\n getDefaultInitialization(): Initialization;\r\n /** Returns the current default Options. */\r\n getDefaultOptions(): Options;\r\n\r\n /**\r\n * Sets a new default Initialization.\r\n * If the new default Initialization is partially filled, its deeply merged with the current default Initialization.\r\n * @param newDefaultInitialization The new default Initialization.\r\n * @returns The current default Initialization.\r\n */\r\n setDefaultInitialization(newDefaultInitialization: PartialInitialization): Initialization;\r\n /**\r\n * Sets new default Options.\r\n * If the new default Options are partially filled, they're deeply merged with the current default Options.\r\n * @param newDefaultOptions The new default Options.\r\n * @returns The current default options.\r\n */\r\n setDefaultOptions(newDefaultOptions: PartialOptions): Options;\r\n}\r\n\r\n/**\r\n * The primary entry point to OverlayScrollbars.\r\n */\r\nexport interface OverlayScrollbarsStatic {\r\n /**\r\n * Returns the current OverlayScrollbars instance if the target already has an instance.\r\n * @param target The initialization target to from which the instance shall be returned.\r\n */\r\n (target: InitializationTarget): OverlayScrollbars | undefined;\r\n /**\r\n * Initializes a new OverlayScrollbars instance to the given target\r\n * or returns the current OverlayScrollbars instance if the target already has an instance.\r\n * @param target The target.\r\n * @param options The options. (Can be just an empty object)\r\n * @param eventListeners Optional event listeners.\r\n */\r\n (\r\n target: InitializationTarget,\r\n options: PartialOptions,\r\n eventListeners?: EventListeners\r\n ): OverlayScrollbars;\r\n\r\n /**\r\n * Adds a single plugin.\r\n * @param plugin The plugin to be added.\r\n * @returns The plugins static modules instance or `void` if no instance was found.\r\n */\r\n plugin

(\r\n plugin: P\r\n ): P extends StaticPlugin ? InferStaticPluginModuleInstance

: void;\r\n /**\r\n * Adds multiple plugins.\r\n * @param plugins The plugins to be added.\r\n * @returns The plugins static modules instances or `void` if no instance was found.\r\n */\r\n plugin

(\r\n plugins: P\r\n ): P extends [Plugin, ...Plugin[]]\r\n ? {\r\n [K in keyof P]: P[K] extends StaticPlugin ? InferStaticPluginModuleInstance : void;\r\n }\r\n : void;\r\n\r\n /**\r\n * Checks whether the passed value is a valid and not destroyed overlayscrollbars instance.\r\n * @param osInstance The value which shall be checked.\r\n */\r\n valid(osInstance: any): osInstance is OverlayScrollbars;\r\n /**\r\n * Gets the environment.\r\n */\r\n env(): Environment;\r\n}\r\n\r\n/**\r\n * Describes a OverlayScrollbars instances state.\r\n */\r\nexport interface State {\r\n /** Describes the current padding in pixel. */\r\n padding: TRBL;\r\n /** Whether the current padding is absolute. */\r\n paddingAbsolute: boolean;\r\n /** The client width (x) & height (y) of the viewport in pixel. */\r\n overflowEdge: XY;\r\n /** The overflow amount in pixel. */\r\n overflowAmount: XY;\r\n /** The css overflow style of the viewport. */\r\n overflowStyle: XY;\r\n /** Whether the viewport has an overflow. */\r\n hasOverflow: XY;\r\n /** Whether the direction is considered rtl. */\r\n directionRTL: boolean;\r\n /** Whether the instance is considered destroyed. */\r\n destroyed: boolean;\r\n}\r\n\r\n/**\r\n * Describes the elements of a scrollbar.\r\n */\r\nexport interface ScrollbarElements {\r\n /**\r\n * The root element of the scrollbar.\r\n * The HTML structure looks like this:\r\n * \r\n * \r\n * \r\n * \r\n * \r\n */\r\n scrollbar: HTMLElement;\r\n /** The track element of the scrollbar. */\r\n track: HTMLElement;\r\n /** The handle element of the scrollbar. */\r\n handle: HTMLElement;\r\n}\r\n\r\n/**\r\n * Describes the elements of a scrollbar and provides the possibility to clone them.\r\n */\r\nexport interface CloneableScrollbarElements extends ScrollbarElements {\r\n /**\r\n * Clones the current scrollbar and returns the cloned elements.\r\n * The returned elements aren't added to the DOM.\r\n */\r\n clone(): ScrollbarElements;\r\n}\r\n\r\n/**\r\n * Describes the elements of a OverlayScrollbars instance.\r\n */\r\nexport interface Elements {\r\n /** The element the instance was applied to. */\r\n target: HTMLElement;\r\n /** The host element. Its the root of all other elements. */\r\n host: HTMLElement;\r\n /**\r\n * The element which is responsible to apply correct paddings.\r\n * Depending on the Initialization it can be the same as the viewport element.\r\n */\r\n padding: HTMLElement;\r\n /** The element which is responsible to do any scrolling. */\r\n viewport: HTMLElement;\r\n /**\r\n * The element which is responsible to hold the content.\r\n * Depending on the Initialization it can be the same as the viewport element.\r\n */\r\n content: HTMLElement;\r\n /**\r\n * The element through which you can get the current `scrollLeft` or `scrollTop` offset.\r\n * Depending on the target element it can be the same as the viewport element.\r\n */\r\n scrollOffsetElement: HTMLElement;\r\n /**\r\n * The element through which you can add `scroll` events.\r\n * Depending on the target element it can be the same as the viewport element.\r\n */\r\n scrollEventElement: HTMLElement | Document;\r\n /** The horizontal scrollbar elements. */\r\n scrollbarHorizontal: CloneableScrollbarElements;\r\n /** The vertical scrollbar elements. */\r\n scrollbarVertical: CloneableScrollbarElements;\r\n}\r\n\r\n/**\r\n * Describes a OverlayScrollbars instance.\r\n */\r\nexport interface OverlayScrollbars {\r\n /** Gets the current options of the instance. */\r\n options(): Options;\r\n /**\r\n * Sets the options of the instance.\r\n * If the new options are partially filled, they're deeply merged with either the current options or the current default options.\r\n * @param newOptions The new options which should be applied.\r\n * @param pure Whether the options should be reset before the new options are added.\r\n * @returns Returns the current options of the instance.\r\n */\r\n options(newOptions: PartialOptions, pure?: boolean): Options;\r\n\r\n /**\r\n * Adds event listeners to the instance.\r\n * @param eventListeners An object which contains the added listeners.\r\n * @param pure Whether all already added event listeners should be removed before the new listeners are added.\r\n * @returns Returns a function which removes the added listeners.\r\n */\r\n on(eventListeners: EventListeners, pure?: boolean): () => void;\r\n /**\r\n * Adds a single event listener to the instance.\r\n * @param name The name of the event.\r\n * @param listener The listener which is invoked on that event.\r\n * @returns Returns a function which removes the added listeners.\r\n */\r\n on(name: N, listener: EventListener): () => void;\r\n /**\r\n * Adds multiple event listeners to the instance.\r\n * @param name The name of the event.\r\n * @param listener The listeners which are invoked on that event.\r\n * @returns Returns a function which removes the added listeners.\r\n */\r\n on(name: N, listener: EventListener[]): () => void;\r\n\r\n /**\r\n * Removes a single event listener from the instance.\r\n * @param name The name of the event.\r\n * @param listener The listener which shall be removed.\r\n */\r\n off(name: N, listener: EventListener): void;\r\n /**\r\n * Removes multiple event listeners from the instance.\r\n * @param name The name of the event.\r\n * @param listener The listeners which shall be removed.\r\n */\r\n off(name: N, listener: EventListener[]): void;\r\n\r\n /**\r\n * Updates the instance.\r\n * @param force Whether the update should force the cache to be invalidated.\r\n * @returns A boolean which indicates whether the `update` event was triggered through this update.\r\n * The update event is only triggered if something changed because of this update.\r\n */\r\n update(force?: boolean): boolean;\r\n /** Returns the state of the instance. */\r\n state(): State;\r\n /** Returns the elements of the instance. */\r\n elements(): Elements;\r\n /** Destroys the instance and removes all added elements. */\r\n destroy(): void;\r\n /** Returns the instance of the passed plugin or `undefined` if no instance was found. */\r\n plugin

(osPlugin: P): InferInstancePluginModuleInstance

| undefined;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-redeclare\r\nexport const OverlayScrollbars: OverlayScrollbarsStatic = (\r\n target: InitializationTarget,\r\n options?: PartialOptions,\r\n eventListeners?: EventListeners\r\n) => {\r\n const { _getDefaultOptions } = getEnvironment();\r\n const targetIsElement = isHTMLElement(target);\r\n const instanceTarget = targetIsElement ? target : target.target;\r\n const potentialInstance = getInstance(instanceTarget);\r\n if (options && !potentialInstance) {\r\n let destroyed = false;\r\n const destroyFns: (() => void)[] = [];\r\n const instancePluginModuleInstances: Record = {};\r\n const validateOptions = (newOptions: PartialOptions) => {\r\n const newOptionsWithoutUndefined = removeUndefinedProperties(newOptions, true);\r\n const pluginValidate = getStaticPluginModuleInstance(\r\n optionsValidationPluginModuleName\r\n );\r\n return pluginValidate\r\n ? pluginValidate(newOptionsWithoutUndefined, true)\r\n : newOptionsWithoutUndefined;\r\n };\r\n const currentOptions: ReadonlyOptions = assignDeep(\r\n {},\r\n _getDefaultOptions(),\r\n validateOptions(options)\r\n );\r\n const [addPluginEvent, removePluginEvents, triggerPluginEvent] =\r\n createEventListenerHub();\r\n const [addInstanceEvent, removeInstanceEvents, triggerInstanceEvent] =\r\n createEventListenerHub(eventListeners);\r\n const triggerEvent: typeof triggerPluginEvent = (name, args) => {\r\n triggerInstanceEvent(name, args);\r\n triggerPluginEvent(name, args);\r\n };\r\n const [setupsConstruct, setupsUpdate, setupsState, setupsElements, setupsCanceled] =\r\n createSetups(\r\n target,\r\n currentOptions,\r\n ({ _changedOptions, _force }, { _observersUpdateHints, _structureUpdateHints }) => {\r\n const {\r\n _sizeChanged,\r\n _directionChanged,\r\n _heightIntrinsicChanged,\r\n _contentMutation,\r\n _hostMutation,\r\n _appear,\r\n } = _observersUpdateHints;\r\n\r\n const { _overflowEdgeChanged, _overflowAmountChanged, _overflowStyleChanged } =\r\n _structureUpdateHints;\r\n\r\n triggerEvent('updated', [\r\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\r\n instance,\r\n {\r\n updateHints: {\r\n sizeChanged: !!_sizeChanged,\r\n directionChanged: !!_directionChanged,\r\n heightIntrinsicChanged: !!_heightIntrinsicChanged,\r\n overflowEdgeChanged: !!_overflowEdgeChanged,\r\n overflowAmountChanged: !!_overflowAmountChanged,\r\n overflowStyleChanged: !!_overflowStyleChanged,\r\n contentMutation: !!_contentMutation,\r\n hostMutation: !!_hostMutation,\r\n appear: !!_appear,\r\n },\r\n changedOptions: _changedOptions || {},\r\n force: !!_force,\r\n },\r\n ]);\r\n },\r\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\r\n (scrollEvent) => triggerEvent('scroll', [instance, scrollEvent])\r\n );\r\n\r\n const destroy = (canceled: boolean) => {\r\n removeInstance(instanceTarget);\r\n runEachAndClear(destroyFns);\r\n\r\n destroyed = true;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\r\n triggerEvent('destroyed', [instance, canceled]);\r\n removePluginEvents();\r\n removeInstanceEvents();\r\n };\r\n\r\n const instance: OverlayScrollbars = {\r\n options(newOptions?: PartialOptions, pure?: boolean) {\r\n if (newOptions) {\r\n const base = pure ? _getDefaultOptions() : {};\r\n const changedOptions = getOptionsDiff(\r\n currentOptions,\r\n assignDeep(base, validateOptions(newOptions))\r\n );\r\n if (!isEmptyObject(changedOptions)) {\r\n assignDeep(currentOptions, changedOptions);\r\n setupsUpdate({ _changedOptions: changedOptions });\r\n }\r\n }\r\n return assignDeep({}, currentOptions);\r\n },\r\n on: addInstanceEvent,\r\n off: (name, listener) => {\r\n name && listener && removeInstanceEvents(name, listener);\r\n },\r\n state() {\r\n const { _observersSetupState, _structureSetupState } = setupsState();\r\n const { _directionIsRTL } = _observersSetupState;\r\n const {\r\n _overflowEdge,\r\n _overflowAmount,\r\n _overflowStyle,\r\n _hasOverflow,\r\n _padding,\r\n _paddingAbsolute,\r\n } = _structureSetupState;\r\n return assignDeep(\r\n {},\r\n {\r\n overflowEdge: _overflowEdge,\r\n overflowAmount: _overflowAmount,\r\n overflowStyle: _overflowStyle,\r\n hasOverflow: _hasOverflow,\r\n padding: _padding,\r\n paddingAbsolute: _paddingAbsolute,\r\n directionRTL: _directionIsRTL,\r\n destroyed,\r\n }\r\n );\r\n },\r\n elements() {\r\n const {\r\n _target,\r\n _host,\r\n _padding,\r\n _viewport,\r\n _content,\r\n _scrollOffsetElement,\r\n _scrollEventElement,\r\n } = setupsElements._structureSetupElements;\r\n const { _horizontal, _vertical } = setupsElements._scrollbarsSetupElements;\r\n const translateScrollbarStructure = (\r\n scrollbarStructure: ScrollbarStructure\r\n ): ScrollbarElements => {\r\n const { _handle, _track, _scrollbar } = scrollbarStructure;\r\n return {\r\n scrollbar: _scrollbar,\r\n track: _track,\r\n handle: _handle,\r\n };\r\n };\r\n const translateScrollbarsSetupElement = (\r\n scrollbarsSetupElement: ScrollbarsSetupElement\r\n ): CloneableScrollbarElements => {\r\n const { _scrollbarStructures, _clone } = scrollbarsSetupElement;\r\n const translatedStructure = translateScrollbarStructure(_scrollbarStructures[0]);\r\n\r\n return assignDeep({}, translatedStructure, {\r\n clone: () => {\r\n const result = translateScrollbarStructure(_clone());\r\n setupsUpdate({ _cloneScrollbar: true });\r\n return result;\r\n },\r\n });\r\n };\r\n return assignDeep(\r\n {},\r\n {\r\n target: _target,\r\n host: _host,\r\n padding: _padding || _viewport,\r\n viewport: _viewport,\r\n content: _content || _viewport,\r\n scrollOffsetElement: _scrollOffsetElement,\r\n scrollEventElement: _scrollEventElement,\r\n scrollbarHorizontal: translateScrollbarsSetupElement(_horizontal),\r\n scrollbarVertical: translateScrollbarsSetupElement(_vertical),\r\n }\r\n );\r\n },\r\n update: (_force?: boolean) => setupsUpdate({ _force, _takeRecords: true }),\r\n destroy: bind(destroy, false),\r\n plugin:

(plugin: P) =>\r\n instancePluginModuleInstances[keys(plugin)[0]] as\r\n | InferInstancePluginModuleInstance

\r\n | undefined,\r\n };\r\n\r\n push(destroyFns, [setupsCanceled]);\r\n\r\n // valid inside plugins\r\n addInstance(instanceTarget, instance);\r\n\r\n // init plugins\r\n registerPluginModuleInstances(pluginModules, OverlayScrollbars, [\r\n instance,\r\n addPluginEvent,\r\n instancePluginModuleInstances,\r\n ]);\r\n\r\n if (\r\n cancelInitialization(\r\n setupsElements._structureSetupElements._isBody,\r\n !targetIsElement && target.cancel\r\n )\r\n ) {\r\n destroy(true);\r\n return instance;\r\n }\r\n\r\n push(destroyFns, setupsConstruct());\r\n\r\n triggerEvent('initialized', [instance]);\r\n\r\n instance.update(true);\r\n\r\n return instance;\r\n }\r\n return potentialInstance!;\r\n};\r\n\r\nOverlayScrollbars.plugin = (plugins: Plugin | Plugin[]) => {\r\n const isArr = isArray(plugins);\r\n const pluginsToAdd: Plugin[] =\r\n isArr ? plugins : [plugins];\r\n const result = pluginsToAdd.map(\r\n (plugin) => registerPluginModuleInstances(plugin, OverlayScrollbars)[0]\r\n );\r\n addPlugins(pluginsToAdd);\r\n return isArr ? result : (result[0] as any);\r\n};\r\nOverlayScrollbars.valid = (osInstance: any): osInstance is OverlayScrollbars => {\r\n const hasElmsFn = osInstance && (osInstance as OverlayScrollbars).elements;\r\n const elements = isFunction(hasElmsFn) && hasElmsFn();\r\n return isPlainObject(elements) && !!getInstance(elements.target);\r\n};\r\nOverlayScrollbars.env = () => {\r\n const {\r\n _nativeScrollbarsSize,\r\n _nativeScrollbarsOverlaid,\r\n _nativeScrollbarsHiding,\r\n _rtlScrollBehavior,\r\n _scrollTimeline,\r\n _staticDefaultInitialization,\r\n _staticDefaultOptions,\r\n _getDefaultInitialization,\r\n _setDefaultInitialization,\r\n _getDefaultOptions,\r\n _setDefaultOptions,\r\n } = getEnvironment();\r\n return assignDeep(\r\n {},\r\n {\r\n scrollbarsSize: _nativeScrollbarsSize,\r\n scrollbarsOverlaid: _nativeScrollbarsOverlaid,\r\n scrollbarsHiding: _nativeScrollbarsHiding,\r\n rtlScrollBehavior: _rtlScrollBehavior,\r\n scrollTimeline: _scrollTimeline,\r\n staticDefaultInitialization: _staticDefaultInitialization,\r\n staticDefaultOptions: _staticDefaultOptions,\r\n\r\n getDefaultInitialization: _getDefaultInitialization,\r\n setDefaultInitialization: _setDefaultInitialization,\r\n getDefaultOptions: _getDefaultOptions,\r\n setDefaultOptions: _setDefaultOptions,\r\n }\r\n );\r\n};\r\n","import type {\r\n Options,\r\n PartialOptions,\r\n OverflowBehavior,\r\n ScrollbarsVisibilityBehavior,\r\n ScrollbarsAutoHideBehavior,\r\n} from '~/options';\r\nimport type { OptionsTemplate, OptionsTemplateValue } from './validation';\r\nimport type { StaticPlugin } from '~/plugins';\r\nimport { validateOptions, optionsTemplateTypes as oTypes } from './validation';\r\n\r\nexport const optionsValidationPluginModuleName = '__osOptionsValidationPlugin';\r\n\r\nexport const OptionsValidationPlugin = /* @__PURE__ */ (() => ({\r\n [optionsValidationPluginModuleName]: {\r\n static: () => {\r\n const numberAllowedValues: OptionsTemplateValue = oTypes.number;\r\n const booleanAllowedValues: OptionsTemplateValue = oTypes.boolean;\r\n const arrayNullValues: OptionsTemplateValue | null> = [\r\n oTypes.array,\r\n oTypes.null,\r\n ];\r\n const overflowAllowedValues: OptionsTemplateValue =\r\n 'hidden scroll visible visible-hidden';\r\n const scrollbarsVisibilityAllowedValues: OptionsTemplateValue =\r\n 'visible hidden auto';\r\n const scrollbarsAutoHideAllowedValues: OptionsTemplateValue =\r\n 'never scroll leavemove';\r\n\r\n const optionsTemplate: OptionsTemplate = {\r\n // resize: resizeAllowedValues, // none || both || horizontal || vertical || n || b ||\r\n paddingAbsolute: booleanAllowedValues, // true || false\r\n showNativeOverlaidScrollbars: booleanAllowedValues, // true || false\r\n update: {\r\n elementEvents: arrayNullValues, // array of tuples || null\r\n attributes: arrayNullValues,\r\n debounce: [oTypes.number, oTypes.array, oTypes.null], // number || number array || null\r\n ignoreMutation: [oTypes.function, oTypes.null], // function || null\r\n },\r\n overflow: {\r\n x: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n y: overflowAllowedValues, // visible-hidden || visible-scroll || hidden || scrol\r\n },\r\n scrollbars: {\r\n theme: [oTypes.string, oTypes.null], // string || null\r\n visibility: scrollbarsVisibilityAllowedValues, // visible || hidden || auto || v ||\r\n autoHide: scrollbarsAutoHideAllowedValues, // never || scroll || leave || move ||\r\n autoHideDelay: numberAllowedValues, // number\r\n autoHideSuspend: booleanAllowedValues, // true || false\r\n dragScroll: booleanAllowedValues, // true || false\r\n clickScroll: booleanAllowedValues, // true || false\r\n pointers: [oTypes.array, oTypes.null], // string array\r\n },\r\n /*\r\n textarea: {\r\n dynWidth: booleanAllowedValues, // true || false\r\n dynHeight: booleanAllowedValues, // true || false\r\n inheritedAttrs: stringArrayNullAllowedValues, // string || array || nul\r\n },\r\n */\r\n };\r\n return (options: PartialOptions, doWriteErrors?: boolean): PartialOptions => {\r\n const [validated, foreign] = validateOptions(optionsTemplate, options, doWriteErrors);\r\n return { ...foreign, ...validated };\r\n };\r\n },\r\n },\r\n}))() satisfies StaticPlugin;\r\n","import { template } from \"@ember/template-compiler\";\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { CompositeCommand } from 'editor/models/command';\nimport type { MidiEvent } from 'editor/models/song';\nimport { UpdateMidiEventVelocityCommand } from 'editor/models/song-commands';\nimport type UndoManagerService from 'editor/services/undo-manager';\nimport constrainValue from 'editor/utils/constrain-value';\ninterface VelocityValuesSignature {\n Element: HTMLDivElement;\n Args: {\n events: MidiEvent[];\n defaultValue: number;\n // eslint-disable-next-line no-unused-vars\n setDefault: (value: number) => void;\n };\n Blocks: {\n };\n}\nexport default class VelocityValues extends Component {\n @service\n undoManager: UndoManagerService;\n constructor(owner1: unknown, args1: VelocityValuesSignature['Args']){\n super(owner1, args1);\n }\n get events() {\n return this.args.events;\n }\n get hasEvents() {\n return this.events.length > 0;\n }\n get hasMultipleEvents() {\n return this.events.length > 1 && this.minValue !== this.maxValue;\n }\n get minValue() {\n return this.events.reduce((min1, event1)=>Math.min(min1, event1.velocity), 127);\n }\n get maxValue() {\n return this.events.reduce((max1, event1)=>Math.max(max1, event1.velocity), 0);\n }\n @action\n updateMinValue(ev1: Event) {\n const input1 = ev1.target as HTMLInputElement;\n const oldMin1 = this.minValue;\n const oldMax1 = this.maxValue;\n let newMin1 = parseInt(input1.value, 10);\n if (isNaN(newMin1)) {\n newMin1 = 0;\n }\n if (newMin1 == oldMin1) {\n return;\n }\n let commands1: UpdateMidiEventVelocityCommand[] = [];\n if (this.events.length === 1 || this.minValue === this.maxValue) {\n const newVelocity1 = newMin1;\n this.events.forEach((event1)=>{\n commands1.push(new UpdateMidiEventVelocityCommand(event1, event1.velocity, newVelocity1));\n });\n } else {\n this.events.forEach((event1)=>{\n const newVelocity1 = Math.min(127, Math.round(((event1.velocity - oldMin1) / (oldMax1 - oldMin1)) * (oldMax1 - newMin1) + newMin1));\n commands1.push(new UpdateMidiEventVelocityCommand(event1, event1.velocity, newVelocity1));\n });\n }\n this.undoManager.executeCommand(new CompositeCommand(commands1[0]!.name, commands1));\n }\n @action\n updateMaxValue(ev1: Event) {\n const input1 = ev1.target as HTMLInputElement;\n const oldMin1 = this.minValue;\n const oldMax1 = this.maxValue;\n let newMax1 = parseInt(input1.value, 10);\n if (isNaN(newMax1)) {\n newMax1 = 127;\n }\n if (newMax1 == oldMax1) {\n return;\n }\n const commands1 = this.events.map((event1)=>{\n const newVelocity1 = Math.min(127, Math.round(((event1.velocity - oldMin1) / (oldMax1 - oldMin1)) * (newMax1 - oldMin1) + oldMin1));\n return new UpdateMidiEventVelocityCommand(event1, event1.velocity, newVelocity1);\n });\n this.undoManager.executeCommand(new CompositeCommand(commands1[0]!.name, commands1));\n }\n @action\n setDefaultValue(ev1: Event) {\n const input1 = ev1.target as HTMLInputElement;\n const newDefault1 = parseInt(input1.value, 10);\n if (isNaN(newDefault1)) {\n return;\n }\n this.args.setDefault(constrainValue(newDefault1, 0, 127));\n }\n static{\n template(`\n

\n {{#if this.hasEvents}}\n \n {{#if this.hasMultipleEvents}}\n -\n {{/if}}\n {{else}}\n \n {{/if}}\n
\n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n VelocityValues: typeof VelocityValues;\n }\n}\n","import { template } from \"@ember/template-compiler\";\nimport { registerDestructor } from '@ember/destroyable';\nimport { array, fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport { scheduleOnce } from '@ember/runloop';\nimport { service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport eq from 'editor/helpers/eq';\nimport gte from 'editor/helpers/gte';\nimport not from 'editor/helpers/not';\nimport pick from 'editor/helpers/pick';\nimport type Command from 'editor/models/command';\nimport { CompositeCommand } from 'editor/models/command';\nimport Drumset, { Instrument } from 'editor/models/drumset';\nimport { MidiEvent, PartType, SectionType } from 'editor/models/song';\nimport { AddMidiEventCommand, AddMidiEventsCommand, ChangeTrigPosCommand, DoubleBeatCommand, FilterOverlappingMidiEventsCommand, QuantizeTrackCommand, RemoveMidiEventCommand, RemoveMidiEventsCommand, UpdateMidiEventLengthCommand, UpdateMidiEventNoteCommand, UpdateMidiEventTickCommand, UpdateMidiEventVelocityCommand, UpdateTimeSignatureDenominatorCommand, UpdateTimeSignatureNumeratorCommand, UpdateTrackBarCountCommand } from 'editor/models/song-commands';\nimport disabled from 'editor/modifiers/disabled';\nimport onKey from 'editor/modifiers/on-key';\nimport selected from 'editor/modifiers/selected';\nimport PasteboardService from 'editor/services/pasteboard';\nimport SongPlayer, { SelectedTrack } from 'editor/services/song-player';\nimport UndoManagerService from 'editor/services/undo-manager';\nimport { bar, barBeat, beat, beatFactor, beatTicks } from 'editor/utils/music-utils';\nimport unique from 'editor/utils/unique';\nimport { modifier } from 'ember-modifier';\nimport { OverlayScrollbars } from 'overlayscrollbars';\nimport Button from './button';\nimport VelocityValues from './velocity-values';\nimport type ProjectManagerService from 'editor/services/project-manager';\nfunction roundPixels(pixels1: number) {\n return Math.round((pixels1 + Number.EPSILON) * 1000) / 1000;\n}\n// We need the modifier to re-run every time `ticks` changes\n// eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars\nconst updatePlayHead = modifier((element1: HTMLElement, [ticks1]: [number])=>{\n element1.scrollIntoView({\n inline: 'center',\n block: 'nearest'\n });\n});\nfunction intersectRect(r11: DOMRect, r21: DOMRect) {\n return !(r21.left > r11.right || r21.right < r11.left || r21.top > r11.bottom || r21.bottom < r11.top);\n}\ntype scrollDirection = 'x' | 'y' | 'both';\nfunction getScrollParent(element1: HTMLElement, xy1: scrollDirection = 'both') {\n let parent1: HTMLElement | null = element1;\n const scrollHeight1 = xy1 === 'y' || xy1 === 'both';\n const scrollWidth1 = xy1 === 'x' || xy1 === 'both';\n while(parent1){\n if ((scrollHeight1 && parent1.scrollHeight > parent1.clientHeight) || (scrollWidth1 && parent1.scrollWidth > parent1.clientWidth)) {\n return parent1;\n }\n parent1 = parent1.parentElement;\n }\n return element1;\n}\nfunction findElementAtPoint(x1: number, y1: number, match1: string): HTMLElement | undefined {\n return document.elementsFromPoint(x1, y1).find((el1)=>el1.matches(match1));\n}\nfunction buildRect($element1: HTMLElement, $offsetParent1?: HTMLElement) {\n const rect1 = $element1.getBoundingClientRect();\n const top1 = $element1.offsetTop;\n const left1 = $element1.offsetLeft;\n return {\n top: $offsetParent1 ? top1 + $offsetParent1.offsetTop : top1,\n left: $offsetParent1 ? left1 + $offsetParent1.offsetLeft : left1,\n width: rect1.width,\n height: rect1.height\n };\n}\nfunction outerRect($elements1: NodeList, $boundary1: HTMLElement) {\n const outerRect1 = $boundary1.getBoundingClientRect();\n let top1 = Number.MAX_VALUE, left1 = Number.MAX_VALUE, bottom1 = 0, right1 = 0;\n $elements1.forEach(($el1)=>{\n const rect1 = ($el1).getBoundingClientRect();\n const rtop1 = rect1.top - outerRect1.top + $boundary1.offsetTop, rleft1 = rect1.left - outerRect1.left + $boundary1.offsetLeft, rbottom1 = rect1.bottom - outerRect1.top, rright1 = rect1.right - outerRect1.left;\n if (rtop1 < top1) {\n top1 = rtop1;\n }\n if (rleft1 < left1) {\n left1 = rleft1;\n }\n if (rbottom1 > bottom1) {\n bottom1 = rbottom1;\n }\n if (rright1 > right1) {\n right1 = rright1;\n }\n });\n return {\n top: top1,\n left: left1,\n height: bottom1 - top1,\n width: right1 - left1\n };\n}\nconst verticalOverlayScroll = modifier(($element1: HTMLElement, [isTrackMaximised1]: [boolean])=>{\n const scrollTarget1 = document.querySelector('[data-scroll-target]');\n function repositionScrollTarget1() {\n Object.assign(scrollTarget1.style, {\n position: 'absolute',\n top: `${$element1.scrollTop}px`,\n bottom: `${-$element1.scrollTop}px`\n });\n }\n $element1.addEventListener('scroll', repositionScrollTarget1);\n if (isTrackMaximised1) {\n $element1.scrollTop = 0;\n repositionScrollTarget1();\n }\n return ()=>{\n $element1.removeEventListener('scroll', repositionScrollTarget1);\n };\n});\nconst horizontalOverlayScroll = modifier(($element1: HTMLElement)=>{\n const scrollTarget1 = document.querySelector('[data-scroll-target]');\n const scrollParent1 = getScrollParent($element1);\n const parentElement1 = scrollParent1.parentElement!;\n const resizeScrollTarget1 = function() {\n const scrollRect1 = scrollParent1.getBoundingClientRect();\n const parentRect1 = parentElement1.getBoundingClientRect()!;\n Object.assign(scrollTarget1.style, {\n left: `${scrollRect1.left - parentRect1.left}px`\n });\n };\n const resizeObserver1 = new ResizeObserver(resizeScrollTarget1);\n resizeObserver1.observe(parentElement1);\n const instance1 = OverlayScrollbars({\n target: $element1,\n scrollbars: {\n slot: scrollTarget1\n }\n }, {\n scrollbars: {\n theme: 'os-theme-dark',\n visibility: 'auto',\n autoHide: 'never',\n autoHideDelay: 1000,\n autoHideSuspend: true\n }\n });\n instance1.on('updated', resizeScrollTarget1);\n return ()=>{\n resizeObserver1.disconnect();\n instance1.destroy();\n };\n});\nconst selectRegion = modifier(($element1: HTMLElement, [match1]: [string])=>{\n let selecting1 = false;\n let $selectRegion1: HTMLDivElement | undefined = undefined;\n let elementRect1: DOMRect | undefined = undefined;\n let regionRect1: DOMRect | undefined = undefined;\n let $scrollYParent1: HTMLElement;\n let $scrollXParent1: HTMLElement;\n let startX1 = 0, startY1 = 0, top1 = 0, left1 = 0;\n let doubleClickTimer1: number | undefined;\n const onMouseMove1 = (ev1: MouseEvent)=>{\n if (!selecting1) {\n return;\n }\n if ($selectRegion1) {\n window.getSelection()?.removeAllRanges();\n let width1 = ev1.clientX + $scrollXParent1.scrollLeft - startX1, height1 = ev1.clientY + $scrollYParent1.scrollTop - startY1;\n let t1 = top1, l1 = left1;\n if (width1 < 0) {\n l1 = left1 + width1;\n }\n if (left1 + width1 > elementRect1!.width) {\n width1 = elementRect1!.width - left1;\n }\n if (l1 < 0) {\n width1 -= l1;\n l1 = 0;\n }\n if (height1 < 0) {\n t1 = top1 + height1;\n }\n if (top1 + height1 > elementRect1!.height) {\n height1 = elementRect1!.height - top1;\n }\n if (t1 < 0) {\n height1 -= t1;\n t1 = 0;\n }\n regionRect1!.x = l1;\n regionRect1!.y = t1;\n regionRect1!.width = width1;\n regionRect1!.height = height1;\n Object.assign($selectRegion1.style, {\n top: `${t1}px`,\n left: `${l1}px`,\n width: `${Math.abs(width1)}px`,\n height: `${Math.abs(height1)}px`\n });\n // find elements of matching class that intersect with the region\n const rect1 = $selectRegion1.getBoundingClientRect();\n Array.from($element1.querySelectorAll(match1)).forEach((el1)=>{\n if (intersectRect(rect1, el1.getBoundingClientRect())) {\n el1.dispatchEvent(new CustomEvent('bbff.select', {\n detail: {\n ctrlKey: true,\n metaKey: true,\n shiftKey: true,\n append: true\n }\n }));\n } else {\n if (!ev1.shiftKey) {\n el1.dispatchEvent(new CustomEvent('bbff.deselect'));\n }\n }\n });\n } else {\n if (Math.abs(startX1 - ev1.clientX) > 5 || Math.abs(startY1 - ev1.clientY) > 5) {\n $selectRegion1 = document.createElement('div');\n Object.assign($selectRegion1.style, {\n position: 'absolute',\n border: '1px dashed black',\n top: `${top1}px`,\n left: `${left1}px`\n });\n $element1.appendChild($selectRegion1);\n }\n }\n };\n const onMouseUp1 = (ev1: MouseEvent)=>{\n document.removeEventListener('mouseup', onMouseUp1);\n document.removeEventListener('mousemove', onMouseMove1);\n // If the mouse has not moved?\n if (Math.abs(startX1 - (ev1.clientX + $scrollXParent1.scrollLeft)) < 5 && Math.abs(startY1 - (ev1.clientY + $scrollYParent1.scrollTop)) < 5) {\n const $el1 = findElementAtPoint(ev1.clientX, ev1.clientY, match1);\n if ($el1) {\n $el1.dispatchEvent(new CustomEvent('bbff.select', {\n detail: {\n ctrlKey: ev1.ctrlKey,\n metaKey: ev1.metaKey,\n shiftKey: ev1.shiftKey\n }\n }));\n }\n if (ev1.detail === 2) {\n clearTimeout(doubleClickTimer1);\n document.elementFromPoint(ev1.clientX, ev1.clientY)?.dispatchEvent(new CustomEvent('bbff.add-event', {\n bubbles: true,\n detail: {\n x: regionRect1!.x,\n y: regionRect1!.y\n }\n }));\n } else {\n doubleClickTimer1 = setTimeout(()=>{\n if (!$el1) {\n document.elementFromPoint(ev1.clientX, ev1.clientY)?.dispatchEvent(new CustomEvent('bbff.set-track-position', {\n bubbles: true,\n detail: {\n x: regionRect1!.x\n }\n }));\n if (!ev1.shiftKey) {\n $element1.dispatchEvent(new CustomEvent('bbff.deselect-all'));\n }\n }\n }, 300);\n }\n }\n if ($selectRegion1) {\n $selectRegion1.remove();\n $selectRegion1 = undefined;\n }\n };\n const onMouseDown1 = (ev1: MouseEvent)=>{\n selecting1 = false;\n elementRect1 = $element1.getBoundingClientRect();\n $scrollYParent1 = getScrollParent($element1, 'y');\n $scrollXParent1 = getScrollParent($element1, 'x');\n const $el1 = findElementAtPoint(ev1.clientX, ev1.clientY, match1);\n if (!$el1) {\n selecting1 = true;\n }\n if (selecting1) {\n window.getSelection()?.removeAllRanges();\n }\n startX1 = ev1.clientX + $scrollXParent1.scrollLeft;\n startY1 = ev1.clientY + $scrollYParent1.scrollTop;\n top1 = ev1.clientY - elementRect1!.top;\n left1 = ev1.clientX - elementRect1!.left;\n regionRect1 = new DOMRect();\n regionRect1.x = left1;\n regionRect1.y = top1;\n regionRect1.width = 0;\n regionRect1.height = 0;\n document.addEventListener('mouseup', onMouseUp1);\n document.addEventListener('mousemove', onMouseMove1);\n };\n $element1.addEventListener('mousedown', onMouseDown1);\n return ()=>{\n $element1.removeEventListener('mousedown', onMouseDown1);\n };\n});\nconst moveEvents = modifier(($boundaryElement1: HTMLElement, [snapTo1]: [number])=>{\n const eventMatch1 = '.midi-event', instrumentMatch1 = '.instrument';\n let $parent1: HTMLElement;\n let $midiEventElement1: HTMLElement;\n let $instrument1: HTMLElement;\n let offsetX1 = 0, offsetY1 = 0, dragOffsetX1 = 0, dragOffsetY1 = 0, elementRect1 = {\n top: 0,\n left: 0,\n width: 0,\n height: 0\n }, selectedRect1 = {\n top: 0,\n left: 0,\n width: 0,\n height: 0\n }, boundaryRect1 = {\n top: 0,\n left: 0,\n width: 0,\n height: 0\n };\n const moveTo1 = (x1: number, y1: number)=>{\n offsetX1 = x1;\n offsetY1 = y1;\n $midiEventElement1.style.transform = `translate3d(${x1}px, ${y1}px, 0)`;\n };\n const onMouseMove1 = (ev1: MouseEvent)=>{\n ev1.preventDefault();\n // has the mouse moved?\n let moved1 = true;\n if (Math.abs(ev1.clientX - dragOffsetX1) < 5 && Math.abs(ev1.clientY - dragOffsetY1) < 5) {\n moved1 = false;\n return;\n }\n let x1 = ev1.clientX - dragOffsetX1;\n let y1 = ev1.clientY - dragOffsetY1;\n const $instr1 = findElementAtPoint(ev1.clientX, ev1.clientY, instrumentMatch1);\n if ($instr1) {\n $instrument1 = $instr1;\n if (elementRect1.top + y1 != $instrument1.offsetTop) {\n y1 = $instrument1.offsetTop - elementRect1.top;\n }\n }\n if (!ev1.metaKey && !ev1.ctrlKey) {\n x1 = Math.round(x1 / snapTo1) * snapTo1;\n }\n let selectionY1 = elementRect1.top - selectedRect1.top, selectionX1 = elementRect1.left - selectedRect1.left;\n // Make sure the combined selection doesn't move outside the boundary\n if (elementRect1.top - selectionY1 + y1 < 0) {\n y1 = -selectionY1;\n }\n if (selectedRect1.top + selectedRect1.height + y1 > boundaryRect1.height) {\n y1 = boundaryRect1.height - selectedRect1.top - selectedRect1.height;\n }\n if (elementRect1.left - selectionX1 + x1 < boundaryRect1.left) {\n x1 = boundaryRect1.left + selectionX1 - elementRect1.left;\n }\n if (selectedRect1.left + selectedRect1.width + x1 > boundaryRect1.left + boundaryRect1.width) {\n x1 = boundaryRect1.left + boundaryRect1.width - selectedRect1.left - selectedRect1.width;\n }\n const instruments1 = y1 / elementRect1.height;\n if (!ev1.metaKey && !ev1.ctrlKey) {\n x1 -= elementRect1.left % snapTo1;\n }\n $midiEventElement1.dispatchEvent(new CustomEvent('bbff.move', {\n bubbles: true,\n detail: {\n moved: moved1,\n x: x1,\n y: y1,\n instruments: instruments1,\n snap: !(ev1.metaKey || ev1.ctrlKey)\n }\n }));\n moveTo1(x1, y1);\n };\n const onMouseUp1 = (ev1: MouseEvent)=>{\n document.removeEventListener('mouseup', onMouseUp1);\n document.removeEventListener('mousemove', onMouseMove1);\n // has the mouse moved?\n let moved1 = true;\n if (Math.abs(ev1.clientX - dragOffsetX1) < 5 && Math.abs(ev1.clientY - dragOffsetY1) < 5) {\n moved1 = false;\n return;\n }\n const instruments1 = offsetY1 / elementRect1.height;\n $midiEventElement1.dispatchEvent(new CustomEvent('bbff.move-end', {\n bubbles: true,\n detail: {\n moved: moved1,\n x: offsetX1,\n instruments: instruments1,\n snap: !(ev1.metaKey || ev1.ctrlKey)\n }\n }));\n offsetX1 = 0;\n offsetY1 = 0;\n dragOffsetX1 = 0;\n dragOffsetY1 = 0;\n };\n const onMouseDown1 = (ev1: MouseEvent)=>{\n boundaryRect1 = buildRect($boundaryElement1);\n const $el1 = findElementAtPoint(ev1.clientX, ev1.clientY, eventMatch1);\n if ($el1 && !ev1.shiftKey) {\n if ($el1 && !$el1.matches('.selected')) {\n $el1.dispatchEvent(new CustomEvent('bbff.select', {\n bubbles: true,\n detail: {\n ctrlKey: ev1.ctrlKey,\n metaKey: ev1.metaKey,\n shiftKey: ev1.metaKey\n }\n }));\n }\n $instrument1 = (findElementAtPoint(ev1.clientX, ev1.clientY, instrumentMatch1));\n $midiEventElement1 = $el1;\n $parent1 = $midiEventElement1.parentElement;\n elementRect1 = buildRect($midiEventElement1, $parent1);\n if ($parent1.offsetParent) {\n const selectedEvents1 = $boundaryElement1.querySelectorAll(`${eventMatch1}.selected`);\n selectedRect1 = outerRect(selectedEvents1, $parent1.offsetParent);\n $midiEventElement1.dispatchEvent(new CustomEvent('bbff.move-start', {\n bubbles: true,\n detail: {}\n }));\n }\n } else {\n return;\n }\n dragOffsetX1 = ev1.clientX - offsetX1;\n dragOffsetY1 = ev1.clientY - offsetY1;\n document.addEventListener('mousemove', onMouseMove1);\n document.addEventListener('mouseup', onMouseUp1);\n };\n const cancelDragNDrop1 = (e1: DragEvent)=>{\n e1.preventDefault();\n };\n $boundaryElement1.addEventListener('mousedown', onMouseDown1);\n $boundaryElement1.addEventListener('dragstart', cancelDragNDrop1);\n return ()=>{\n $boundaryElement1.removeEventListener('dragstart', cancelDragNDrop1);\n $boundaryElement1.removeEventListener('mousedown', onMouseDown1);\n };\n});\nconst changeVelocity = modifier(($boundaryElement1: HTMLElement)=>{\n const eventMatch1 = '.velocity-event';\n let $velocityElement1: HTMLElement;\n let offsetY1 = 0, dragOffsetY1 = 0, elementRect1 = {\n top: 0,\n left: 0,\n width: 0,\n height: 0\n }, selectedRect1 = {\n top: 0,\n left: 0,\n width: 0,\n height: 0\n }, boundaryRect1 = {\n top: 0,\n left: 0,\n width: 0,\n height: 0\n };\n const moveTo1 = (y1: number)=>{\n offsetY1 = y1;\n $velocityElement1.style.transform = `translate3d(0, ${y1}px, 0)`;\n };\n const onMouseMove1 = (ev1: MouseEvent)=>{\n ev1.preventDefault();\n let y1 = ev1.clientY - dragOffsetY1;\n const velocityChange1 = -Math.round((y1 / boundaryRect1.height) * 127);\n // Make sure the combined selection doesn't move outside the boundary\n let selectionY1 = elementRect1.top - selectedRect1.top;\n if (elementRect1.top - selectionY1 + y1 < boundaryRect1.top) {\n y1 = boundaryRect1.top - elementRect1.top;\n }\n if (selectedRect1.top + selectedRect1.height + y1 > boundaryRect1.top + boundaryRect1.height) {\n y1 = boundaryRect1.top + boundaryRect1.height - selectedRect1.top - selectedRect1.height;\n }\n $velocityElement1.dispatchEvent(new CustomEvent('bbff.velocity-change', {\n bubbles: true,\n detail: {\n y: y1,\n change: velocityChange1,\n command: ev1.metaKey || ev1.ctrlKey\n }\n }));\n moveTo1(y1);\n };\n const onMouseUp1 = ()=>{\n document.removeEventListener('mouseup', onMouseUp1);\n document.removeEventListener('mousemove', onMouseMove1);\n $velocityElement1.dispatchEvent(new CustomEvent('bbff.velocity-change-end', {\n bubbles: true,\n detail: {}\n }));\n offsetY1 = 0;\n dragOffsetY1 = 0;\n };\n const onMouseDown1 = (ev1: MouseEvent)=>{\n const $el1 = findElementAtPoint(ev1.clientX, ev1.clientY, eventMatch1);\n if ($el1 && !$el1.matches('.selected')) {\n $el1.dispatchEvent(new CustomEvent('bbff.select', {\n bubbles: true,\n detail: {\n ctrlKey: true,\n metaKey: true,\n shiftKey: true,\n append: true\n }\n }));\n }\n if ($el1 && !ev1.shiftKey) {\n $velocityElement1 = $el1;\n elementRect1 = buildRect($velocityElement1, $boundaryElement1);\n const selectedEvents1 = $boundaryElement1.querySelectorAll(`${eventMatch1}.selected`);\n selectedRect1 = outerRect(selectedEvents1, $boundaryElement1);\n boundaryRect1 = buildRect($boundaryElement1);\n boundaryRect1.top = 0;\n $velocityElement1.dispatchEvent(new CustomEvent('bbff.velocity-change-start', {\n bubbles: true,\n detail: {}\n }));\n } else {\n return;\n }\n dragOffsetY1 = ev1.clientY - offsetY1;\n document.addEventListener('mousemove', onMouseMove1);\n document.addEventListener('mouseup', onMouseUp1);\n };\n const cancelDragNDrop1 = (e1: DragEvent)=>{\n e1.preventDefault();\n };\n $boundaryElement1.addEventListener('mousedown', onMouseDown1);\n $boundaryElement1.addEventListener('dragstart', cancelDragNDrop1);\n return ()=>{\n $boundaryElement1.removeEventListener('dragstart', cancelDragNDrop1);\n $boundaryElement1.removeEventListener('mousedown', onMouseDown1);\n };\n});\nconst adjustLoopMarker = modifier(($loopMarker1: HTMLElement, [snapTo1]: [number])=>{\n let $parentElement1: HTMLElement;\n let $leftHandle1: HTMLElement;\n let offsetX1 = 0, startX1 = 0, dragOffsetX1 = 0, elementRect1 = {\n top: 0,\n left: 0,\n width: 0,\n height: 0\n }, parentRect1 = {\n top: 0,\n left: 0,\n width: 0,\n height: 0\n };\n const moveTo1 = (x1: number)=>{\n x1 = Math.min(Math.max(0, x1), parentRect1.width - snapTo1);\n const newWidth1 = Math.max(snapTo1, elementRect1.width + startX1 - x1);\n offsetX1 = x1;\n $loopMarker1.style.marginLeft = `${x1}px`;\n $loopMarker1.style.width = `${newWidth1}px`;\n };\n const onMouseMove1 = (ev1: MouseEvent)=>{\n ev1.preventDefault();\n let x1 = ev1.clientX - dragOffsetX1;\n x1 = Math.round(x1 / snapTo1) * snapTo1;\n moveTo1(x1);\n };\n const onPointerUp1 = (ev1: PointerEvent)=>{\n document.removeEventListener('pointerup', onPointerUp1);\n $leftHandle1.releasePointerCapture(ev1.pointerId);\n };\n const onMouseUp1 = ()=>{\n document.removeEventListener('mouseup', onMouseUp1);\n document.removeEventListener('mousemove', onMouseMove1);\n $leftHandle1.dispatchEvent(new CustomEvent('bbff.trig-pos-change', {\n bubbles: true,\n detail: {\n x: offsetX1\n }\n }));\n offsetX1 = 0;\n dragOffsetX1 = 0;\n };\n const onPointerDown1 = (ev1: PointerEvent)=>{\n document.addEventListener('pointerup', onPointerUp1);\n $leftHandle1.setPointerCapture(ev1.pointerId);\n };\n const onMouseDown1 = (ev1: MouseEvent)=>{\n if ($loopMarker1.attributes.getNamedItem('aria-disabled')?.value === 'true') {\n return;\n }\n $parentElement1 = $loopMarker1.parentElement;\n parentRect1 = buildRect($parentElement1);\n elementRect1 = buildRect($loopMarker1);\n offsetX1 = parseInt($loopMarker1.style.marginLeft);\n startX1 = offsetX1;\n dragOffsetX1 = ev1.clientX - offsetX1;\n document.addEventListener('mousemove', onMouseMove1);\n document.addEventListener('mouseup', onMouseUp1);\n };\n const cancelDragNDrop1 = (e1: DragEvent)=>{\n e1.preventDefault();\n };\n $leftHandle1 = $loopMarker1.querySelector('.left-handle')!;\n if (!$leftHandle1) {\n console.error('no left handle for loop marker');\n return;\n }\n $leftHandle1.addEventListener('mousedown', onMouseDown1);\n $leftHandle1.addEventListener('pointerdown', onPointerDown1);\n $leftHandle1.addEventListener('dragstart', cancelDragNDrop1);\n return ()=>{\n $leftHandle1.removeEventListener('dragstart', cancelDragNDrop1);\n $leftHandle1.addEventListener('pointerdown', onPointerDown1);\n $leftHandle1.removeEventListener('mousedown', onMouseDown1);\n };\n});\nconst adjustMidiLength = modifier(($boundaryElement1: HTMLElement, [snapTo1]: [number])=>{\n const eventMatch1 = '.midi-event .rhandle';\n let $midiEventElement1: HTMLElement;\n let $rightHandle1: HTMLElement;\n let startX1 = 0, startWidth1 = 0, dragOffsetX1 = 0, elementRect1 = {\n top: 0,\n left: 0,\n width: 0,\n height: 0\n };\n const moveTo1 = (x1: number, width1: number)=>{\n $midiEventElement1.style.left = `${x1}px`;\n $midiEventElement1.style.width = `${width1}px`;\n };\n function calculateWidth1(x1: number, startX1: number, startWidth1: number, snap1 = false) {\n x1 = x1 + startX1 + startWidth1;\n let minWidth1 = 1;\n if (snap1) {\n x1 = Math.ceil(x1 / snapTo1) * snapTo1;\n minWidth1 = Math.floor((startX1 + snapTo1) / snapTo1) * snapTo1 - startX1;\n }\n return Math.max(minWidth1, x1 - startX1);\n }\n const onMouseMove1 = (ev1: MouseEvent)=>{\n // disable moving\n ev1.preventDefault();\n const x1 = ev1.clientX - dragOffsetX1;\n const width1 = calculateWidth1(x1, startX1, startWidth1, !(ev1.metaKey || ev1.ctrlKey));\n const adjustment1 = width1 - startWidth1;\n $midiEventElement1.dispatchEvent(new CustomEvent('bbff.resize', {\n bubbles: true,\n detail: {\n width: width1,\n adjustment: adjustment1,\n snap: !(ev1.metaKey || ev1.ctrlKey)\n }\n }));\n moveTo1(startX1, width1);\n };\n const onPointerUp1 = (ev1: PointerEvent)=>{\n document.removeEventListener('pointerup', onPointerUp1);\n $rightHandle1?.releasePointerCapture(ev1.pointerId);\n };\n const onMouseUp1 = (ev1: MouseEvent)=>{\n document.removeEventListener('mouseup', onMouseUp1);\n document.removeEventListener('mousemove', onMouseMove1);\n const x1 = ev1.clientX - dragOffsetX1;\n const width1 = calculateWidth1(x1, startX1, startWidth1, !(ev1.metaKey || ev1.ctrlKey));\n const adjustment1 = width1 - startWidth1;\n $midiEventElement1.dispatchEvent(new CustomEvent('bbff.resize-end', {\n bubbles: true,\n detail: {\n width: width1,\n adjustment: adjustment1,\n snap: !(ev1.metaKey || ev1.ctrlKey)\n }\n }));\n startX1 = 0;\n startWidth1 = 0;\n dragOffsetX1 = 0;\n };\n const onPointerDown1 = (ev1: PointerEvent)=>{\n document.addEventListener('pointerup', onPointerUp1);\n const $el1 = findElementAtPoint(ev1.clientX, ev1.clientY, eventMatch1);\n if ($el1) {\n $el1.setPointerCapture(ev1.pointerId);\n }\n };\n const onMouseDown1 = (ev1: MouseEvent)=>{\n const $el1 = findElementAtPoint(ev1.clientX, ev1.clientY, eventMatch1);\n if ($el1) {\n ev1.stopImmediatePropagation();\n $rightHandle1 = $el1;\n $midiEventElement1 = $el1.parentElement;\n if ($midiEventElement1.attributes.getNamedItem('aria-disabled')?.value === 'true') {\n return;\n }\n $midiEventElement1.dispatchEvent(new CustomEvent('bbff.resize-start', {\n bubbles: true,\n detail: {}\n }));\n } else {\n return;\n }\n elementRect1 = buildRect($midiEventElement1);\n startX1 = roundPixels(elementRect1.left);\n startWidth1 = roundPixels(elementRect1.width);\n dragOffsetX1 = ev1.clientX;\n document.addEventListener('mousemove', onMouseMove1);\n document.addEventListener('mouseup', onMouseUp1);\n };\n const cancelDragNDrop1 = (e1: DragEvent)=>{\n e1.preventDefault();\n };\n $boundaryElement1.addEventListener('mousedown', onMouseDown1);\n $boundaryElement1.addEventListener('pointerdown', onPointerDown1);\n $boundaryElement1.addEventListener('dragstart', cancelDragNDrop1);\n return ()=>{\n $boundaryElement1.removeEventListener('dragstart', cancelDragNDrop1);\n $boundaryElement1.addEventListener('pointerdown', onPointerDown1);\n $boundaryElement1.removeEventListener('mousedown', onMouseDown1);\n };\n});\nfunction findParent($element1: HTMLElement, match1: string) {\n let $parent1 = $element1.parentElement!;\n while($parent1 && !$parent1.matches(match1)){\n $parent1 = $parent1.parentElement!;\n }\n return $parent1;\n}\nconst stickyTop = modifier(($element1: HTMLElement, [parentMatch1]: [string])=>{\n const $parent1 = findParent($element1, parentMatch1);\n const adjuster1 = ()=>{\n $element1.style.top = `${$parent1.scrollTop - 1}px`;\n };\n const resizeObserver1 = new ResizeObserver(()=>{\n adjuster1();\n });\n resizeObserver1.observe($parent1);\n const mutationObserver1 = new MutationObserver(()=>{\n adjuster1();\n });\n mutationObserver1.observe($element1, {\n attributes: true\n });\n $parent1.addEventListener('scroll', adjuster1);\n window.addEventListener('resize', adjuster1);\n return ()=>{\n window.removeEventListener('resize', adjuster1);\n $parent1.removeEventListener('scroll', adjuster1);\n mutationObserver1.disconnect();\n resizeObserver1.disconnect();\n };\n});\nconst stickyBottom = modifier(($element1: HTMLElement, [parentMatch1]: [string])=>{\n const $parent1 = findParent($element1, parentMatch1);\n const bottomScrollBar1 = 1;\n const adjuster1 = ()=>{\n $element1.style.bottom = `${Math.max(0, $parent1.scrollHeight - $parent1.scrollTop - $parent1.clientHeight - bottomScrollBar1)}px`;\n };\n const resizeObserver1 = new ResizeObserver(()=>{\n adjuster1();\n });\n resizeObserver1.observe($parent1);\n const mutationObserver1 = new MutationObserver(()=>{\n adjuster1();\n });\n mutationObserver1.observe($element1, {\n attributes: true\n });\n adjuster1();\n $parent1.addEventListener('scroll', adjuster1);\n window.addEventListener('resize', adjuster1);\n return ()=>{\n window.removeEventListener('resize', adjuster1);\n $parent1.removeEventListener('scroll', adjuster1);\n mutationObserver1.disconnect();\n resizeObserver1.unobserve($parent1);\n };\n});\ninterface TrackEditorSignature {\n Element: HTMLDivElement;\n Args: {\n drumset: Drumset;\n selectedTrack: SelectedTrack;\n trackPosition: number;\n isTrackMaximized: boolean;\n // eslint-disable-next-line no-unused-vars\n setTrackPosition: (position: number) => void;\n };\n Blocks: {\n };\n}\nexport default class TrackEditorComponent extends Component {\n @service\n projectManager: ProjectManagerService;\n @service\n songPlayer: SongPlayer;\n @service\n undoManager: UndoManagerService;\n @service\n pasteboard: PasteboardService;\n @tracked\n _isCollapsed = true;\n @tracked\n division = 16;\n @tracked\n defaultVelocity = 100;\n @tracked\n theme: string | null = localStorage.getItem('theme');\n constructor(owner1: unknown, args1: TrackEditorSignature['Args']){\n super(owner1, args1);\n this.isCollapsed = !this.track.events.length;\n this.handleThemeChange = this.handleThemeChange.bind(this);\n window.addEventListener('themeChange', this.handleThemeChange);\n registerDestructor(this, ()=>{\n this.songPlayer.stop();\n });\n // eslint-disable-next-line ember/no-runloop, ember/no-incorrect-calls-with-inline-anonymous-functions\n scheduleOnce('afterRender', this, this.scrollToBottom);\n }\n handleThemeChange(event1: Event) {\n this.theme = event1.detail.theme;\n }\n get track() {\n return this.args.selectedTrack.track;\n }\n get trigPos() {\n return this.args.selectedTrack.trigPos;\n }\n get tickCount() {\n return this.args.selectedTrack.tickCount;\n }\n get trackPosition() {\n return this.args.trackPosition / this.step;\n }\n get isCollapsed() {\n return this.track.events.length > 0 && this._isCollapsed;\n }\n set isCollapsed(collapse1: boolean) {\n this._isCollapsed = collapse1;\n }\n get beatFactor() {\n return beatFactor(this.track.timeSignatureDenominator);\n }\n // Number of ticks per block at resolution (default: 16ths)\n get step() {\n return (beatTicks(this.track.tickToQuarter, this.track.timeSignatureDenominator) / (this.division / this.track.timeSignatureDenominator));\n }\n pixelsToTicks(pixels1: number) {\n return (pixels1 / this.stepSize) * this.step;\n }\n ticksToPixels(ticks1: number) {\n return (ticks1 / this.step) * this.stepSize;\n }\n get steps() {\n const length1 = (this.track.barCount * this.track.barLength) / this.step + this.extraSteps;\n return Array.from({\n length: length1\n }, (_1, i1)=>i1);\n }\n // A fill track is allowed to have extra steps at the end of a fill\n // and the fill is allowed to start on any step\n get isFillTrack() {\n return (this.args.selectedTrack.part.type != PartType.PART || this.args.selectedTrack.sectionType !== SectionType.MAIN);\n }\n get extraSteps() {\n if (this.isFillTrack) {\n return 2;\n }\n return 0;\n }\n get stepSize() {\n return 40;\n }\n @action\n beatLabel(step1: number) {\n const bar1 = this.bar(step1) + 1;\n const beat1 = this.barBeat(step1);\n const subDivision1 = beat1 % 1;\n let label1 = `${bar1}`;\n if (beat1 > 0) {\n label1 += `.${Math.floor(beat1) + 1}`;\n }\n if (subDivision1 > 0) {\n label1 += `.${Math.ceil((this.division / this.track.timeSignatureDenominator) * subDivision1) + 1}`;\n }\n return label1;\n }\n @action\n bar(step1: number) {\n return bar(step1, this.division, this.track.timeSignatureNumerator, this.track.timeSignatureDenominator);\n }\n @action\n barBeat(step1: number) {\n return barBeat(step1, this.division, this.track.timeSignatureNumerator, this.track.timeSignatureDenominator);\n }\n @action\n beat(step1: number) {\n return beat(step1, this.division, this.track.timeSignatureNumerator, this.track.timeSignatureDenominator);\n }\n @action\n stepColor(step1: number) {\n if (Math.floor(this.beat(step1)) % 2 == 0) {\n return ' bg-gray-100';\n } else {\n return '';\n }\n }\n // This border is not a solid vertical line because of bottom borders\n @action\n stepBorder(step1: number) {\n const b1 = barBeat(step1 + 1, this.division, this.track.timeSignatureNumerator, this.track.timeSignatureDenominator);\n if (b1 === 0) {\n return ' border-gray-600';\n } else {\n return '';\n }\n }\n @action\n trackStyle() {\n return htmlSafe(`width:${((this.track.barCount * this.track.barLength) / this.step + this.extraSteps) * this.stepSize}px`);\n }\n @action\n stepStyle() {\n return htmlSafe(`width:${this.stepSize}px`);\n }\n //this god forsaken function is the cause of the table not regenerating properly when the styles change\n @action\n divisionStyle(step1: number) {\n var bg1;\n var borderColor1;\n bg1 = this.theme == 'dark' ? Math.floor(this.beat(step1)) % 2 === 0 ? 'background-color:#171717' : 'background-color:#1C1C1C' : Math.floor(this.beat(step1)) % 2 === 0 ? 'background-color:#F3F4F6' : '';\n borderColor1 = this.theme == 'dark' ? '#292B2E' : '#E5E7EB';\n return htmlSafe(`position:absolute;top:0;bottom:0;border-right:1px solid ${borderColor1};${bg1};width:${this.stepSize}px;left:${step1 * this.stepSize}px`);\n }\n get lineStyle() {\n return htmlSafe(`height:${this.stepSize}px`);\n }\n get playHeadStyle() {\n if (this.songPlayer.ticks > 0) {\n let maxPos1 = this.ticksToPixels(this.track.totalTicks);\n const position1 = this.ticksToPixels(this.songPlayer.ticks);\n const left1 = Math.min(maxPos1, position1);\n return htmlSafe(`left:${left1}px;width:1px`);\n } else {\n return htmlSafe(`display:none;`);\n }\n }\n get trackPositionStyle() {\n if (this.selectedEvents.length) {\n return htmlSafe(`display:none;`);\n } else {\n // This will reset the track position if the track changes.\n let maxPos1 = this.ticksToPixels(this.track.totalTicks);\n if (this.isFillTrack) {\n maxPos1 += 2 * this.stepSize;\n }\n const left1 = Math.min(maxPos1, Math.floor(this.trackPosition * this.stepSize)) - 1;\n return htmlSafe(`left:${left1}px;width:1px`);\n }\n }\n get loopMarkerStyle() {\n const left1 = this.ticksToPixels(Math.floor(this.trigPos));\n const width1 = this.ticksToPixels(Math.floor(this.tickCount));\n return htmlSafe(`margin-left:${left1}px;width:${width1}px`);\n }\n @action\n eventStyle(event1: MidiEvent) {\n const left1 = this.ticksToPixels(this.trigPos + event1.tick);\n const width1 = this.ticksToPixels(event1.length);\n const saturation1 = event1.velocity / 127 + 0.5;\n return htmlSafe(`left:${left1}px;width:${width1}px;filter:saturate(${saturation1})`);\n }\n @action\n velocityStyle(event1: MidiEvent) {\n const left1 = this.ticksToPixels(this.trigPos + event1.tick);\n const width1 = this.stepSize - 7;\n const bottom1 = (event1.velocity / 127) * 100;\n return htmlSafe(`left:${left1}px;width:${width1}px;bottom:${bottom1}%;`);\n }\n @action\n eventsForInstrument(instrument1: Instrument) {\n return this.track.eventsForInstrument(instrument1.id);\n }\n @action\n toggleCollapsed() {\n this.isCollapsed = !this.isCollapsed;\n }\n @tracked\n selectedEvents: MidiEvent[] = [];\n @action\n toggleSelectEvent(event1: MidiEvent, evt1?: Event) {\n let ev1 = evt1;\n if (ev1?.detail?.shiftKey | ev1.detail?.ctrlKey | ev1.detail?.metaKey) {\n if (this.isEventSelected(event1)) {\n if (!ev1?.detail?.append) {\n this.selectedEvents = this.selectedEvents.filter((e1)=>e1 !== event1);\n }\n } else {\n this.selectedEvents = [\n ...this.selectedEvents,\n event1\n ];\n }\n } else {\n this.selectedEvents = [\n event1\n ];\n }\n }\n @action\n clearSelectedEvents() {\n this.selectedEvents = [];\n this.undoManager.appendCommand(new FilterOverlappingMidiEventsCommand(this.track), false);\n }\n @action\n removeSelectedEvent(event1: MidiEvent) {\n if (!this.isEventSelected(event1)) {\n return;\n }\n this.selectedEvents = this.selectedEvents.filter((e1)=>e1 !== event1);\n }\n @action\n isEventSelected(event1: MidiEvent) {\n return this.selectedEvents.includes(event1);\n }\n @action\n async deleteSelectedMidiEvents() {\n const commands1 = this.selectedEvents.map((event1)=>new RemoveMidiEventCommand(this.track, event1));\n await this.undoManager.executeCommand(new CompositeCommand('Remove MIDI events', commands1));\n this.selectedEvents = [];\n }\n @action\n selectEvents(instrument1: Instrument, ev1: MouseEvent) {\n const trackEvents1 = this.track.eventsForInstrument(instrument1.id);\n if (ev1.shiftKey) {\n if (this.selectedEvents.some((event1)=>trackEvents1.includes(event1))) {\n this.selectedEvents = this.selectedEvents.filter((event1)=>!trackEvents1.includes(event1));\n } else {\n this.selectedEvents = [\n ...this.selectedEvents,\n ...trackEvents1\n ];\n }\n return;\n }\n this.selectedEvents = this.track.eventsForInstrument(instrument1.id);\n }\n @action\n selectAll(ev1: KeyboardEvent) {\n ev1.preventDefault();\n this.selectedEvents = this.track.events;\n }\n @action\n copyMidi() {\n if (!this.selectedEvents.length) {\n return;\n }\n this.pasteboard.store('midi-events', this.selectedEvents);\n const minTick1 = Math.min(...this.selectedEvents.map((event1)=>event1.tick));\n this.args.setTrackPosition(Math.round(minTick1 / this.step));\n }\n @action\n async cutMidi() {\n this.copyMidi();\n const cmd1 = new RemoveMidiEventsCommand(this.track, this.selectedEvents);\n cmd1.name = 'Cut MIDI events';\n await this.undoManager.executeCommand(cmd1);\n this.selectedEvents = [];\n }\n @action\n async pasteMidi() {\n const events1 = (this.pasteboard.retrieve('midi-events') ?? []).map((event1)=>event1.copy());\n //set the shortest event tick to zero at the track select position and adjust all the rest by a relative amount\n const minTick1 = Math.min(...events1.map((event1)=>event1.tick));\n events1.forEach((event1)=>{\n event1.tick = event1.tick - minTick1 + this.trackPosition * this.step;\n });\n const cmd1 = new AddMidiEventsCommand(this.track, events1);\n cmd1.name = 'Paste MIDI events';\n await this.undoManager.executeCommand(cmd1);\n this.selectedEvents = events1;\n }\n @action\n setTrackPosition(evt1: Event) {\n const ev1 = evt1;\n if (this.selectedEvents.length > 0) {\n return;\n }\n const trackPosition1 = Math.round(ev1.detail.x / this.stepSize);\n const positionInTicks1 = Math.max(this.trigPos, trackPosition1 * this.step);\n this.args.setTrackPosition?.(positionInTicks1);\n }\n @action\n changeTrigPos(evt1: Event) {\n const ev1 = evt1;\n const trigPosStep1 = Math.round(ev1.detail.x / this.stepSize);\n // If the track position is now behind the trigger position, update the track position\n if (trigPosStep1 > this.trackPosition) {\n this.setTrackPosition(evt1);\n }\n const trigPos1 = this.pixelsToTicks(ev1.detail.x);\n this.undoManager.executeCommand(new ChangeTrigPosCommand(this.track, trigPos1));\n }\n @tracked\n highlightedInstrument?: Instrument;\n @action\n highlightInstrument(instrument1: Instrument) {\n this.highlightedInstrument = instrument1;\n }\n @action\n async addMidiEvent(instrument1: Instrument, evt1: Event) {\n const ev1 = evt1;\n const step1 = Math.floor(ev1.detail.x / this.stepSize);\n const tick1 = step1 * this.step;\n if (tick1 < this.trigPos) {\n return;\n }\n const event1 = await this.undoManager.executeCommand(new AddMidiEventCommand(this.track, tick1 - this.trigPos, instrument1.id, this.defaultVelocity, this.step));\n this.selectedEvents = [\n event1\n ];\n }\n @action\n playInstrument(instrument1: Instrument) {\n this.songPlayer.audioContext.resume();\n this.songPlayer.playInstrument(instrument1, 127);\n }\n @action\n playFrom(step1: number) {\n this.songPlayer.playFrom(step1 * this.step);\n }\n // All playable and required instruments\n get allInstruments() {\n return this.args.drumset.playableInstruments.concat(this.requiredInstruments).filter(unique).sort((a1, b1)=>b1.id - a1.id);\n }\n get visibleInstruments() {\n return this.allInstruments.filter((instrument1)=>!this.isCollapsed || this.track.instruments.includes(instrument1.id));\n }\n // Instruments required by the selected track (may not be playable by the selected drumset)\n get requiredInstruments() {\n return this.track.instruments.map((id1)=>this.args.drumset.instruments[id1]!);\n }\n eventResizes: {\n event: MidiEvent;\n start: number;\n width: number;\n length: number;\n }[] = [];\n @action\n handleResizeStart() {\n this.eventResizes = this.selectedEvents.map((event1)=>({\n event: event1,\n start: this.ticksToPixels(event1.tick),\n length: event1.length,\n width: this.ticksToPixels(event1.length)\n }));\n }\n doResize(evt1: Event, saveToUndo1 = false) {\n const ev1 = evt1;\n const adjustment1 = ev1.detail.adjustment;\n const undoCommands1 = this.eventResizes.map(({ event: event1, start: start1, width: width1, length: length1 })=>{\n let newWidth1 = width1 + adjustment1;\n if (ev1.detail.snap) {\n let end1 = start1 + newWidth1;\n end1 = Math.floor(end1 / this.stepSize) * this.stepSize;\n newWidth1 = end1 - start1;\n if (newWidth1 < this.stepSize) {\n newWidth1 = this.stepSize;\n }\n }\n const newLength1 = this.pixelsToTicks(newWidth1);\n event1.length = newLength1;\n return new UpdateMidiEventLengthCommand(this.track, event1, newLength1, length1);\n });\n if (saveToUndo1) {\n this.undoManager.executeCommand(new CompositeCommand('Update MIDI note length', undoCommands1));\n }\n }\n @action\n handleResize(evt1: Event) {\n this.doResize(evt1);\n }\n @action\n handleResizeEnd(evt1: Event) {\n this.doResize(evt1, true);\n this.selectedEvents = this.eventResizes.map(({ event: event1 })=>event1);\n this.eventResizes = [];\n }\n eventMoves: {\n event: MidiEvent;\n note: number;\n tick: number;\n }[] = [];\n moveInstruments?: Instrument[];\n @action\n handleMoveStart() {\n this.moveInstruments = [\n ...this.visibleInstruments\n ];\n this.eventMoves = this.selectedEvents.map((event1)=>({\n event: event1,\n note: event1.note,\n tick: event1.tick\n }));\n }\n doMove(evt1: Event, saveToUndo1 = false) {\n const ev1 = evt1;\n if (ev1.detail.moved) {\n const x1 = ev1.detail.x;\n const undoCommands1: Command[] = [];\n this.eventMoves.forEach(({ event: event1, tick: tick1, note: note1 })=>{\n let newTick1 = tick1 + this.pixelsToTicks(x1);\n if (ev1.detail.snap) {\n newTick1 = Math.round(newTick1 / this.step) * this.step;\n }\n event1.tick = newTick1;\n undoCommands1.push(new UpdateMidiEventTickCommand(this.track, event1, newTick1, tick1));\n if (saveToUndo1) {\n let newNote1: number | undefined = note1;\n if (ev1.detail.instruments) {\n const instrumentIndex1 = this.moveInstruments!.findIndex((instrument1)=>instrument1.id === event1.note);\n newNote1 = this.moveInstruments?.[instrumentIndex1 + ev1.detail.instruments]?.id;\n if (newNote1) {\n event1.note = newNote1;\n undoCommands1.push(new UpdateMidiEventNoteCommand(event1, newNote1, note1));\n }\n }\n }\n });\n if (saveToUndo1) {\n this.undoManager.executeCommand(new CompositeCommand('Move MIDI events', undoCommands1));\n } else {\n // eslint-disable-next-line ember/no-runloop, ember/no-incorrect-calls-with-inline-anonymous-functions\n scheduleOnce('afterRender', this, function() {\n document.querySelectorAll('.midi-event.selected').forEach(($el1)=>{\n ($el1).style.transform = `translate3d(0, ${ev1.detail.y}px, 0)`;\n });\n });\n }\n }\n }\n @action\n handleMove(evt1: Event) {\n this.doMove(evt1);\n }\n @action\n handleMoveEnd(evt1: Event) {\n this.doMove(evt1, true);\n const $el1 = evt1.target as HTMLElement;\n $el1.style.transform = 'none';\n this.moveInstruments = undefined;\n this.selectedEvents = this.eventMoves.map(({ event: event1 })=>event1);\n this.eventMoves = [];\n }\n @action\n moveEventsUp(ev1: KeyboardEvent) {\n ev1.preventDefault();\n if (!this.selectedEvents.length) {\n return;\n }\n const moveBy1 = ev1.altKey ? 12 : 1;\n const minNote1 = Math.min(...this.selectedEvents.map((event1)=>event1.note));\n const minNoteIndex1 = this.allInstruments.findIndex((instrument1)=>instrument1.id === minNote1);\n if (minNoteIndex1 - moveBy1 < 0) {\n return;\n }\n const commands1 = this.selectedEvents.map((event1)=>{\n const instrumentIndex1 = this.allInstruments.findIndex((instrument1)=>instrument1.id === event1.note);\n const instrument1 = this.allInstruments[instrumentIndex1 - moveBy1]!;\n return new UpdateMidiEventNoteCommand(event1, instrument1.id);\n });\n this.undoManager.executeCommand(new CompositeCommand('Change MIDI instrument', commands1));\n }\n @action\n moveEventsDown(ev1: KeyboardEvent) {\n ev1.preventDefault();\n if (!this.selectedEvents.length) {\n return;\n }\n const moveBy1 = ev1.altKey ? 12 : 1;\n const maxNote1 = Math.max(...this.selectedEvents.map((event1)=>event1.note));\n const maxNoteIndex1 = this.allInstruments.findIndex((instrument1)=>instrument1.id === maxNote1);\n if (maxNoteIndex1 + moveBy1 > this.allInstruments.length - 1) {\n return;\n }\n const commands1 = this.selectedEvents.map((event1)=>{\n const instrumentIndex1 = this.allInstruments.findIndex((instrument1)=>instrument1.id === event1.note);\n const instrument1 = this.allInstruments[instrumentIndex1 + moveBy1]!;\n return new UpdateMidiEventNoteCommand(event1, instrument1.id);\n });\n this.undoManager.executeCommand(new CompositeCommand('Change MIDI instrument', commands1));\n }\n @action\n moveEventsLeft(ev1: KeyboardEvent) {\n ev1.preventDefault();\n if (!this.selectedEvents.length) {\n return;\n }\n const minTick1 = Math.min(...this.selectedEvents.map((event1)=>event1.tick));\n if (minTick1 < this.step) {\n return;\n }\n const commands1 = this.selectedEvents.map((event1)=>new UpdateMidiEventTickCommand(this.track, event1, event1.tick - this.step));\n this.undoManager.executeCommand(new CompositeCommand('Move MIDI events left', commands1));\n }\n @action\n moveEventsRight(ev1: KeyboardEvent) {\n ev1.preventDefault();\n if (!this.selectedEvents.length) {\n return;\n }\n const rightMostTick1 = Math.max(...this.selectedEvents.map((event1)=>event1.tick)) + this.step; /*tick width*/ \n let maxTick1 = this.track.tickCount;\n if (this.isFillTrack) {\n maxTick1 = this.track.tickCount + 2 * this.step;\n }\n if (rightMostTick1 + this.step > maxTick1) {\n return;\n }\n const commands1 = this.selectedEvents.map((event1)=>new UpdateMidiEventTickCommand(this.track, event1, event1.tick + this.step));\n this.undoManager.executeCommand(new CompositeCommand('Move MIDI events right', commands1));\n }\n activeVelocityEvent?: {\n event: MidiEvent;\n velocity: number;\n };\n @action\n toggleSelectVelocity(event1: MidiEvent) {\n this.activeVelocityEvent = {\n event: event1,\n velocity: event1.velocity\n };\n if (!this.isEventSelected(event1)) {\n this.selectedEvents = [\n event1\n ];\n }\n }\n eventVelocities: any[] = [];\n @action\n handleVelocityChangeStart() {\n this.eventVelocities = this.selectedEvents.map((event1)=>({\n event: event1,\n velocity: event1.velocity\n }));\n }\n @action\n handleVelocityChange(ev1: Event) {\n const evt1 = ev1;\n const velocityChange1 = evt1.detail.change;\n if (this.activeVelocityEvent) {\n const adjustedVelocity1 = this.activeVelocityEvent.velocity + velocityChange1;\n const percentageChange1 = (adjustedVelocity1 - this.activeVelocityEvent.velocity) / this.activeVelocityEvent.velocity;\n this.eventVelocities.forEach((change1)=>{\n const event1 = change1.event;\n // The active velocity event (the one being dragged) is always changed to the exact value\n if (event1 === this.activeVelocityEvent?.event) {\n event1.velocity = Math.round(change1.velocity + velocityChange1);\n } else {\n if (evt1.detail.command) {\n event1.velocity = Math.round(change1.velocity + velocityChange1);\n } else {\n event1.velocity = Math.round(change1.velocity * (1 + percentageChange1));\n }\n }\n });\n }\n }\n @action\n handleVelocityChangeEnd(ev1: Event) {\n const evt1 = ev1;\n const undoCommands1: Command[] = [];\n this.eventVelocities.forEach((change1)=>{\n const event1 = change1.event;\n undoCommands1.push(new UpdateMidiEventVelocityCommand(event1, change1.velocity, event1.velocity));\n });\n this.undoManager.executeCommand(new CompositeCommand('Change Velocities', undoCommands1));\n const $el1 = evt1.target as HTMLElement;\n $el1.style.transform = 'none';\n this.selectedEvents = this.eventVelocities.map((change1)=>change1.event);\n this.eventVelocities = [];\n this.activeVelocityEvent = undefined;\n }\n barCountShiftKey = false;\n barCountCtrlKey = false;\n @action\n barCountKeydown(ev1: MouseEvent) {\n this.barCountShiftKey = ev1.shiftKey;\n this.barCountCtrlKey = ev1.ctrlKey || ev1.metaKey;\n }\n @action\n changeBarCount(ev1: Event) {\n const barCount1 = parseInt((ev1.target).value);\n this.undoManager.executeCommand(new UpdateTrackBarCountCommand(this.track, barCount1, this.barCountShiftKey /* inFront */ , this.barCountCtrlKey /* copyEvents */ ));\n this.barCountShiftKey = false;\n this.barCountCtrlKey = false;\n }\n @action\n changeTimeSignatureNumerator(numerator1: string) {\n this.undoManager.executeCommand(new UpdateTimeSignatureNumeratorCommand(this.track, parseInt(numerator1)));\n }\n @action\n changeTimeSignatureDenominator(denominatorValue1: string) {\n const denominator1 = parseInt(denominatorValue1);\n this.undoManager.executeCommand(new UpdateTimeSignatureDenominatorCommand(this.track, denominator1));\n if (this.division < denominator1) {\n this.division = denominator1;\n }\n }\n @action\n scrollToBottom() {\n const scrollParent1 = document.querySelector('.scroll-parent');\n if (scrollParent1) {\n scrollParent1.scrollTop = scrollParent1.scrollHeight; // Scroll to the bottom\n }\n }\n @action\n doubleBeat() {\n this.undoManager.executeCommand(new DoubleBeatCommand(this.track));\n }\n @action\n quantizeTrack() {\n this.undoManager.executeCommand(new QuantizeTrackCommand(this.track, this.division));\n }\n @action\n changeDivision(ev1: Event) {\n this.division = parseInt((ev1.target).value);\n }\n divisionName(division1: number) {\n switch(division1){\n case 2:\n return 'Half';\n case 4:\n return 'Quarter';\n case 6:\n return '1/4T';\n case 8:\n return 'Eighth';\n case 12:\n return '1/8T';\n case 16:\n return '16th';\n case 24:\n return '1/16T';\n case 32:\n return '32nd';\n case 64:\n return '64th';\n }\n }\n @action\n setDefaultVelocity(velocity1: number) {\n this.defaultVelocity = velocity1;\n }\n static{\n template(`\n {{! template-lint-disable no-invalid-interactive }}\n
\n
\n \n \n
\n
\n \n \n
\n {{#each this.visibleInstruments as |instrument|}}\n
\n {{instrument.id}}. {{instrument.name}}\n  \n
\n {{/each}}\n \n

Velocity

\n \n \n \n
\n \n \n {{#each this.steps as |step|}}\n {{this.beatLabel step}}
\n {{/each}}\n \n \n \n
\n \n \n \n \n {{! Draws the vertical step divisions }}\n {{#each this.steps as |step|}}\n
\n {{/each}}\n {{! Draws the horizontal instrument dividing lines }}\n {{#each this.visibleInstruments as |instrument|}}\n \n {{/each}}\n {{! Draws the individual notes }}\n
\n {{#each this.visibleInstruments as |instrument|}}\n
\n {{#each (this.eventsForInstrument instrument) as |event|}}\n
\n {{/each}}\n
\n {{/each}}\n \n \n \n
\n {{! Draws vertical step divisions }}\n {{#each this.steps as |step|}}\n
\n {{/each}}\n {{! Draws the individual velocity markers }}\n \n {{#each this.track.noteOnEvents as |event|}}\n
\n {{/each}}\n \n \n \n \n \n \n \n \n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\n","import { template } from \"@ember/template-compiler\";\nimport { array, concat, fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport { debounce } from '@ember/runloop';\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport EditableField from 'editor/components/editable-field';\nimport Part from 'editor/components/song-editor/part';\nimport TrackEditor from 'editor/components/track-editor';\nimport add from 'editor/helpers/add';\nimport eq from 'editor/helpers/eq';\nimport not from 'editor/helpers/not';\nimport pick from 'editor/helpers/pick';\nimport { CompositeCommand } from 'editor/models/command';\nimport Drumset from 'editor/models/drumset';\nimport Midi from 'editor/models/midi';\nimport { SectionType } from 'editor/models/song';\nimport Song, { MidiEvent, PartType, SongPart, SongTrack, normalizeMidiEvents } from 'editor/models/song';\nimport { AddPartCommand, AddTrackCommand, RemovePartCommand, RemoveTrackCommand, RenameSongCommand, RenameTrackCommand, ReplaceTrackCommand, SortPartsCommand, UnlinkTrackCommand, UpdateDrumsetCommand, UpdateTempoCommand } from 'editor/models/song-commands';\nimport disabled from 'editor/modifiers/disabled';\nimport onKey from 'editor/modifiers/on-key';\nimport selected from 'editor/modifiers/selected';\nimport sortable from 'editor/modifiers/sortable';\nimport type PasteboardService from 'editor/services/pasteboard';\nimport ProjectManagerService from 'editor/services/project-manager';\nimport SongPlayerService, { type SelectedTrack } from 'editor/services/song-player';\nimport UndoManagerService from 'editor/services/undo-manager';\nimport { ChokeGroup } from 'editor/services/virtual-pedal';\nimport nameFilter from 'editor/utils/name-filter';\nimport playInstrument from 'editor/utils/play-instrument';\nimport wait from 'editor/utils/wait';\nimport { modifier } from 'ember-modifier';\nimport Button from './button';\nimport onClickOutside from 'editor/modifiers/on-click-outside';\nconst manualResize = modifier(($element1: HTMLElement, [song1, drumset1, selectedTrack1, isTrackMaximised1]: [Song | undefined, Drumset | undefined, SelectedTrack | undefined, boolean], { resizable: resizable1, handle: handle1 }: {\n resizable: string[];\n handle: string;\n})=>{\n let dragOffsetY1 = 0, availableHeight1 = 0, beforeHandle1: HTMLElement[] = [], afterHandle1: HTMLElement[] = [];\n const cancelDragNDrop1 = (e1: DragEvent)=>{\n e1.preventDefault();\n };\n const onMouseMove1 = (ev1: MouseEvent)=>{\n ev1.preventDefault();\n let y1 = ev1.clientY - dragOffsetY1;\n beforeHandle1.forEach((el1)=>{\n el1.style.height = `${parseInt(el1.style.height) + y1}px`;\n });\n afterHandle1.forEach((el1)=>{\n el1.style.height = `${parseInt(el1.style.height) - y1}px`;\n });\n dragOffsetY1 = ev1.clientY;\n };\n const onPointerUp1 = (ev1: PointerEvent)=>{\n document.removeEventListener('pointerup', onPointerUp1);\n $handle1.releasePointerCapture(ev1.pointerId);\n };\n const onMouseUp1 = ()=>{\n document.removeEventListener('mouseup', onMouseUp1);\n document.removeEventListener('mousemove', onMouseMove1);\n dragOffsetY1 = 0;\n };\n const onPointerDown1 = (ev1: PointerEvent)=>{\n document.addEventListener('pointerup', onPointerUp1);\n $handle1.setPointerCapture(ev1.pointerId);\n };\n const onMouseDown1 = (ev1: MouseEvent)=>{\n dragOffsetY1 = ev1.clientY;\n document.addEventListener('mousemove', onMouseMove1);\n document.addEventListener('mouseup', onMouseUp1);\n };\n const children1: HTMLElement[] = (Array.from($element1.childNodes).filter((n1)=>n1.nodeType === 1));\n const $handle1 = children1.find((n1)=>n1.matches(handle1)) as HTMLElement;\n const resizableElements1 = children1.filter((n1)=>resizable1.some((r1)=>n1.matches(r1)));\n const fixedSizeELements1 = children1.filter((n1)=>!resizableElements1.includes(n1));\n beforeHandle1 = resizableElements1.filter((el1)=>el1.offsetTop < $handle1.offsetTop);\n afterHandle1 = resizableElements1.filter((el1)=>el1.offsetTop > $handle1.offsetTop);\n const setup1 = ()=>{\n if (isTrackMaximised1) {\n resizableElements1.forEach((el1)=>{\n el1.style.height = '';\n });\n return;\n }\n const fixedHeight1 = fixedSizeELements1.reduce((acc1, el1)=>acc1 + el1.clientHeight, 0);\n let flexibleHeight1 = resizableElements1.reduce((acc1, el1)=>{\n return acc1 + el1.clientHeight;\n }, 0);\n availableHeight1 = $element1.clientHeight - fixedHeight1;\n resizableElements1.forEach((el1)=>{\n if (el1.clientHeight <= availableHeight1 / 2) {\n el1.style.height = `${el1.clientHeight}px`;\n availableHeight1 -= el1.clientHeight;\n flexibleHeight1 -= el1.clientHeight;\n }\n });\n resizableElements1.forEach((el1)=>{\n if (el1.style.height === '') {\n el1.style.height = `${(el1.clientHeight / flexibleHeight1) * availableHeight1}px`;\n }\n });\n //Are there now scrollbars?\n if ($element1.clientHeight < $element1.scrollHeight) {\n const scrollbarHeight1 = $element1.scrollHeight - $element1.clientHeight;\n resizableElements1.forEach((el1)=>{\n el1.style.height = `${el1.clientHeight - scrollbarHeight1 / resizableElements1.length}px`;\n });\n }\n // A timeout is necessary to make sure the resizing has settled before scrolling the selected part into view\n setTimeout(()=>{\n $element1.querySelector('.parts .selected')?.scrollIntoView({\n block: 'center'\n });\n }, 10);\n };\n setup1();\n // I'm dispatching this event in order to make sure that the modifier is \"using\"\n // the song argument so it will be re-run when the song changes\n $element1.dispatchEvent(new CustomEvent('manualResize', {\n detail: {\n song: song1,\n drumset: drumset1,\n selectedTrack: selectedTrack1\n }\n }));\n $handle1.addEventListener('mousedown', onMouseDown1);\n $handle1.addEventListener('pointerdown', onPointerDown1);\n $handle1.addEventListener('dragstart', cancelDragNDrop1);\n window.addEventListener('resize', setup1);\n return ()=>{\n window.removeEventListener('resize', setup1);\n $handle1.removeEventListener('mousedown', onMouseDown1);\n $handle1.removeEventListener('pointerdown', onPointerDown1);\n $handle1.removeEventListener('dragstart', cancelDragNDrop1);\n };\n});\ninterface SongEditorSignature {\n Element: HTMLDivElement;\n Args: {\n song: Song;\n saveSong: () => void;\n };\n Blocks: {\n };\n}\nexport default class SongEditorComponent extends Component {\n @service\n projectManager: ProjectManagerService;\n @service\n songPlayer: SongPlayerService;\n @service\n undoManager: UndoManagerService;\n @service\n pasteboard: PasteboardService;\n tapTempoBuffer: number[] = Array(4).fill(0);\n @tracked\n isTrackMaximized = false;\n @tracked\n isDrumsetMenuOpen = false;\n constructor(owner1: unknown, args1: SongEditorSignature['Args']){\n super(owner1, args1);\n }\n get song() {\n return this.args.song;\n }\n @action\n renameSong(name1: string) {\n this.undoManager.executeCommand(new RenameSongCommand(this.song, name1));\n }\n get drumsets() {\n return this.projectManager.drumsets.toSorted((d11, d21)=>d11.name.localeCompare(d21.name));\n }\n get drumsetFile() {\n return this.projectManager.findDrumset(this.song.drumset);\n }\n get drumset() {\n return this.drumsetFile.drumset!;\n }\n @action\n async setDrumset(ev1: Event) {\n const drumsetPath1 = (ev1.target).value;\n const drumset1 = this.projectManager.findDrumset(drumsetPath1);\n if (drumset1) {\n await drumset1.parse();\n this.undoManager.executeCommand(new UpdateDrumsetCommand(this.song, this.drumsetFile, drumset1));\n }\n }\n setTempo: (() => void) | undefined;\n @action\n updateTempo(bpm1: number, debounceTimeout1: number = 500) {\n if (!this.setTempo) {\n // create a debouncable function\n this.setTempo = (()=>{\n // capture the original bpm\n const originalBpm1 = this.song.bpm;\n return ()=>{\n this.undoManager.executeCommand(new UpdateTempoCommand(this.song, originalBpm1, this.song.bpm));\n this.setTempo = undefined;\n this.tapTempoBuffer = Array(4).fill(0);\n };\n })();\n }\n // update the bpm live\n this.song.bpm = bpm1;\n // Debounce the undo command to avoid spamming the undo stack\n // eslint-disable-next-line ember/no-runloop\n debounce(this, this.setTempo, debounceTimeout1);\n }\n @action\n tapTempo(ev1: MouseEvent) {\n ev1.preventDefault();\n const now1 = performance.now();\n const last1 = this.tapTempoBuffer.shift()!;\n this.tapTempoBuffer.push(now1);\n if (last1 > 0) {\n const elapsed1 = now1 - last1;\n const bpm1 = Math.round((this.tapTempoBuffer.length / elapsed1) * 60000);\n this.updateTempo(bpm1, 1600);\n }\n }\n get tracks() {\n return this.args.song.tracks;\n }\n get selectedTrack(): SelectedTrack | undefined {\n return this.songPlayer.selectedTrack;\n }\n get loop() {\n return this.songPlayer.loop;\n }\n @action\n toggleLoop() {\n this.songPlayer.loop = !this.loop;\n }\n get trackPosition() {\n return this.songPlayer.trackPosition;\n }\n @action\n setTrackPosition(position1: number) {\n this.songPlayer.trackPosition = position1;\n }\n @action\n play(fromTheBeginning1: boolean = false) {\n if (fromTheBeginning1) {\n this.songPlayer.playFrom(0);\n } else {\n this.songPlayer.playFrom(this.trackPosition - (this.selectedTrack?.trigPos ?? 0));\n }\n }\n @action\n stop() {\n this.songPlayer.stop();\n }\n @action\n togglePlay(fromTheBeginning1: boolean = false) {\n if (this.songPlayer.isPlaying) {\n this.stop();\n } else {\n this.play(fromTheBeginning1);\n }\n }\n get canAddPart() {\n return this.song.parts.length < 32;\n }\n @action\n addPart(part1?: SongPart) {\n if (this.canAddPart) {\n this.undoManager.executeCommand(new AddPartCommand(this.args.song, part1));\n }\n }\n @action\n removePart(part1: SongPart) {\n this.undoManager.executeCommand(new RemovePartCommand(this.args.song, part1));\n if (part1.tracks.includes(this.songPlayer.track!)) {\n this.songPlayer.stop();\n this.songPlayer.findTrack(this.args.song);\n }\n }\n @action\n pastePart(part1: SongPart) {\n const copiedPart1 = this.pasteboard.retrieve('part');\n if (copiedPart1) {\n this.undoManager.executeCommand(new AddPartCommand(this.args.song, part1, copiedPart1));\n }\n }\n @action\n duplicatePart(part1: SongPart) {\n this.undoManager.executeCommand(new AddPartCommand(this.args.song, part1, part1));\n }\n @action\n selectTrack(part1: SongPart, sectionType1: SectionType, index1: number) {\n this.songPlayer.selectTrack(part1, sectionType1, index1);\n }\n @action\n async addTrack(part1: SongPart, sectionType1: SectionType) {\n const opts1 = {\n timeSignatureNumerator: part1.timeSignatureNumerator,\n timeSignatureDenominator: part1.timeSignatureDenominator\n };\n await this.undoManager.executeCommand(new AddTrackCommand(part1, sectionType1, opts1));\n this.songPlayer.stop();\n this.songPlayer.selectTrack(part1, sectionType1, part1.fills.length - 1);\n }\n @action\n copyTrack() {\n if (this.songPlayer.selectedTrack) {\n this.pasteboard.store('track', [\n this.song,\n this.songPlayer.selectedTrack\n ]);\n }\n }\n get hasCopiedTrack() {\n return this.pasteboard.hasCopy('track');\n }\n @action\n pasteTrack() {\n if (this.songPlayer.selectedTrack) {\n const data1 = <[Song, SelectedTrack] | undefined>this.pasteboard.retrieve('track');\n if (data1 && this.selectedTrack) {\n const [song1, copiedTrack1] = data1;\n const { part: part1, sectionType: sectionType1, sectionIndex: sectionIndex1 } = this.songPlayer.selectedTrack;\n // If we’re pasting into the same song, then we use the same track and they remain linked.\n // If we’re pasting into a different song, then we copy the track so that edits aren’t shared across two songs (BUG)\n const pastedTrack1 = song1 === this.song ? copiedTrack1.track : copiedTrack1.track.copy();\n this.undoManager.executeCommand(new CompositeCommand('Paste track', [\n new ReplaceTrackCommand(part1, sectionType1, sectionIndex1, pastedTrack1)\n ]));\n }\n }\n }\n get isLinkedTrack() {\n if (!this.selectedTrack) {\n return false;\n }\n const { track: track1 } = this.selectedTrack;\n return (this.song.allParts.flatMap((part1)=>part1.tracks).filter((t1)=>t1 === track1).length > 1);\n }\n get onMac() {\n return this.projectManager.onMac;\n }\n @action\n unlinkTrack() {\n if (this.songPlayer.selectedTrack) {\n const { part: part1, sectionType: sectionType1, sectionIndex: sectionIndex1 } = this.songPlayer.selectedTrack;\n this.undoManager.executeCommand(new UnlinkTrackCommand(part1, sectionType1, sectionIndex1));\n }\n }\n @action\n async importMidiFile(part1?: SongPart, sectionType1?: SectionType, sectionIndex1?: number, files1?: FileList) {\n if (!files1 && !this.selectedTrack) {\n return;\n }\n let selectPart1 = false;\n if (!(part1 instanceof SongPart)) {\n part1 = this.selectedTrack!.part;\n sectionType1 = this.selectedTrack!.sectionType;\n sectionIndex1 = this.selectedTrack!.sectionIndex;\n selectPart1 = true;\n }\n // eslint-disable-next-line no-undef\n let handle1: FileSystemFileHandle;\n if (!files1) {\n try {\n [handle1] = await window.showOpenFilePicker({\n id: 'midi',\n startIn: 'documents',\n multiple: false,\n types: [\n {\n description: 'MIDI file',\n accept: {\n 'audio/midi': [\n '.mid',\n '.midi'\n ]\n }\n }\n ]\n });\n } catch (err1: any) {\n if (err1.name === 'AbortError' && /user aborted/i.test(err1.message)) {\n return;\n }\n throw err1;\n }\n try {\n await wait(async ()=>{\n const file1 = await handle1.getFile();\n this.importMidiHelper(file1, part1, sectionType1, sectionIndex1, selectPart1);\n });\n } catch (err1) {\n if (err1 instanceof DOMException) {\n console.error('DOMException', {\n name: err1.name,\n message: err1.message\n });\n alert('Unable to import MIDI track\\n' + err1.message);\n } else {\n console.error(err1);\n alert('Unable to import MIDI track');\n }\n }\n } else {\n this.importMidiFiles(part1, sectionType1, sectionIndex1, files1);\n }\n }\n @action\n async importMidiFiles(part1?: SongPart, sectionType1?: SectionType, sectionIndex1?: number, files1?: FileList) {\n let selectPart1 = false;\n if (!(part1 instanceof SongPart)) {\n part1 = this.selectedTrack!.part;\n sectionType1 = this.selectedTrack!.sectionType;\n sectionIndex1 = this.selectedTrack!.sectionIndex;\n selectPart1 = true;\n }\n // eslint-disable-next-line no-undef\n let handles1: FileSystemFileHandle[];\n if (!files1 || files1.length === 0) {\n // If we are opening a dialog to select file(s), we don't have the file(s) yet\n try {\n handles1 = await window.showOpenFilePicker({\n id: 'midi',\n startIn: 'documents',\n multiple: true,\n types: [\n {\n description: 'MIDI file',\n accept: {\n 'audio/midi': [\n '.mid',\n '.midi'\n ]\n }\n }\n ]\n });\n } catch (err1: any) {\n if (err1.name === 'AbortError' && /user aborted/i.test(err1.message)) {\n return;\n }\n throw err1;\n }\n if (handles1.length + sectionIndex1 > 8) {\n alert('Only 8 fills are supported');\n return;\n }\n await Promise.all(handles1.map(async (handle1)=>{\n const file1 = await handle1.getFile();\n this.importMidiHelper(file1, part1, sectionType1, sectionIndex1, selectPart1);\n sectionIndex1++;\n }));\n } else {\n if (files1.length + sectionIndex1 > 8) {\n alert('Only 8 fills are supported');\n return;\n }\n // If we are dragging and dropping file(s), we already have the file(s)\n try {\n await wait(async ()=>{\n for(var i1 = 0; i1 < files1.length; i1++){\n const file1 = files1?.[i1];\n this.importMidiHelper(file1, part1, sectionType1, sectionIndex1, selectPart1);\n sectionIndex1++;\n }\n });\n } catch (err1) {\n if (err1 instanceof DOMException) {\n console.error('DOMException', {\n name: err1.name,\n message: err1.message\n });\n alert('Unable to import MIDI track\\n' + err1.message);\n } else {\n console.error(err1);\n alert('Unable to import MIDI track');\n }\n }\n }\n }\n @action\n async importMidiHelper(file1: File, part1?: SongPart, sectionType1?: SectionType, sectionIndex1?: number, selectPart1?: boolean) {\n if (file1.size === 0) {\n alert('Unable to read MIDI file. No data');\n return;\n }\n const buffer1 = await file1.arrayBuffer();\n let midi1: Midi;\n try {\n midi1 = Midi.parse(buffer1);\n } catch (err1) {\n alert('Unable to read MIDI file');\n return;\n }\n if (midi1.header.type === 2) {\n alert('MIDI type 2 not supported');\n return;\n }\n const midiTrack1 = midi1.tracks.find((track1)=>track1.tickCount > 0);\n if (midiTrack1) {\n const midiEvents1 = midi1.tracks.filter((t1)=>t1.tickCount > 0).flatMap((t1)=>t1.events).filter((e1: any)=>e1.type === 'noteOn' || e1.type === 'noteOff').map((e1: any)=>{\n const { type: type1, note: note1, velocity: velocity1, tick: tick1 } = e1;\n return new MidiEvent(tick1, type1 === 'noteOn' ? 0 : 1, note1, velocity1);\n });\n const newTrack1 = new SongTrack('Imported Track');\n newTrack1.name = midiTrack1.name ?? file1.name.replace(/\\.[^.]+$/, '');\n newTrack1.info.bpm = midiTrack1.bpm;\n newTrack1.info.tickCount = midiTrack1.tickCount;\n newTrack1.info.barLength = midiTrack1.barLength;\n newTrack1.info.timeSignatureNumerator = midiTrack1.timeSignatureNumerator;\n newTrack1.info.timeSignatureDenominator = midiTrack1.timeSignatureDenominator;\n newTrack1.info.events = normalizeMidiEvents(midiEvents1, newTrack1.info);\n const command1 = new ReplaceTrackCommand(part1!, sectionType1!, sectionIndex1!, newTrack1);\n if (selectPart1) {\n command1.on('execute', ()=>{\n this.songPlayer.selectTrack(part1!, sectionType1!, sectionIndex1!);\n });\n }\n this.undoManager.executeCommand(command1);\n }\n }\n @action\n async exportMidiFile() {\n if (!this.selectedTrack) {\n return;\n }\n const { track: track1 } = this.selectedTrack;\n // eslint-disable-next-line no-undef\n let handle1: FileSystemFileHandle;\n try {\n handle1 = await window.showSaveFilePicker({\n id: 'midi',\n startIn: 'documents',\n suggestedName: `${track1.name}.mid`,\n types: [\n {\n description: 'MIDI file',\n accept: {\n 'audio/midi': [\n '.mid'\n ]\n }\n },\n {\n description: 'WAV file',\n accept: {\n 'audio/wav': [\n '.wav'\n ]\n }\n }\n ]\n });\n this.renameTrack(handle1.name.replace(/\\.mid$/, ''));\n } catch (err1: any) {\n if (err1.name === 'AbortError' && /user aborted/i.test(err1.message)) {\n return;\n }\n throw err1;\n }\n try {\n await wait(async ()=>{\n const fileExtension1 = handle1.name.split('.').pop();\n let fileData1: ArrayBuffer;\n switch(fileExtension1){\n case 'mid':\n fileData1 = track1.toMidi();\n break;\n case 'wav':\n {\n // NOTE: This, virtual pedal, and song player all use similar variations of the same code\n // While not duplicated, there is definitely opportunity for refactoring\n const song1 = this.songPlayer.song;\n const drumset1 = this.songPlayer.drumset!;\n const ticksPerSecond1 = (track1.tickToQuarter / 60) * song1.bpm;\n const totalTime1 = track1.info.tickCount / ticksPerSecond1;\n const chokeGroups1 = new Array(15).fill(0).map(()=>new ChokeGroup());\n const audioContext1 = new OfflineAudioContext({\n numberOfChannels: 2,\n length: Math.ceil(totalTime1 * 44100),\n sampleRate: 44100\n });\n const drumsetVolume1 = new GainNode(audioContext1, {\n gain: 1\n });\n drumsetVolume1.connect(audioContext1.destination);\n const drumsetGain1 = drumset1.volume / 100;\n drumsetVolume1.gain.setValueAtTime(drumsetGain1, 0);\n track1.events.map((event1)=>{\n const onWhen1 = event1.tick / ticksPerSecond1;\n const offWhen1 = onWhen1 + event1.length / ticksPerSecond1;\n const instrument1 = drumset1.instruments[event1.note];\n if (instrument1) {\n if (instrument1.chokeGroup > 0) {\n const chokeGroup1 = chokeGroups1[instrument1.chokeGroup];\n chokeGroup1?.choke(onWhen1);\n }\n const note1 = playInstrument(audioContext1, drumsetVolume1, instrument1, onWhen1, offWhen1, event1.velocity);\n if (note1) {\n if (instrument1.chokeGroup > 0) {\n chokeGroups1[instrument1.chokeGroup]?.add(note1);\n }\n }\n }\n });\n const audioBuffer1 = await audioContext1.startRendering();\n fileData1 = Drumset.saveWaveFile(audioBuffer1);\n }\n break;\n default:\n alert('Unsupported file type');\n return;\n }\n const file1 = await handle1.createWritable();\n await file1.write(fileData1);\n await file1.close();\n });\n } catch (err1) {\n if (err1 instanceof DOMException) {\n console.error('DOMException', {\n name: err1.name,\n message: err1.message\n });\n alert('Unable to save MIDI track\\n' + err1.message);\n } else {\n console.error(err1);\n alert('Unable to save MIDI track');\n }\n }\n }\n @action\n async removeTrack() {\n if (this.songPlayer.selectedTrack) {\n const { part: part1, sectionType: sectionType1, sectionIndex: sectionIndex1 } = this.songPlayer.selectedTrack;\n await this.undoManager.executeCommand(new RemoveTrackCommand(part1, sectionType1, sectionIndex1));\n this.songPlayer.stop();\n this.songPlayer.findTrack(this.songPlayer.song);\n }\n }\n @action\n renameTrack(name1: string) {\n if (this.songPlayer.selectedTrack) {\n const { part: part1, sectionType: sectionType1, sectionIndex: sectionIndex1 } = this.songPlayer.selectedTrack;\n this.undoManager.executeCommand(new RenameTrackCommand(part1, sectionType1, sectionIndex1, name1));\n }\n }\n @action\n sortParts(oldIndex1: number, newIndex1: number) {\n this.undoManager.executeCommand(new SortPartsCommand(this.song, oldIndex1, newIndex1));\n }\n @action\n toggleTrackMaximized() {\n this.isTrackMaximized = !this.isTrackMaximized;\n }\n @action\n closeDrumsetMenu() {\n this.isDrumsetMenuOpen = false;\n }\n @action\n openDrumsetMenu() {\n this.isDrumsetMenuOpen = true;\n }\n static{\n template(`\n \n \n
\n \n
\n
Name
\n
Main Beat
\n
Drum Fill(s)
\n
Transition
\n
Accent Hit
\n
Options
\n
\n \n {{~#each @song.parts as |part i|~}}\n \n {{~/each~}}\n \n
\n \n \n \n
\n \n \n \n
\n \n {{#if this.selectedTrack}}\n \n
\n \n
\n {{this.selectedTrack.track.name}}\n
\n {{#if this.isTrackMaximized}}\n \n \n \n {{/if}}\n \n \n {{#if this.songPlayer.selectedTrack}}\n
\n \n \n {{/if}}\n \n \n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n SongEditor: typeof SongEditorComponent;\n }\n}\n","import { modifier } from 'ember-modifier';\n\ninterface OnKeySignature {\n Element: HTMLElement;\n Args: {\n Positional: [key: string, (event: KeyboardEvent) => void];\n Named?: {\n preventDefault?: boolean;\n includeInputs?: boolean;\n cmdKey?: boolean;\n shiftKey?: boolean;\n altKey?: boolean;\n capture?: boolean;\n };\n };\n}\n\nfunction onKeyUp(\n element: HTMLElement,\n [key, callback]: [string, (event: KeyboardEvent) => void],\n named?: {\n preventDefault?: boolean;\n includeInputs?: boolean;\n cmdKey?: boolean;\n shiftKey?: boolean;\n altKey?: boolean;\n capture?: boolean;\n },\n) {\n const opts = Object.assign(\n {\n preventDefault: false,\n includeInputs: false,\n cmdKey: false,\n shiftKey: false,\n altKey: false,\n capture: false,\n },\n named,\n );\n const eventHandler = (event: KeyboardEvent) => {\n if (\n (event.code === key || event.key === key) &&\n (event.metaKey === opts.cmdKey || event.ctrlKey === opts.cmdKey) &&\n event.shiftKey === opts.shiftKey &&\n event.altKey === opts.altKey\n ) {\n if (\n !opts.includeInputs &&\n (event.target instanceof HTMLInputElement ||\n event.target instanceof HTMLTextAreaElement) &&\n event.target != element\n ) {\n return;\n }\n if (opts.preventDefault) {\n event.preventDefault();\n }\n callback(event);\n }\n };\n document.addEventListener('keyup', eventHandler, { capture: opts.capture });\n\n return () => {\n document.removeEventListener('keyup', eventHandler, {\n capture: opts.capture,\n });\n };\n}\n\nexport default modifier(onKeyUp);\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'on-key-up': typeof onKeyUp;\n }\n}\n","import { template } from \"@ember/template-compiler\";\nimport { registerDestructor } from '@ember/destroyable';\nimport { fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport onKey from 'editor/modifiers/on-key';\nimport onKeyUp from 'editor/modifiers/on-key-up';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport type { SongFile } from 'editor/services/project-manager';\nimport type VirtualPedalService from 'editor/services/virtual-pedal';\nimport { TrackType } from 'editor/services/virtual-pedal';\nimport type { ArgsFor } from 'ember-modifier';\nimport Modifier, { modifier } from 'ember-modifier';\nconst pedalClickHandler = modifier((element1: Element, // eslint-disable-next-line no-unused-vars\n[down1, up1]: [(ev: MouseEvent) => void, (ev: MouseEvent) => void])=>{\n const mouseup1 = (ev1: MouseEvent)=>{\n document.removeEventListener('mouseup', mouseup1);\n up1(ev1);\n };\n const mousedown1 = (ev1: MouseEvent)=>{\n document.addEventListener('mouseup', mouseup1);\n down1(ev1);\n };\n //@ts-expect-error\n element1.addEventListener('mousedown', mousedown1);\n return ()=>{\n document.removeEventListener('mousedown', mousedown1);\n };\n});\ninterface VirtualPedalModifierSignature {\n Args: {\n Named: {\n };\n Positional: [];\n };\n}\nfunction virtualPedalModifierCleanup(instance1: VirtualPedalModifier) {\n if (instance1.screenBars) {\n instance1.screenBars.innerHTML = '';\n instance1.virtualPedalEl = undefined;\n instance1.screenBars = undefined;\n instance1.screenBackground = undefined;\n instance1.beatIndicator = undefined;\n instance1.barIndicator = undefined;\n }\n}\n/**\n * This modifier sets up and updates the virtual pedal screen\n */ let VirtualPedalModifier = class VirtualPedalModifier extends Modifier {\n @service('virtual-pedal')\n pedalService: VirtualPedalService;\n virtualPedalEl?: SVGElement;\n screenBox?: DOMRect;\n screenBars?: SVGRectElement;\n screenBackground?: SVGRectElement;\n label?: SVGTextElement;\n subLabel?: SVGTextElement;\n beatIndicator?: SVGRectElement;\n barIndicator?: SVGRectElement;\n constructor(owner1: unknown, args1: ArgsFor){\n // @ts-expect-error\n super(owner1, args1);\n registerDestructor(this, virtualPedalModifierCleanup);\n }\n setupScreen(virtualPedalEl1: SVGElement) {\n this.virtualPedalEl = virtualPedalEl1;\n const screen1 = virtualPedalEl1.querySelector('#screen');\n this.screenBars = virtualPedalEl1.querySelector('#screen-bars');\n this.screenBox = screen1?.getBBox();\n let { x: x1, y: y1, width: width1, height: height1 } = this.screenBox;\n this.screenBackground = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n this.screenBackground.setAttribute('x', `${x1}`);\n this.screenBackground.setAttribute('y', `${y1}`);\n this.screenBackground.setAttribute('width', `${width1}`);\n this.screenBackground.setAttribute('height', `${height1}`);\n this.screenBackground.setAttribute('class', 'fill-blue-100');\n this.screenBars.appendChild(this.screenBackground);\n }\n drawIndicators() {\n if (!this.screenBox) return;\n if (!this.screenBars) return;\n let { x: x1, y: y1, width: width1, height: height1 } = this.screenBox;\n this.beatIndicator = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n this.beatIndicator.setAttribute('x', `${x1}`);\n this.beatIndicator.setAttribute('y', `${y1}`);\n this.beatIndicator.setAttribute('width', `${width1}`);\n this.beatIndicator.setAttribute('height', `${height1}`);\n this.beatIndicator.setAttribute('class', 'fill-green-300');\n this.screenBars.appendChild(this.beatIndicator);\n const barHeight1 = height1 / 4;\n this.barIndicator = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n this.barIndicator.setAttribute('x', `${x1}`);\n this.barIndicator.setAttribute('y', `${y1 + height1 - barHeight1}`);\n this.barIndicator.setAttribute('width', `${width1}`);\n this.barIndicator.setAttribute('height', `${barHeight1}`);\n this.barIndicator.setAttribute('class', 'fill-green-500');\n this.screenBars.appendChild(this.barIndicator);\n this.label = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n this.label.setAttribute('x', `${x1 + width1 / 2}`);\n this.label.setAttribute('y', `${y1 + height1 / 2.8}`);\n this.label.setAttribute('dominant-baseline', 'middle');\n this.label.setAttribute('text-anchor', 'middle');\n this.label.setAttribute('style', 'font-size: 45px; font-family: sans-serif; font-weight: 500');\n this.screenBars.appendChild(this.label);\n this.subLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n this.subLabel.setAttribute('x', `${x1 + width1 / 2}`);\n this.subLabel.setAttribute('y', `${y1 + height1 / 1.8}`);\n this.subLabel.setAttribute('dominant-baseline', 'middle');\n this.subLabel.setAttribute('text-anchor', 'middle');\n this.subLabel.setAttribute('style', 'font-size: 30px; font-family: sans-serif; font-weight: 500');\n this.screenBars.appendChild(this.subLabel);\n }\n getColors(type1: TrackType): [bgColor: string, beatColor: string, barColor: string, textColor: string] {\n switch(type1){\n case TrackType.MAIN:\n return [\n 'fill-green-100',\n 'fill-green-300',\n 'fill-green-500',\n 'fill-black'\n ];\n case TrackType.FILL:\n return [\n 'fill-yellow-100',\n 'fill-yellow-300',\n 'fill-yellow-500',\n 'fill-black'\n ];\n case TrackType.TRANSITION:\n return [\n 'fill-gray-100',\n 'fill-gray-300',\n 'fill-gray-500',\n 'fill-black'\n ];\n case TrackType.PAUSED:\n return [\n 'fill-black',\n 'fill-gray-200',\n 'fill-gray-200',\n 'fill-white'\n ];\n default:\n return [\n 'fill-red-100',\n 'fill-red-300',\n 'fill-red-500',\n 'fill-black'\n ];\n }\n }\n get type() {\n return this.pedalService.currentTrackType ?? 0;\n }\n get track() {\n return this.pedalService.currentTrack;\n }\n get beat() {\n return this.pedalService.beat;\n }\n get bar() {\n return this.pedalService.bar;\n }\n modify(virtualPedalEl1: SVGElement) {\n const { track: track1, type: type1, beat: beat1, bar: bar1 } = this;\n if (this.virtualPedalEl !== virtualPedalEl1) {\n this.setupScreen(virtualPedalEl1);\n }\n if (track1 && !this.beatIndicator) {\n this.drawIndicators();\n }\n if (track1 && this.beatIndicator && this.barIndicator && this.label) {\n this.label.textContent = this.pedalService.label;\n this.subLabel!.textContent = this.pedalService.subLabel;\n const [bgColor1, beatColor1, barColor1, textColor1] = this.getColors(type1);\n let { x: x1, width: width1 } = this.screenBox!;\n this.screenBackground?.setAttribute('class', bgColor1);\n this.label?.setAttribute('class', textColor1);\n this.subLabel?.setAttribute('class', textColor1);\n const beatWidth1 = width1 / track1.timeSignatureNumerator;\n this.beatIndicator.setAttribute('x', `${x1 + beat1 * beatWidth1}`);\n this.beatIndicator.setAttribute('width', `${beatWidth1}`);\n this.beatIndicator.setAttribute('class', beatColor1);\n if (track1.barCount > 1 && type1 !== TrackType.PAUSED) {\n const barWidth1 = width1 / track1.barCount;\n this.barIndicator.setAttribute('x', `${x1 + bar1 * barWidth1}`);\n this.barIndicator.setAttribute('width', `${barWidth1}`);\n this.barIndicator.setAttribute('class', barColor1);\n } else {\n this.barIndicator.setAttribute('x', '0');\n this.barIndicator.setAttribute('width', '0');\n }\n }\n if (!track1) {\n this.screenBackground?.setAttribute('class', 'fill-blue-100');\n this.beatIndicator?.setAttribute('x', '0');\n this.beatIndicator?.setAttribute('width', '0');\n this.beatIndicator?.setAttribute('class', 'fill-blue-100');\n this.barIndicator?.setAttribute('x', '0');\n this.barIndicator?.setAttribute('width', '0');\n this.barIndicator?.setAttribute('class', 'fill-blue-100');\n if (this.label) {\n this.label?.setAttribute('class', 'fill-black');\n this.label.textContent = '';\n this.subLabel?.setAttribute('class', 'fill-black');\n this.subLabel!.textContent = '';\n }\n }\n }\n};\ninterface VirtualPedalSignature {\n Element: HTMLDivElement;\n Args: {\n songFile?: SongFile;\n };\n Blocks: {\n };\n}\nexport default class VirtualPedalComponent extends Component {\n @service('virtual-pedal')\n pedalService: VirtualPedalService;\n @service\n projectManager: ProjectManagerService;\n constructor(owner1: unknown, args1: VirtualPedalSignature['Args']){\n super(owner1, args1);\n }\n get title() {\n return this.projectManager.currentSong?.name;\n }\n @action\n async triggerPlay() {\n this.pedalService.start();\n }\n @action\n triggerFill() {\n this.pedalService.triggerFill();\n }\n @action\n startTransition(partNumber1?: number) {\n this.pedalService.triggerStartTransition(partNumber1 ?? 127);\n }\n @action\n endTransition() {\n this.pedalService.triggerEndTransition();\n }\n @action\n triggerOutro() {\n // You can't trigger an outro if you're already in a transition\n if (this.pedalService.currentTrackType === TrackType.TRANSITION) {\n return;\n }\n this.pedalService.trackQueue.clear();\n this.pedalService.triggerOutro();\n }\n @action\n stop() {\n this.pedalService.stop();\n }\n isStarting = false;\n isEnding = false;\n inTransition = false;\n pedalTimer?: number;\n @action\n mouseDown(ev1: MouseEvent) {\n this.mainPedalDown(ev1.detail);\n document.addEventListener('mouseup', this.mouseUp);\n }\n mainPedalDown(pressCount1: number) {\n if (pressCount1 >= 3) {\n clearTimeout(this.pedalTimer);\n this.pedalTimer = undefined;\n this.stop();\n return;\n }\n if (pressCount1 === 2) {\n clearTimeout(this.pedalTimer);\n this.pedalTimer = undefined;\n this.isEnding = true;\n this.triggerOutro();\n return;\n }\n if (!this.pedalService.isPlaying) {\n this.isStarting = true;\n this.triggerPlay();\n return;\n }\n if (this.pedalService.isPlaying) {\n if (this.pedalService.currentTrackType === TrackType.INTRO) {\n this.triggerOutro();\n return;\n }\n clearTimeout(this.pedalTimer);\n this.pedalTimer = setTimeout(()=>{\n this.inTransition = true;\n this.startTransition();\n this.pedalTimer = undefined;\n }, 500);\n }\n }\n @action\n mouseUp() {\n this.mainPedalUp();\n document.removeEventListener('mouseup', this.mouseUp);\n }\n mainPedalUp() {\n // clear window selection\n window.getSelection()?.removeAllRanges();\n if (this.isStarting) {\n this.isStarting = false;\n return;\n }\n if (this.isEnding) {\n this.isEnding = false;\n return;\n }\n if (this.pedalTimer) {\n clearTimeout(this.pedalTimer);\n this.pedalTimer = undefined;\n this.triggerFill();\n return;\n }\n if (this.inTransition) {\n this.inTransition = false;\n this.endTransition();\n }\n }\n @action\n footSwitchLeft() {\n this.pedalService.triggerFootSwitchLeft();\n }\n @action\n footSwitchRight() {\n this.pedalService.triggerFootSwitchRight();\n }\n keyboardTimer?: number;\n pedalState: 'up' | 'down' = 'up';\n pressCount = 0;\n @action\n keyboardPedal(ev1: KeyboardEvent) {\n if (ev1.type === 'keydown') {\n if (this.pedalState === 'down') return;\n this.pedalState = 'down';\n this.pressCount++;\n this.mainPedalDown(this.pressCount);\n }\n if (ev1.type === 'keyup') {\n if (this.pedalState === 'up') return;\n this.keyboardTimer && clearTimeout(this.keyboardTimer);\n this.pedalState = 'up';\n this.mainPedalUp();\n this.keyboardTimer = setTimeout(()=>{\n this.pressCount = 0;\n }, 300);\n }\n }\n static{\n template(`\n \n
\n {{this.title}}\n {{! template-lint-disable no-forbidden-elements }}\n {{! template-lint-disable no-invalid-interactive }}\n {{! template-lint-disable no-pointer-down-event-binding }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{! \n \n \n }}\n \n \n \n \n
\n \n `, {\n component: this,\n eval () {\n return eval(arguments[0]);\n }\n });\n }\n}\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n VirtualPedal: typeof VirtualPedalComponent;\n }\n}\n","export default {\"modulePrefix\":\"editor\",\"environment\":\"production\",\"rootURL\":\"/\",\"locationType\":\"history\",\"EmberENV\":{\"EXTEND_PROTOTYPES\":false,\"FEATURES\":{},\"_APPLICATION_TEMPLATE_WRAPPER\":false,\"_DEFAULT_ASYNC_OBSERVERS\":true,\"_JQUERY_INTEGRATION\":false,\"_NO_IMPLICIT_ROUTE_MODEL\":true,\"_TEMPLATE_ONLY_GLIMMER_COMPONENTS\":true},\"fontawesome\":{\"defaultPrefix\":\"fal\"},\"APP\":{\"name\":\"editor\",\"version\":\"1.5.4+29c7bc7d\"}};","export default function add(...numbers: number[]) {\n return numbers.reduce((sum, n) => sum + n, 0);\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n add: typeof add;\n }\n}\n","export default function eq(first: any, second: any) {\n return first == second;\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n eq: typeof eq;\n }\n}\n","export default function gt(first: number, second: number) {\n return first > second;\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n gt: typeof gt;\n }\n}\n","export default function gte(first: number, second: number) {\n return first >= second;\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n gte: typeof gte;\n }\n}\n","export default function htmlId(id: string) {\n return `#${id}`;\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'html-id': typeof htmlId;\n }\n}\n","export default function notEq(first: any, second: any) {\n return first != second;\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n notEq: typeof notEq;\n 'not-eq': typeof notEq;\n }\n}\n","export default function not(value: any) {\n return !value;\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n not: typeof not;\n }\n}\n","export default function or(...args: any) {\n return args.some((arg: any) => arg);\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n or: typeof or;\n }\n}\n","import { get } from '@ember/object';\n\nexport default function pick(path: string, callback: (value: any) => void) {\n return (ev: Event) => {\n const value = get(ev, path);\n callback(value);\n };\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n pick: typeof pick;\n }\n}\n","export default function queue(...functions: Function[]) {\n return function (...args: any[]) {\n functions.forEach((fn) => fn(...args));\n };\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n queue: typeof queue;\n }\n}\n","import { createNanoEvents, type Emitter } from 'nanoevents';\n\ninterface UndoRedoEvents {\n execute: (t: T) => void;\n reverse: (t: T) => void;\n}\n\nexport default abstract class Command {\n name: string;\n emmitter: Emitter>;\n\n constructor(name: string) {\n this.name = name;\n this.emmitter = createNanoEvents>();\n }\n\n on>(\n event: E,\n callback: UndoRedoEvents[E],\n ) {\n return this.emmitter.on(event, callback);\n }\n\n perform(): T | Promise {\n const result: T | Promise = this.execute();\n return Promise.resolve(result).then((result) => {\n this.markDirty();\n this.emmitter.emit('execute', result);\n return result;\n });\n }\n\n undo(): T | Promise {\n const result: T | Promise = this.reverse();\n return Promise.resolve(result).then((result) => {\n this.markDirty();\n this.emmitter.emit('reverse', result);\n return result;\n });\n }\n\n abstract markDirty(): void;\n\n abstract execute(): T | Promise;\n\n abstract reverse(): T | Promise;\n}\n\nexport class CompositeCommand extends Command {\n commands: Command[] = [];\n\n constructor(name: string, commands: Command[]) {\n super(name);\n this.commands = commands;\n }\n\n markDirty(): void {\n this.commands.forEach((command) => command.markDirty());\n }\n\n execute() {\n return Promise.all(\n this.commands.map((command: Command) => command.perform()),\n );\n }\n\n reverse() {\n return Promise.all(\n this.commands.toReversed().map((command: Command) => command.undo()),\n );\n }\n}\n","import ProjectManagerService, {\n type DrumsetFile,\n} from 'editor/services/project-manager';\nimport Command from './command';\nimport Drumset, { Instrument, Velocity, type IInstrument } from './drumset';\n\nexport class SortDrumsetsCommand extends Command {\n project: ProjectManagerService;\n oldIndex: number;\n newIndex: number;\n\n constructor(\n project: ProjectManagerService,\n oldIndex: number,\n newIndex: number,\n ) {\n super('Sort Drum Sets');\n this.project = project;\n this.oldIndex = oldIndex;\n this.newIndex = newIndex;\n }\n\n markDirty(): void {\n this.project.drumsetsDirty = true;\n }\n\n execute() {\n const drumset = this.project.drumsets[this.oldIndex];\n const arr = [...this.project.drumsets];\n if (drumset) {\n // remove drumset from oldIndex and insert it at newIndex\n arr.splice(this.oldIndex, 1);\n arr.splice(this.newIndex, 0, drumset);\n }\n this.project.drumsets = arr;\n }\n\n reverse() {\n const drumset = this.project.drumsets[this.newIndex];\n const arr = [...this.project.drumsets];\n if (drumset) {\n // remove drumset from newIndex and insert it at oldIndex\n arr.splice(this.newIndex, 1);\n arr.splice(this.oldIndex, 0, drumset);\n }\n this.project.drumsets = arr;\n }\n}\n\nexport class SortDrumsetsAlphabeticallyCommand extends Command {\n project: ProjectManagerService;\n drumsets: DrumsetFile[];\n\n constructor(project: ProjectManagerService) {\n super('Sort Drumsets Alphabetically');\n this.project = project;\n this.drumsets = [...project.drumsets];\n }\n\n markDirty(): void {\n this.project.drumsetsDirty = true;\n }\n\n execute() {\n this.project.drumsets = this.project.drumsets.toSorted((d1, d2) =>\n d1.name.localeCompare(d2.name),\n );\n }\n\n reverse() {\n this.project.drumsets = this.drumsets;\n }\n}\n\nexport class AddDrumsetCommand extends Command {\n project: ProjectManagerService;\n drumset: DrumsetFile;\n\n constructor(project: ProjectManagerService, drumsetFile: DrumsetFile) {\n super('Add Drum Set');\n this.project = project;\n this.drumset = drumsetFile;\n }\n\n markDirty(): void {\n this.project.drumsetsDirty = true;\n }\n\n execute() {\n this.project.drumsets = [...this.project.drumsets, this.drumset];\n return this.drumset;\n }\n\n reverse() {\n this.project.drumsets = this.project.drumsets.filter(\n (d) => d !== this.drumset,\n );\n return this.drumset;\n }\n}\n\nexport class RenameDrumsetCommand extends Command {\n drumset: DrumsetFile;\n fromName: string;\n toName: string;\n\n constructor(song: DrumsetFile, name: string) {\n super('Rename Drumset');\n this.drumset = song;\n this.fromName = song.name!;\n this.toName = name;\n }\n\n markDirty(): void {\n this.drumset.markDirty();\n }\n\n execute() {\n this.drumset.name = this.toName;\n return this.drumset;\n }\n\n reverse() {\n this.drumset.name = this.fromName;\n return this.drumset;\n }\n}\n\nexport class RenameInstrumentCommand extends Command {\n instrument: Instrument;\n fromName: string;\n toName: string;\n\n constructor(instrument: Instrument, name: string) {\n super('Rename Instrument');\n this.instrument = instrument;\n this.fromName = instrument.name!;\n this.toName = name;\n }\n\n markDirty(): void {\n this.instrument.markDirty();\n }\n\n execute() {\n this.instrument.name = this.toName;\n return this.instrument;\n }\n\n reverse() {\n this.instrument.name = this.fromName;\n return this.instrument;\n }\n}\n\nexport class AddSamplesToInstrumentCommand extends Command {\n instrument: Instrument;\n velocities: Velocity[];\n\n constructor(instrument: Instrument, velocities: Velocity[]) {\n super('Add samples to instrument');\n this.instrument = instrument;\n this.velocities = velocities;\n }\n\n markDirty(): void {\n this.instrument.markDirty();\n }\n\n execute() {\n this.instrument.addVelocities(this.velocities);\n return this.instrument;\n }\n\n reverse() {\n this.instrument.removeVelocities(this.velocities);\n return this.instrument;\n }\n}\n\nexport class RemoveSampleFromInstrumentCommand extends Command {\n instrument: Instrument;\n sample: Velocity;\n samples: Velocity[] = [];\n samplesVelocity: number = -1;\n\n constructor(instrument: Instrument, sample: Velocity) {\n super('Remove sample from instrument');\n this.instrument = instrument;\n this.sample = sample;\n }\n\n markDirty(): void {\n this.instrument.markDirty();\n }\n\n execute() {\n this.instrument.removeVelocities([this.sample]);\n if (this.instrument.velocities[0]?.vel ?? 0 !== 0) {\n this.samplesVelocity = this.instrument.velocities[0]!.vel;\n if (this.samplesVelocity > 0) {\n this.samples = this.instrument.velocities.filter(\n (v) => v.vel === this.samplesVelocity,\n );\n this.samples.forEach((sample) => {\n sample.vel = 0;\n });\n }\n }\n return this.sample;\n }\n\n reverse() {\n this.instrument.addVelocities([this.sample]);\n this.samples.forEach((sample) => {\n sample.vel = this.samplesVelocity;\n });\n return this.sample;\n }\n}\nexport class RenameVelocityCommand extends Command {\n velocity: Velocity;\n instrument: Instrument;\n fromName: string;\n toName: string;\n\n constructor(velocity: Velocity, instrument: Instrument, name: string) {\n super('Rename Velocity');\n this.velocity = velocity;\n this.instrument = instrument;\n this.fromName = velocity.name!;\n this.toName = name;\n }\n\n markDirty(): void {\n this.instrument.markDirty();\n }\n\n execute() {\n this.velocity.fileName = this.toName;\n return this.velocity;\n }\n\n reverse() {\n this.velocity.fileName = this.fromName;\n return this.velocity;\n }\n}\nexport class UpdateSampleVelocityCommand extends Command {\n instrument: Instrument;\n sample: Velocity;\n samples: Velocity[] = [];\n samplesVelocity: number = -1;\n fromVelocity: number;\n toVelocity: number;\n\n constructor(\n instrument: Instrument,\n sample: Velocity,\n toVelocity: number,\n fromVelocity?: number,\n ) {\n super('Update sample velocity');\n this.instrument = instrument;\n this.sample = sample;\n this.fromVelocity = fromVelocity ?? sample.vel;\n this.toVelocity = toVelocity;\n }\n\n markDirty(): void {\n this.instrument.markDirty();\n }\n\n execute() {\n this.sample.vel = this.toVelocity;\n this.instrument.sortVelocities();\n if (this.fromVelocity === 0) {\n if (this.instrument.velocities[0]!.vel !== 0) {\n this.samplesVelocity = this.instrument.velocities[0]!.vel;\n if (this.samplesVelocity > 0) {\n this.samples = this.instrument.velocities.filter(\n (v) => v.vel === this.samplesVelocity,\n );\n this.samples.forEach((sample) => {\n sample.vel = 0;\n });\n }\n }\n }\n return this.sample;\n }\n\n reverse() {\n this.samples.forEach((sample) => {\n sample.vel = this.samplesVelocity;\n });\n this.sample.vel = this.fromVelocity;\n this.instrument.sortVelocities();\n return this.sample;\n }\n}\n\nexport class CreateDrumsetCommand extends Command {\n project: ProjectManagerService;\n drumset?: DrumsetFile;\n\n constructor(project: ProjectManagerService) {\n super('Add New Drum Set');\n this.project = project;\n }\n\n markDirty(): void {\n this.project.drumsetsDirty = true;\n }\n\n async execute() {\n if (this.drumset) {\n this.project.drumsets = [...this.project.drumsets, this.drumset];\n } else {\n this.drumset = await this.project.createDrumset();\n }\n return this.drumset;\n }\n\n async reverse() {\n if (!this.drumset) {\n throw new Error('Drumset not found');\n }\n this.project.drumsets = this.project.drumsets.filter(\n (d) => d !== this.drumset,\n );\n return this.drumset;\n }\n}\n\nexport class AddNewInstrumentToDrumsetCommand extends Command {\n drumset: Drumset;\n instrumentId: number;\n instrumentName?: string;\n oldInstrument: Instrument;\n instrument: Instrument;\n\n constructor(\n drumset: Drumset,\n instrumentName?: string,\n instrumentId?: number,\n ) {\n super('Add New Instrument to Drumset');\n this.drumset = drumset;\n this.instrumentId =\n instrumentId ??\n drumset.instruments.findIndex((i) => i.velocities.length === 0) ??\n 0;\n this.instrumentName = instrumentName;\n this.oldInstrument = drumset.instruments[this.instrumentId]!;\n this.instrument = new Instrument(\n this.instrumentId,\n instrumentName ?? 'New Instrument',\n );\n this.instrument.addVelocities([new Velocity(0)]);\n }\n\n markDirty(): void {\n this.drumset.markDirty();\n }\n\n execute() {\n this.drumset.instruments = this.drumset.instruments.toSpliced(\n this.instrumentId,\n 1,\n this.instrument,\n );\n return this.instrument;\n }\n\n reverse() {\n this.drumset.instruments = this.drumset.instruments.toSpliced(\n this.instrumentId,\n 1,\n this.oldInstrument,\n );\n return this.instrument;\n }\n}\n\nexport class AddInstrumentToDrumsetCommand extends Command {\n drumset: Drumset;\n oldInstrument: Instrument;\n newInstrument: Instrument;\n\n constructor(drumset: Drumset, newInstrument: Instrument) {\n super('Add Instrument to Drumset');\n this.drumset = drumset;\n this.newInstrument = newInstrument;\n this.oldInstrument = drumset.instruments[this.newInstrument.id]!;\n }\n\n markDirty(): void {\n this.drumset.markDirty();\n }\n\n execute() {\n this.drumset.instruments = this.drumset.instruments.toSpliced(\n this.newInstrument.id,\n 1,\n this.newInstrument,\n );\n return this.newInstrument;\n }\n\n reverse() {\n this.drumset.instruments = this.drumset.instruments.toSpliced(\n this.oldInstrument.id,\n 1,\n this.oldInstrument,\n );\n return this.newInstrument;\n }\n}\n\nexport class UpdateInstrumentIdCommand extends Command {\n drumset: Drumset;\n instrument: IInstrument;\n fromId: number;\n toId: number;\n\n constructor(drumset: Drumset, instrument: IInstrument, toId: number) {\n super('Update Instrument Midi ID');\n this.drumset = drumset;\n this.instrument = instrument;\n this.fromId = instrument.id;\n this.toId = toId;\n }\n\n markDirty(): void {\n this.drumset.markDirty();\n }\n\n execute() {\n this.swapInstruments(this.fromId, this.toId);\n return this.instrument;\n }\n\n reverse() {\n this.swapInstruments(this.toId, this.fromId);\n return this.instrument;\n }\n\n swapInstruments(fromId: number, toId: number) {\n // Swap instruments\n const instruments = this.drumset.instruments;\n const fromInstrument = this.drumset.instruments[fromId]!;\n const toInstrument = this.drumset.instruments[toId]!;\n instruments[fromId] = toInstrument;\n instruments[toId] = fromInstrument;\n toInstrument.id = fromId;\n fromInstrument.id = toId;\n // We need to write it back for tracking purposes\n this.drumset.instruments = instruments;\n }\n}\n\nexport class DeleteInstrumentCommand extends Command {\n drumset: Drumset;\n instrument: Instrument;\n\n constructor(drumset: Drumset, instrument: Instrument) {\n super('Delete Instrument');\n this.drumset = drumset;\n this.instrument = instrument;\n }\n\n markDirty(): void {\n this.drumset.markDirty();\n }\n\n execute() {\n this.drumset.instruments = this.drumset.instruments.toSpliced(\n this.instrument.id,\n 1,\n new Instrument(this.instrument.id, ''),\n );\n return this.instrument;\n }\n\n reverse() {\n this.drumset.instruments = this.drumset.instruments.toSpliced(\n this.instrument.id,\n 1,\n this.instrument,\n );\n return this.instrument;\n }\n}\n\nexport class UpdateInstrumentVolumeCommand extends Command {\n instrument: IInstrument;\n fromVolume: number;\n toVolume: number;\n\n constructor(instrument: IInstrument, toVolume: number, fromVolume?: number) {\n super('Update Instrument Volume');\n this.instrument = instrument;\n this.fromVolume = fromVolume ?? instrument.volume;\n this.toVolume = toVolume;\n }\n\n markDirty(): void {\n this.instrument.markDirty();\n }\n\n execute() {\n this.instrument.volume = this.toVolume;\n return this.instrument;\n }\n\n reverse() {\n this.instrument.volume = this.fromVolume;\n return this.instrument;\n }\n}\n\nexport class UpdateInstrumentPolyphonyCommand extends Command {\n instrument: IInstrument;\n fromPoly: number;\n toPoly: number;\n\n constructor(instrument: IInstrument, toPoly: number, fromPoly?: number) {\n super('Update Instrument Polyphony');\n this.instrument = instrument;\n this.fromPoly = fromPoly ?? instrument.poly;\n this.toPoly = toPoly;\n }\n\n markDirty(): void {\n this.instrument.markDirty();\n }\n\n execute() {\n this.instrument.poly = this.toPoly;\n return this.instrument;\n }\n\n reverse() {\n this.instrument.poly = this.fromPoly;\n return this.instrument;\n }\n}\n\nexport class UpdateInstrumentChokeGroupCommand extends Command {\n instrument: IInstrument;\n fromChokeGroup: number;\n toChokeGroup: number;\n\n constructor(\n instrument: IInstrument,\n toChokeGroup: number,\n fromChokeGroup?: number,\n ) {\n super('Update Instrument Choke Group');\n this.instrument = instrument;\n this.fromChokeGroup = fromChokeGroup ?? instrument.chokeGroup;\n this.toChokeGroup = toChokeGroup;\n }\n\n markDirty(): void {\n this.instrument.markDirty();\n }\n\n execute() {\n this.instrument.chokeGroup = this.toChokeGroup;\n return this.instrument;\n }\n\n reverse() {\n this.instrument.chokeGroup = this.fromChokeGroup;\n return this.instrument;\n }\n}\n\nexport class UpdateInstrumentFillChokeGroupCommand extends Command {\n instrument: IInstrument;\n fromFillChokeGroup: number;\n toFillChokeGroup: number;\n\n constructor(\n instrument: IInstrument,\n toFillChokeGroup: number,\n fromFillChokeGroup?: number,\n ) {\n super('Update Instrument Fill Choke Group');\n this.instrument = instrument;\n this.fromFillChokeGroup = fromFillChokeGroup ?? instrument.fillChokeGroup;\n this.toFillChokeGroup = toFillChokeGroup;\n }\n\n markDirty(): void {\n this.instrument.markDirty();\n }\n\n execute() {\n this.instrument.fillChokeGroup = this.toFillChokeGroup;\n return this.instrument;\n }\n\n reverse() {\n this.instrument.fillChokeGroup = this.fromFillChokeGroup;\n return this.instrument;\n }\n}\n\nexport class UpdateInstrumentFillChokeDelayCommand extends Command {\n instrument: IInstrument;\n fromFillChokeDelay: number;\n toFillChokeDelay: number;\n\n constructor(\n instrument: IInstrument,\n toFillChokeDelay: number,\n fromFillChokeDelay?: number,\n ) {\n super('Update Instrument Fill Choke Delay');\n this.instrument = instrument;\n this.fromFillChokeDelay = fromFillChokeDelay ?? instrument.fillChokeDelay;\n this.toFillChokeDelay = toFillChokeDelay;\n }\n\n markDirty(): void {\n this.instrument.markDirty();\n }\n\n execute() {\n this.instrument.fillChokeDelay = this.toFillChokeDelay;\n return this.instrument;\n }\n\n reverse() {\n this.instrument.fillChokeDelay = this.fromFillChokeDelay;\n return this.instrument;\n }\n}\n\nexport class UpdateInstrumentNonPercussionCommand extends Command {\n instrument: IInstrument;\n nonPercussion: number;\n\n constructor(instrument: IInstrument, nonPercussion: number) {\n super('Update Instrument Non-Percussion');\n this.instrument = instrument;\n this.nonPercussion = nonPercussion;\n }\n\n markDirty(): void {\n this.instrument.markDirty();\n }\n\n execute() {\n this.instrument.nonPercussion = this.nonPercussion ? 1 : 0;\n return this.instrument;\n }\n\n reverse() {\n this.instrument.nonPercussion = this.nonPercussion ? 0 : 1;\n return this.instrument;\n }\n}\n\nexport class DeleteDrumsetCommand extends Command {\n projectManager: ProjectManagerService;\n drumset: DrumsetFile;\n index: number;\n\n constructor(projectManager: ProjectManagerService, drumset: DrumsetFile) {\n super('Delete Drumset');\n this.projectManager = projectManager;\n this.index = projectManager.drumsets.findIndex((d) => d === drumset);\n this.drumset = drumset;\n }\n\n markDirty(): void {\n this.drumset.markDirty();\n this.projectManager.drumsetsDirty = true;\n }\n\n async execute() {\n this.projectManager.drumsets = this.projectManager.drumsets.filter(\n (d) => d !== this.drumset,\n );\n if (this.projectManager.currentDrumset === this.drumset) {\n this.projectManager.currentDrumset = undefined;\n }\n return this.drumset;\n }\n\n async reverse() {\n this.projectManager.addDrumset(this.drumset, this.index);\n this.drumset.hash = \"\";\n return this.drumset;\n }\n}\n\nexport class DuplicateDrumsetCommand extends Command {\n projectManager: ProjectManagerService;\n drumset: DrumsetFile;\n newDrumset?: DrumsetFile;\n\n constructor(projectManager: ProjectManagerService, drumset: DrumsetFile) {\n super('Duplicate Drumset');\n this.projectManager = projectManager;\n this.drumset = drumset;\n }\n\n markDirty(): void {\n this.projectManager.drumsetsDirty = true;\n this.newDrumset?.markDirty();\n }\n\n async execute() {\n this.newDrumset =\n this.newDrumset ?? (await this.projectManager.copyDrumset(this.drumset));\n this.projectManager.drumsets = [\n ...this.projectManager.drumsets,\n this.newDrumset,\n ];\n return this.newDrumset;\n }\n\n async reverse() {\n this.projectManager.drumsets = this.projectManager.drumsets.filter(\n (d) => d !== this.newDrumset,\n );\n return this.drumset;\n }\n}\n\nexport class UpdateDrumsetVolumeCommand extends Command {\n drumset: Drumset;\n fromVolume: number;\n toVolume: number;\n\n constructor(drumset: Drumset, toVolume: number, fromVolume?: number) {\n super('Update Drumset Volume');\n this.drumset = drumset;\n this.fromVolume = fromVolume ?? drumset.volume;\n this.toVolume = toVolume;\n }\n\n markDirty(): void {\n this.drumset.markDirty();\n }\n\n execute() {\n this.drumset.volume = this.toVolume;\n return this.drumset;\n }\n\n reverse() {\n this.drumset.volume = this.fromVolume;\n return this.drumset;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport Crc32 from 'editor/utils/crc32';\nimport promiseBatch from 'editor/utils/promise-batch';\nimport Reader from 'editor/utils/reader';\nimport Writer from 'editor/utils/writer';\n\nclass DrumsetHeader {\n type: string = 'BBds';\n version: number = 1;\n revision: number = 1;\n build: number = 5697;\n crc: number = 0;\n}\n\nexport interface IInstrument {\n id: number;\n name: string;\n nonPercussion: number;\n chokeGroup: number;\n fillChokeGroup: number;\n fillChokeDelay: number;\n volume: number;\n poly: number;\n volumeDb: number;\n markDirty(): void;\n}\n\nexport class Instrument implements IInstrument {\n @tracked id: number = 0;\n @tracked name: string = '';\n @tracked chokeGroup: number = 0;\n @tracked poly: number = 0;\n dataSize: number = 0;\n @tracked volume: number = 100;\n @tracked fillChokeGroup: number = 0;\n @tracked fillChokeDelay: number = 0;\n @tracked nonPercussion: number = 0;\n @tracked _velocities: Velocity[] = [];\n _isDirty: boolean = false;\n\n constructor(id: number, name: string = 'Unknown') {\n this.id = id;\n this.name = name;\n }\n\n get isDirty() {\n return this._isDirty;\n }\n\n markDirty() {\n this._isDirty = true;\n }\n\n markClean() {\n this._isDirty = false;\n }\n\n get size() {\n return this.#nameSize + this.velocities.reduce((a, b) => a + b.size, 0);\n }\n\n get isValid(): true | string {\n if (this.velocities.some((v) => !v.data)) {\n return 'Missing samples';\n }\n if (this.velocities.length > 16) {\n return 'Too many samples (max 16)';\n }\n return true;\n }\n\n get #nameSize() {\n if (this.name === '') return 0;\n return 4 + this.name.length;\n }\n\n get velocities() {\n return this._velocities;\n }\n\n set velocities(velocities: Velocity[]) {\n this._velocities = velocities.toSorted((v1, v2) => v1.vel - v2.vel);\n }\n\n sortVelocities() {\n this._velocities = this._velocities.toSorted((v1, v2) => v1.vel - v2.vel);\n }\n\n addVelocities(velocities: Velocity[]) {\n this.velocities = [...this._velocities, ...velocities];\n }\n\n removeVelocities(velocities: Velocity[]) {\n this.velocities = this._velocities.filter(\n (velocity) => !velocities.includes(velocity),\n );\n }\n\n cleanVelocities() {\n this._velocities = this._velocities.filter((velocity) => velocity.data);\n }\n\n get volumeDb() {\n // return volume to db where 100 is 0dB and 0 is -40dB\n return Number((20 * Math.log10(this.volume / 100)).toFixed(1));\n }\n\n copy() {\n const instrument = new Instrument(this.id, this.name);\n instrument.chokeGroup = this.chokeGroup;\n instrument.poly = this.poly;\n instrument.volume = this.volume;\n instrument.fillChokeGroup = this.fillChokeGroup;\n instrument.fillChokeDelay = this.fillChokeDelay;\n instrument.nonPercussion = this.nonPercussion;\n instrument._velocities = this._velocities.map((velocity) =>\n velocity.copy(),\n );\n return instrument;\n }\n}\n\nexport class Velocity {\n @tracked fileName?: string;\n bps: number = 0;\n nChannel: number = 0;\n fs: number = 0;\n @tracked vel: number = 0;\n nSample: number = 0;\n offset: number = 0;\n data?: ArrayBuffer;\n sample?: ArrayBuffer;\n crc: number = 0;\n @tracked audio?: AudioBuffer;\n\n constructor(vel: number = 0) {\n this.vel = vel;\n }\n\n get name() {\n return this.fileName\n ?.split('/')\n ?.pop()\n ?.replace(/\\.wav$/i, '');\n }\n\n get size() {\n if (this.data) {\n const dataSize = this.data.byteLength;\n const padding = 512 - (dataSize % 512);\n const fileNameSize = this.fileName?.length ?? 0 + 4;\n return dataSize + padding + fileNameSize;\n } else {\n return 0;\n }\n }\n\n _loudness?: number;\n get loudness() {\n if (this._loudness !== undefined) {\n return this._loudness;\n }\n\n if (!this.audio) {\n return 0;\n }\n\n this._loudness = calculateLoudness(this.audio);\n return this._loudness;\n }\n\n get duration() {\n return this.audio?.duration ?? 0;\n }\n\n copy() {\n const velocity = new Velocity(this.vel);\n velocity.fileName = this.fileName;\n velocity.bps = this.bps;\n velocity.nChannel = this.nChannel;\n velocity.fs = this.fs;\n velocity.nSample = this.nSample;\n velocity.offset = this.offset;\n velocity.data = this.data;\n velocity.sample = this.sample;\n velocity.crc = this.crc;\n velocity.audio = this.audio;\n return velocity;\n }\n}\n\nfunction calculateLoudness(audioBuffer: AudioBuffer) {\n const channels = audioBuffer.numberOfChannels;\n const peak = Math.max(\n ...Array.from({ length: channels }).map((_, c) => {\n const channel = audioBuffer.getChannelData(c);\n const peak = channel.reduce(\n (max, val) => Math.max(max, Math.abs(val)),\n 0,\n );\n return peak;\n }),\n );\n const loudness = 20 * Math.log10(peak); // convert to dB\n return loudness;\n}\n\nclass DrumsetOffsets {\n metaDataOffset: number = 0;\n metaDataSize: number = 0;\n extensionsHeader: string = 'exts';\n volumeOffset: number = 0;\n volumeSize: number = 0;\n}\n\nclass DrumsetInfo {\n @tracked name: string = '';\n @tracked volume: number = 100;\n}\n\nexport default class Drumset {\n header: DrumsetHeader = new DrumsetHeader();\n @tracked instruments: Instrument[] = new Array(128)\n .fill(0)\n .map((_, i) => new Instrument(i));\n offsets: DrumsetOffsets = new DrumsetOffsets();\n info: DrumsetInfo = new DrumsetInfo();\n _isDirty = false;\n\n get isDirty() {\n return this._isDirty || this.instruments.some((i) => i.isDirty);\n }\n\n markDirty() {\n this._isDirty = true;\n }\n\n markClean() {\n this._isDirty = false;\n this.instruments.forEach((i) => i.markClean());\n }\n\n get name() {\n return this.info.name;\n }\n\n set name(value: string) {\n this.info.name = value;\n }\n\n get volume() {\n return this.info.volume;\n }\n\n set volume(value: number) {\n this.info.volume = value;\n }\n\n get volumeDb() {\n // return volume to db where 100 is 0dB and 0 is -40dB\n return Number((20 * Math.log10(this.volume / 100)).toFixed(1));\n }\n\n get size(): number {\n const headerInfo = 60416;\n const samplesSize = this.instruments.reduce((sum, i) => sum + i.size, 0);\n return headerInfo + samplesSize;\n }\n\n get isValid(): true | string {\n if (this.size > 1024 * 1024 * 100) {\n return 'Drumset file size is too large (max 100 MB)';\n }\n if (this.playableInstruments.length === 0) {\n return 'No instruments';\n }\n for (let i = 0; i < 128; i++) {\n const instrument = this.instruments[i]!;\n const valid = instrument.isValid;\n if (valid !== true) {\n return `${instrument.name}: ${valid}`;\n }\n }\n return true;\n }\n\n get playableInstruments() {\n return this.instruments\n .filter((instrument) => {\n return instrument.velocities.length > 0;\n })\n .sort((a, b) => a.id - b.id)\n .reverse();\n }\n\n get availableInstruments() {\n return this.instruments\n .filter((instrument) => {\n return instrument.velocities.length === 0;\n })\n .sort((a, b) => a.id - b.id);\n }\n\n prepareAudio(audioContext: AudioContext) {\n const velocities = this.instruments.flatMap((instrument) =>\n instrument.velocities.flatMap((velocity) => velocity),\n );\n\n promiseBatch(velocities, 4, async (velocity) => {\n if (velocity.audio || velocity.sample?.detached) {\n return;\n }\n\n return audioContext.decodeAudioData(velocity.sample).then((audio) => {\n velocity.audio = audio;\n });\n });\n }\n\n save() {\n const headerLength = 12;\n let offsetsLength = 4; // metaDataOffset\n offsetsLength += 4; // metaDataSize\n if (\n (this.header.version === 1 && this.header.revision === 1) ||\n this.header.version > 1\n ) {\n offsetsLength += 4 * 9;\n }\n\n const instrumentsLength = 59904;\n\n const waveOffset = headerLength + instrumentsLength + offsetsLength;// 60416; // in PR #214, this was changed, but that caused pops in the audio when you saved a drumset. Brennan wanted this reverted, rather than a fix\n const waveOffsets: number[] = [];\n const wavesWriter = saveDrumsetWaves(this, waveOffset, waveOffsets);\n const instrumentsWriter = saveDrumsetInstruments(this, waveOffsets);\n\n const infoWriter = saveDrumsetInfo(this);\n\n const volumeWriter = saveDrumsetVolume(this);\n\n const offsetWriter = new Writer();\n offsetWriter.setUint(infoWriter.offset);\n if (\n (this.header.version === 1 && this.header.revision === 1) ||\n this.header.version > 1\n ) {\n offsetWriter.setString('exth', false);\n offsetWriter.setUint(\n headerLength +\n instrumentsLength +\n offsetsLength +\n wavesWriter.offset +\n infoWriter.offset,\n );\n offsetWriter.setUint(volumeWriter.offset);\n offsetWriter.setUint(0); // reserved\n offsetWriter.setUint(0); // reserved\n offsetWriter.setUint(0); // reserved\n offsetWriter.setUint(0); // reserved\n offsetWriter.setUint(0); // reserved\n offsetWriter.setUint(0); // reserved\n }\n const offsets = offsetWriter.close();\n\n const crc32 = new Crc32();\n crc32.update(offsetWriter.buffer, offsetWriter.offset);\n crc32.update(instrumentsWriter.buffer, instrumentsWriter.offset);\n crc32.update(offsetWriter.buffer, offsetWriter.offset);\n crc32.update(wavesWriter.buffer, wavesWriter.offset);\n crc32.update(infoWriter.buffer, infoWriter.offset);\n crc32.update(volumeWriter.buffer, volumeWriter.offset);\n const crc = crc32.getCRC(true);\n this.header.crc = crc;\n\n const headerWriter = saveDrumsetHeader(this);\n const header = headerWriter.close();\n const instruments = instrumentsWriter.close();\n const waves = wavesWriter.close();\n const info = infoWriter.close();\n const volume = volumeWriter.close();\n\n const drumsetWriter = new Writer();\n drumsetWriter.append(header);\n drumsetWriter.append(instruments);\n drumsetWriter.setUint(\n header.byteLength + instrumentsLength + offsetsLength + waves.byteLength,\n );\n drumsetWriter.append(offsets);\n drumsetWriter.append(waves);\n drumsetWriter.append(info);\n drumsetWriter.append(volume);\n return drumsetWriter.close();\n }\n\n copy() {\n const data = this.save();\n const drumset = Drumset.parse(data);\n drumset.name = `${this.name} Copy`;\n return drumset;\n }\n\n static parseHeader(buffer: ArrayBuffer) {\n const reader = new Reader(new DataView(buffer), 0);\n return parseDrumsetHeader(reader);\n }\n\n static parse(buffer: ArrayBuffer) {\n const reader = new Reader(new DataView(buffer), 0);\n const drumset = new Drumset();\n drumset.header = parseDrumsetHeader(reader);\n drumset.instruments = parseDrumsetInstruments(reader);\n drumset.offsets = parseDrumsetOffsets(reader);\n drumset.info = parseDrumsetInfo(reader, drumset);\n parseDrumsetWaves(reader, drumset);\n return drumset;\n }\n\n // This parses a WAV file and returns a Velocity object\n // The WAV file can be in any format, mono or stereo, 16 or 24 bit, sample rate\n // The WAV file will be converted to 16bit, 44100Hz, mono/stereo for the BeatBuddy\n static async parseWaveFile(buffer: ArrayBuffer) {\n const velocity = new Velocity();\n const reader = new Reader(new DataView(buffer), 0);\n const groupId = reader.getString(4);\n if (groupId !== 'RIFF') {\n throw new Error('Invalid wave file');\n }\n const size = reader.getUint();\n const riffType = reader.getString(4);\n const chunks = readWaveChunks(reader);\n\n const fmtChunk = chunks.get('fmt ');\n if (!fmtChunk) {\n throw new Error('Invalid wave file');\n }\n const fmtReader = new Reader(new DataView(fmtChunk), 0);\n const audioFormat = fmtReader.getShort();\n\n const numberOfChannels = fmtReader.getShort();\n velocity.nChannel = numberOfChannels;\n\n const sampleRate = fmtReader.getUint();\n velocity.fs = sampleRate;\n\n const byteRate = fmtReader.getUint();\n\n const blockAlign = fmtReader.getShort();\n\n const bitsPerSample = fmtReader.getShort();\n velocity.bps = bitsPerSample;\n\n const dataChunk = chunks.get('data');\n if (!dataChunk) {\n throw new Error('Invalid wave file');\n }\n\n velocity.nSample = dataChunk.byteLength / (bitsPerSample / 8);\n\n velocity.sample = buffer;\n\n const audioContext = new OfflineAudioContext({\n numberOfChannels: numberOfChannels,\n length: dataChunk.byteLength / (bitsPerSample / 8) / numberOfChannels,\n sampleRate: 44100,\n });\n const audio = await audioContext.decodeAudioData(buffer);\n const writer = new Writer(dataChunk.byteLength);\n saveWaveSamples(audio, writer);\n velocity.bps = 16;\n velocity.fs = 44100;\n velocity.data = writer.close();\n velocity.crc = new Crc32()\n .update(velocity.data, velocity.data.byteLength)\n .getCRC();\n velocity.audio = audio;\n\n return velocity;\n }\n static saveWaveFile(audio: AudioBuffer) {\n const sampleRate = audio.sampleRate;\n const bitsPerSample = 16;\n const numberOfChannels = audio.numberOfChannels;\n\n const length = audio.length * (bitsPerSample / 8) * numberOfChannels;\n\n const writer = new Writer(length + 44);\n writer.setString('RIFF', false);\n writer.setUint(length + 36);\n writer.setString('WAVE', false);\n // Chunk header\n writer.setString('fmt ', false);\n // Chunk size\n writer.setUint(16);\n // Audio format\n writer.setShort(1);\n // Channel count\n writer.setShort(numberOfChannels);\n // Sample rate\n writer.setUint(sampleRate);\n // Bytes per sample\n writer.setUint(audio.sampleRate * 2 * numberOfChannels);\n // Block align\n writer.setShort(numberOfChannels * 2);\n // Bits per sample\n writer.setShort(bitsPerSample);\n // Data header\n writer.setString('data', false);\n // Data size\n writer.setUint(length);\n // Data\n\n saveWaveSamples(audio, writer);\n return writer.close();\n }\n}\n\nfunction saveWaveSamples(audio: AudioBuffer, writer: Writer) {\n // write interleaved data\n const numberOfChannels = audio.numberOfChannels;\n const channels: Float32Array[] = [];\n let offset = 0;\n for (let i = 0; i < numberOfChannels; i++) {\n channels.push(audio.getChannelData(i));\n }\n\n while (!writer.eof) {\n for (let i = 0; i < numberOfChannels; i++) {\n // interleave channels\n let sample = Math.max(-1, Math.min(1, channels[i]![offset]!)); // clamp\n sample = (0.5 + sample < 0 ? sample * 32768 : sample * 32767) | 0;\n writer.setInt16(sample, true); // update data chunk\n }\n offset++;\n }\n return writer;\n}\n\nfunction readWaveChunks(reader: Reader) {\n const chunks = new Map();\n while (!reader.eof && reader.remaining > 8) {\n const chunkId = reader.getString(4);\n const chunkSize = reader.getUint();\n const chunk = reader.getBytes(chunkSize);\n chunks.set(chunkId, chunk);\n }\n return chunks;\n}\n\nfunction parseDrumsetOffsets(reader: Reader) {\n const offsets = new DrumsetOffsets();\n offsets.metaDataOffset = reader.getUint();\n offsets.metaDataSize = reader.getUint();\n offsets.extensionsHeader = reader.getString(4);\n offsets.volumeOffset = reader.getUint();\n offsets.volumeSize = reader.getUint();\n reader.getUint(); // reserved\n reader.getUint(); // reserved\n reader.getUint(); // reserved\n reader.getUint(); // reserved\n reader.getUint(); // reserved\n reader.getUint(); // reserved\n return offsets;\n}\n\nfunction parseDrumsetHeader(reader: Reader) {\n const header = new DrumsetHeader();\n header.type = reader.getString(4);\n header.version = reader.getByte();\n header.revision = reader.getByte();\n header.build = reader.getUShort();\n header.crc = reader.getUint();\n return header;\n}\n\nfunction saveDrumsetHeader(drumset: Drumset) {\n const header = drumset.header;\n const writer = new Writer(16);\n writer.setString(header.type, false);\n writer.setByte(header.version);\n writer.setByte(header.revision);\n writer.setUShort(header.build);\n writer.setUint(header.crc);\n return writer;\n}\n\nfunction parseDrumsetInstruments(reader: Reader) {\n const instruments: Instrument[] = [];\n for (let i = 0; i < 128; i++) {\n instruments.push(parseDrumsetInstrument(reader, i));\n }\n return instruments;\n}\n\nfunction parseDrumsetInstrument(reader: Reader, id: number) {\n const instrument = new Instrument(id);\n instrument.chokeGroup = reader.getUShort();\n instrument.poly = reader.getUShort();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _nVel = reader.getUint();\n instrument.dataSize = reader.getUint();\n instrument.volume = reader.getByte();\n instrument.fillChokeGroup = reader.getByte();\n instrument.fillChokeDelay = reader.getByte();\n instrument.nonPercussion = reader.getByte();\n reader.getUint(); // reserved\n const velocities = [];\n for (let i = 0; i < 16; i++) {\n const val = new Velocity();\n val.bps = reader.getUShort(); // Bits per sample\n val.nChannel = reader.getUShort(); // Number of channel (mono/stereo)\n val.fs = reader.getUint(); // Sampling frequency\n val.vel = reader.getUint(); // Lower bound velocity\n val.nSample = reader.getUint(); // Number of sample in the wav\n reader.getUint(); // Reserved\n reader.getUint(); // Reserved\n val.offset = reader.getUint(); // Offset [from start of file]\n if (val.bps !== 0) {\n velocities.push(val);\n }\n }\n instrument.velocities = velocities;\n if (velocities.length) {\n if (instrument.volume === 0) {\n instrument.volume = 100;\n }\n if (instrument.volume > 100) {\n instrument.volume = 100;\n }\n }\n return instrument;\n}\n\nfunction saveDrumsetInstruments(drumset: Drumset, offsets: number[]) {\n const writer = new Writer();\n drumset.instruments.forEach((instrument, i) => {\n let offset = instrument.velocities.length > 0 ? offsets.shift() ?? 0 : 0;\n writer.setUShort(instrument.chokeGroup);\n writer.setUShort(instrument.poly);\n writer.setUint(instrument.velocities.length);\n writer.setUint(instrument.dataSize);\n writer.setByte(instrument.volume);\n writer.setByte(instrument.fillChokeGroup);\n writer.setByte(instrument.fillChokeDelay);\n writer.setByte(instrument.nonPercussion);\n writer.setUint(0); // reserved\n for (let i = 0; i < 16; i++) {\n const velocity = instrument.velocities[i];\n writer.setUShort(velocity?.bps ?? 0);\n writer.setUShort(velocity?.nChannel ?? 0);\n writer.setUint(velocity?.fs ?? 0);\n writer.setUint(velocity?.vel ?? 0);\n writer.setUint(velocity?.nSample ?? 0);\n writer.setUint(0); // reserved\n writer.setUint(0); // reserved\n writer.setUint(velocity ? offset : 0);\n if (velocity) {\n offset += velocity?.data?.byteLength ?? 0;\n }\n }\n });\n return writer;\n}\n\nfunction parseDrumsetInfo(reader: Reader, drumset: Drumset) {\n const info = new DrumsetInfo();\n reader.seek(drumset.offsets.metaDataOffset);\n info.name = reader.streamString(false);\n drumset.instruments.forEach((instrument, i) => {\n if (instrument.velocities.length > 0) {\n instrument.name = reader.streamString(false);\n }\n });\n drumset.instruments.forEach((instrument) => {\n instrument.velocities.forEach((velocity) => {\n if (velocity.nSample !== 0) {\n velocity.fileName = reader.streamString(false);\n }\n });\n });\n\n if (drumset.offsets.volumeOffset) {\n reader.seek(drumset.offsets.volumeOffset);\n const type = reader.getString(4); // \"volg\"\n // Some drumsets have a volume offset but no volume data\n if (type === 'volg') {\n info.volume = reader.getUint(false);\n }\n }\n return info;\n}\n\nfunction saveDrumsetInfo(drumset: Drumset) {\n const writer = new Writer();\n writer.streamString(drumset.info.name, false);\n drumset.instruments.forEach((instrument) => {\n if (instrument.velocities.length > 0) {\n writer.streamString(instrument.name, false);\n }\n });\n drumset.instruments.forEach((instrument) => {\n instrument.velocities.forEach((velocity) => {\n if (velocity.fileName) {\n writer.streamString(velocity.fileName, false);\n }\n });\n });\n writer.setUint(0); // reserved\n return writer;\n}\n\nfunction saveDrumsetVolume(drumset: Drumset) {\n const writer = new Writer();\n writer.setString('volg', false);\n writer.setUint(drumset.info.volume, false);\n return writer;\n}\n\nfunction parseDrumsetWaves(reader: Reader, drumset: Drumset) {\n drumset.instruments.forEach((instrument) => {\n instrument.velocities.forEach((velocity) => {\n const bitsPerSample = velocity.bps;\n const numberChannels = velocity.nChannel;\n const sampleRate = velocity.fs;\n const rawSize = (bitsPerSample / 8) * velocity.nSample;\n const data = reader.seek(velocity.offset).getBytes(rawSize);\n const writer = new Writer(rawSize + 36);\n writer.setString('RIFF', false);\n writer.setUint(rawSize + 36);\n writer.setString('WAVE', false);\n // Chunk header\n writer.setString('fmt ', false);\n // Chunk size\n writer.setUint(16);\n // Audio format\n writer.setShort(1);\n // Channel count\n writer.setShort(numberChannels);\n // Sample rate\n writer.setUint(sampleRate);\n // Bytes per sample\n writer.setUint(\n (sampleRate * bitsPerSample * numberChannels * bitsPerSample) / 8,\n );\n // Block align\n writer.setShort((bitsPerSample * numberChannels) / 8);\n // Bits per sample\n writer.setShort(bitsPerSample);\n // Data header\n writer.setString('data', false);\n // Data size\n writer.setUint(rawSize);\n // Data\n writer.append(data);\n // We need both the raw data and the sample because when we decode the sample\n // to an audio buffer, we lose the raw data—it gets detached.\n // the alternative is to copy the raw data into the sample, but that\n // adds copy overhead at the time when we need to decode the sample and play.\n // see: https://github.com/WebAudio/web-audio-api/issues/1175\n velocity.data = data;\n velocity.sample = writer.close();\n });\n });\n}\n\nfunction saveDrumsetWaves(\n drumset: Drumset,\n waveOffset: number,\n offsets: number[],\n) {\n const writer = new Writer();\n let offset = 60416;\n // Offset the difference between the hard coded offset and the actual offset\n writer.offset += offset - waveOffset;\n let padding = 0;\n drumset.instruments.forEach((instrument) => {\n instrument.cleanVelocities();\n instrument.dataSize = 0;\n if (instrument.velocities.length > 0) {\n writer.offset += padding;\n offset += padding;\n offsets.push(offset);\n instrument.velocities.forEach((velocity) => {\n instrument.dataSize += velocity.data!.byteLength;\n writer.append(velocity.data!);\n offset += velocity.data!.byteLength;\n });\n padding = 512 - (instrument.dataSize % 512);\n }\n });\n return writer;\n}\n","import ProjectManagerService, {\n SongFile,\n SongFolder,\n} from 'editor/services/project-manager';\nimport Command from './command';\n\nexport class RenameFolderCommand extends Command {\n folder: SongFolder;\n fromName: string;\n toName: string;\n\n constructor(folder: SongFolder, name: string) {\n super('Rename Folder');\n this.folder = folder;\n this.fromName = folder.name;\n this.toName = name;\n }\n\n markDirty(): void {\n this.folder.markDirty();\n }\n\n execute() {\n this.folder.name = this.toName;\n return this.folder;\n }\n\n reverse() {\n this.folder.name = this.fromName;\n return this.folder;\n }\n}\n\nexport class SortFoldersSongsAlphabeticallyCommand extends Command {\n project: ProjectManagerService;\n folders: SongFolder[];\n\n constructor(project: ProjectManagerService) {\n super('Sort Folders & Songs Alphabetically');\n this.project = project;\n this.folders = project.songFolders.map((f) => {\n const folder = new SongFolder(f.handle, f.name, f.path);\n folder.songs = [...f.songs];\n return folder;\n });\n }\n\n markDirty(): void {\n this.project.songFoldersDirty = true;\n }\n\n execute() {\n if (this.project.sortMethod === 'AtoZ') {\n this.project.songFolders = this.project.songFolders.toSorted((d1, d2) =>\n d1.name.localeCompare(d2.name),\n );\n this.project.songFolders.forEach((folder) => {\n folder.songs = folder.songs.toSorted((s1, s2) =>\n s1.name.localeCompare(s2.name),\n );\n });\n } else if (this.project.sortMethod === 'ZtoA') {\n this.project.songFolders = this.project.songFolders.toSorted((d1, d2) =>\n d2.name.localeCompare(d1.name),\n );\n this.project.songFolders.forEach((folder) => {\n folder.songs = folder.songs.toSorted((s1, s2) =>\n s2.name.localeCompare(s1.name),\n );\n });\n }\n }\n\n reverse() {\n this.project.songFolders = this.folders;\n }\n}\n\nexport class SortFoldersCommand extends Command {\n project: ProjectManagerService;\n oldIndex: number;\n newIndex: number;\n\n constructor(\n project: ProjectManagerService,\n oldIndex: number,\n newIndex: number,\n ) {\n super('Sort Folders');\n this.project = project;\n this.oldIndex = oldIndex;\n this.newIndex = newIndex;\n }\n\n markDirty(): void {\n this.project.songFoldersDirty = true;\n }\n\n execute() {\n const folder = this.project.songFolders[this.oldIndex];\n const arr = [...this.project.songFolders];\n if (folder) {\n // remove folder from oldIndex and insert it at newIndex\n arr.splice(this.oldIndex, 1);\n arr.splice(this.newIndex, 0, folder);\n }\n this.project.songFolders = arr.map((f) => {\n const folder = new SongFolder(f.handle, f.name, f.path);\n folder.songs = [...f.songs];\n return folder;\n });\n }\n\n reverse() {\n const folder = this.project.songFolders[this.newIndex];\n const arr = [...this.project.songFolders];\n if (folder) {\n // remove folder from newIndex and insert it at oldIndex\n arr.splice(this.newIndex, 1);\n arr.splice(this.oldIndex, 0, folder);\n }\n this.project.songFolders = arr.map((f) => {\n const folder = new SongFolder(f.handle, f.name, f.path);\n folder.songs = [...f.songs];\n return folder;\n });\n }\n}\n\nexport class SortSongsCommand extends Command {\n folder: SongFolder;\n oldIndex: number;\n newIndex: number;\n\n constructor(folder: SongFolder, oldIndex: number, newIndex: number) {\n super('Sort Songs');\n this.folder = folder;\n this.oldIndex = oldIndex;\n this.newIndex = newIndex;\n }\n\n markDirty(): void {\n this.folder.markDirty();\n }\n\n execute() {\n const song = this.folder.songs[this.oldIndex];\n this.folder.addSong(song!, this.newIndex);\n this.folder.removeSong(this.oldIndex);\n\n return this.folder;\n }\n\n reverse() {\n const song = this.folder.songs[this.newIndex];\n this.folder.addSong(song!, this.oldIndex);\n this.folder.removeSong(this.newIndex);\n\n return this.folder;\n }\n}\n\nexport class MoveSongCommand extends Command {\n fromFolder: SongFolder;\n fromIndex: number;\n toFolder: SongFolder;\n toIndex?: number;\n\n constructor(\n fromFolder: SongFolder,\n fromIndex: number,\n toFolder: SongFolder,\n toIndex?: number,\n ) {\n super('Move Song');\n this.fromFolder = fromFolder;\n this.fromIndex = fromIndex;\n this.toFolder = toFolder;\n this.toIndex = toIndex;\n }\n\n markDirty(): void {\n this.fromFolder.markDirty();\n this.toFolder.markDirty();\n }\n\n async execute() {\n const song = await this.fromFolder.removeSong(this.fromIndex);\n if (!song) {\n throw new Error('Song not found');\n }\n await this.toFolder.addSong(song, this.toIndex);\n if (!this.toIndex) {\n this.toIndex = this.toFolder.songs.indexOf(song);\n }\n return song;\n }\n\n async reverse() {\n const song = await this.toFolder.removeSong(this.toIndex!);\n if (!song) {\n throw new Error('Song not found');\n }\n await this.fromFolder.addSong(song, this.fromIndex);\n return song;\n }\n}\n\nexport class AddFolderCommand extends Command {\n project: ProjectManagerService;\n folder?: SongFolder;\n\n constructor(project: ProjectManagerService, name: string = 'New Folder') {\n super('Add Folder');\n this.project = project;\n this.name = name;\n }\n\n markDirty(): void {\n this.project.songFoldersDirty = true;\n this.folder?.markDirty();\n }\n\n async execute() {\n this.folder = await this.project.createSongFolder(this.name);\n return this.folder;\n }\n\n async reverse() {\n if (!this.folder) {\n throw new Error('Folder not found');\n }\n this.project.removeFolder(this.folder);\n return this.folder;\n }\n}\n\nexport class DeleteSongFolderCommand extends Command {\n projectManager: ProjectManagerService;\n folder: SongFolder;\n index: number;\n\n constructor(projectManager: ProjectManagerService, folder: SongFolder) {\n super('Delete Song Folder');\n this.projectManager = projectManager;\n this.index = projectManager.songFolders.findIndex((f) => f === folder);\n this.folder = folder;\n }\n\n markDirty(): void {\n this.projectManager.songFoldersDirty = true;\n }\n\n async execute() {\n this.projectManager.songFolders = this.projectManager.songFolders.filter(\n (f) => f !== this.folder,\n );\n return this.folder;\n }\n\n async reverse() {\n this.projectManager.songFolders = this.projectManager.songFolders.toSpliced(\n this.index,\n 0,\n this.folder,\n );\n return this.folder;\n }\n}\n","import { assert } from '@ember/debug';\nimport Reader from 'editor/utils/reader';\n\nclass Header {\n id: string;\n type: number;\n tracks: number;\n tickToQuarter: number;\n\n constructor(id: string, type: number, tracks: number, tickToQuarter: number) {\n this.id = id;\n this.type = type;\n this.tracks = tracks;\n this.tickToQuarter = tickToQuarter;\n }\n}\n\nclass MidiEvent {}\n\nclass Track {\n channel: number = 0;\n bpm = 120;\n timeSignatureNumerator = 4;\n timeSignatureDenominator = 4;\n tickCount = 0;\n barLength = 0;\n barCouunt = 0;\n events: MidiEvent[] = [];\n name?: string;\n\n constructor() {}\n}\n\nexport default class Midi {\n header: Header;\n tracks: Track[] = [];\n\n constructor(header: Header, tracks: Track[]) {\n this.header = header;\n this.tracks = tracks;\n }\n\n static parse(buffer: ArrayBuffer) {\n const reader = new Reader(new DataView(buffer), 0);\n const header = parseHeader(reader);\n let parsedTracks = parseTracks(reader, header);\n // Normalise ticks to 480/quarter note\n const tickAdjustmentFactor = 480 / header.tickToQuarter;\n header.tickToQuarter = 480;\n const tracks = parsedTracks.map((track) => {\n track.barLength = track.barLength * tickAdjustmentFactor;\n track.tickCount = track.tickCount * tickAdjustmentFactor;\n track.events = track.events.map((event: any) => {\n if (event.tick) {\n event.tick = event.tick * tickAdjustmentFactor;\n }\n return event;\n });\n return track;\n });\n return new Midi(header, tracks);\n }\n}\n\nfunction parseHeader(reader: Reader) {\n const id = reader.getString(4, false);\n assert('Invalid header id', id === 'MThd');\n const sectionLength = reader.getUint(false);\n assert('Invalid header length', sectionLength === 6);\n const type = reader.getShort(false);\n const tracks = reader.getShort(false);\n const tickToQuarter = reader.getShort(false);\n assert('Invalid tickToQuarter', tickToQuarter > 0);\n return new Header(id, type, tracks, tickToQuarter);\n}\n\nfunction parseTracks(reader: Reader, header: Header) {\n const tracks = [];\n for (let i = 0; i < header.tracks; i++) {\n const id = reader.getString(4, false);\n assert('Invalid track id', id === 'MTrk');\n const length = reader.getUint(false);\n const track = parseTrack(reader, length, header.tickToQuarter);\n tracks.push(track);\n }\n return tracks;\n}\n\nfunction parseTrack(reader: Reader, length: number, tickToQuarter: number) {\n const track = new Track();\n track.name = 'New MIDI Track';\n const events: any[] = [];\n let lastStatus = 0;\n let startOffset = reader.offset;\n let tick = 0;\n do {\n const delta = reader.getVarInt();\n const status = reader.getByte();\n if (status & 0x80) {\n lastStatus = status;\n } else {\n reader.offset--;\n }\n track.channel = lastStatus & 0x0f;\n let event: any;\n switch (lastStatus & 0xf0) {\n case 0x80: // note off\n {\n const note = reader.getByte();\n const velocity = reader.getByte();\n event = { type: 'noteOff', note, velocity };\n }\n break;\n case 0x90: // note on\n {\n const note = reader.getByte();\n const velocity = reader.getByte();\n event = { type: 'noteOn', note, velocity };\n }\n break;\n case 0xa0: // notePressure\n {\n const note = reader.getByte();\n const pressure = reader.getByte();\n event = { type: 'notePressure', note, pressure };\n }\n break;\n case 0xb0: // control change\n {\n const controller = reader.getByte();\n const value = reader.getByte();\n event = { type: 'controlChange', controller, value };\n }\n break;\n case 0xc0: // program change\n {\n const program = reader.getByte();\n event = { type: 'programChange', program };\n }\n break;\n case 0xd0: // channel pressure\n {\n const pressure = reader.getByte();\n event = { type: 'channelPressure', pressure };\n }\n break;\n case 0xe0: // pitch bend\n {\n const lsb = reader.getByte();\n const msb = reader.getByte();\n event = { type: 'pitchBend', value: (msb << 7) | lsb };\n }\n break;\n default: {\n if (lastStatus === 0xff) {\n assert('Meta message', lastStatus === 0xff);\n event = parseMetaEvent(reader);\n } else {\n assert('Sysex message', (lastStatus & 0xf0) == 0xf0);\n const length = reader.getVarInt();\n const data = reader.getBytes(length);\n event = { type: 'sysex', data };\n }\n }\n }\n tick += delta;\n event.delta = delta;\n event.tick = tick;\n events.push(event);\n } while (reader.offset - startOffset < length);\n track.events = events;\n const tempoMsg = events.findLast((e) => e.type === 'tempo');\n if (tempoMsg) {\n track.bpm = Math.round(\n ((60_000_000 / tempoMsg.tempo) * track.timeSignatureDenominator) / 4,\n );\n }\n const timeSignatureMsg = events.findLast((e) => e.type === 'timeSignature');\n if (timeSignatureMsg) {\n track.timeSignatureNumerator = timeSignatureMsg.numerator;\n track.timeSignatureDenominator = timeSignatureMsg.denominator;\n }\n const sequenceNameMsg = events.findLast((e) => e.type === 'sequenceName');\n if (sequenceNameMsg) {\n track.name = sequenceNameMsg.text;\n }\n const lastNote = events.findLast((e) => e.type === 'noteOn');\n if (lastNote) {\n const barLength =\n ((tickToQuarter * 4) / track.timeSignatureDenominator) *\n track.timeSignatureNumerator;\n track.barLength = barLength;\n const tickCount = Math.ceil(lastNote.tick / barLength) * barLength;\n track.tickCount = tickCount;\n const barCount = Math.ceil(tickCount / barLength);\n track.barCouunt = barCount;\n }\n return track;\n}\n\nfunction parseMetaEvent(reader: Reader) {\n const type = reader.getByte();\n const length = reader.getVarInt();\n\n switch (type) {\n case 0: // META_SEQUENCE_NUM\n return { type: 'sequenceNum', number: reader.getShort() };\n case 1: // META_TEXT\n return { type: 'text', text: reader.getString(length, false) };\n case 2: // META_COPYRIGHT\n return { type: 'copyright', text: reader.getString(length, false) };\n case 3: // META_SEQUENCE_NAME\n return { type: 'sequenceName', text: reader.getString(length, false) };\n case 4: // META_INSTRUMENT_NAME\n return { type: 'instrumentName', text: reader.getString(length, false) };\n case 5: // META_LYRIC\n return { type: 'lyric', text: reader.getString(length, false) };\n case 6: // META_MARKER\n return { type: 'marker', text: reader.getString(length, false) };\n case 7: // META_CUE_POINT\n return { type: 'cuePoint', text: reader.getString(length, false) };\n case 8: // META_PROGRAM_NAME\n return { type: 'programName', text: reader.getString(length, false) };\n case 9: // META_DEVICE_NAME\n return { type: 'deviceName', text: reader.getString(length, false) };\n case 0x20: // META_MIDI_CHANNEL_PREFIX\n return { type: 'midiChannelPrefix', channel: reader.getByte() };\n case 0x21: // META_MIDI_PORT\n return { type: 'midiPort', port: reader.getByte() };\n case 0x2f: // META_END_OF_TRACK\n return { type: 'endOfTrack' };\n case 0x51: {\n // META_TEMPO\n // Read length bytes\n const bytes = [];\n for (let i = 0; i < length; i++) {\n bytes.push(reader.getByte());\n }\n //build the tempo from the bytes\n let tempo = bytes.reduce((acc, byte) => (acc << 8) | byte, 0);\n if (tempo === 0) {\n tempo = 500_000;\n }\n return { type: 'tempo', tempo };\n }\n case 0x54: {\n // META_SMPTE_OFFSET\n const hour = reader.getByte();\n const minute = reader.getByte();\n const second = reader.getByte();\n const frame = reader.getByte();\n const subFrame = reader.getByte();\n return { type: 'smpteOffset', hour, minute, second, frame, subFrame };\n }\n case 0x58: {\n // META_TIME_SIGNATURE\n const numerator = reader.getByte();\n // 2 to the power of the following byte\n const denominator = Math.pow(2, reader.getByte());\n const midiClocksPerMetronomeClick = reader.getByte();\n const n32ndNotesPerMIDIQuarterNote = reader.getByte();\n return {\n type: 'timeSignature',\n numerator,\n denominator,\n midiClocksPerMetronomeClick,\n n32ndNotesPerMIDIQuarterNote,\n };\n }\n case 0x59: {\n // META_KEY_SIGNATURE\n const key = reader.getByte();\n const scale = reader.getByte();\n return { type: 'keySignature', key, scale };\n }\n case 0x7f: {\n // META_SEQUENCER_EVENT\n const data = reader.getBytes(length);\n return { type: 'sequencerEvent', data };\n }\n }\n}\n","import ProjectManagerService, {\n SongFile,\n SongReference,\n type Playlist,\n} from 'editor/services/project-manager';\nimport Command from './command';\n\nexport class AddPlaylistCommand extends Command {\n project: ProjectManagerService;\n playlist?: Playlist;\n\n constructor(project: ProjectManagerService) {\n super('Add Playlist');\n this.project = project;\n }\n\n markDirty(): void {\n this.playlist?.markDirty();\n this.project.playlistsDirty = true;\n }\n\n execute() {\n this.playlist = this.project.addPlaylist();\n return this.playlist;\n }\n\n reverse() {\n if (!this.playlist) {\n throw new Error('Playlist not found');\n }\n this.project.removePlaylist(this.playlist);\n return this.playlist;\n }\n}\n\nexport class RenamePlaylistCommand extends Command {\n playlist: Playlist;\n fromName: string;\n toName: string;\n\n constructor(playlist: Playlist, name: string) {\n super('Rename Playlist');\n this.playlist = playlist;\n this.fromName = playlist.name;\n this.toName = name;\n }\n\n markDirty(): void {\n this.playlist.markDirty();\n }\n\n execute() {\n this.playlist.name = this.toName;\n return this.playlist;\n }\n\n reverse() {\n this.playlist.name = this.fromName;\n return this.playlist;\n }\n}\n\nexport class AddSongToPlaylistCommand extends Command {\n playlist: Playlist;\n song: SongFile;\n toIndex?: number;\n songReference?: SongReference;\n\n constructor(playlist: Playlist, song: SongFile, toIndex?: number) {\n super('Add Song to Playlist');\n this.playlist = playlist;\n this.song = song;\n this.toIndex = toIndex;\n }\n\n markDirty(): void {\n this.playlist.markDirty();\n }\n\n execute() {\n this.songReference = this.playlist.addSong(this.song, this.toIndex);\n return this.songReference;\n }\n\n reverse() {\n if (!this.songReference) {\n throw new Error('Song reference not found');\n }\n this.playlist.removeSong(this.songReference);\n return this.songReference;\n }\n}\n\nexport class RemoveSongFromPlaylistCommand extends Command {\n playlist: Playlist;\n song: SongReference;\n index?: number;\n\n constructor(playlist: Playlist, song: SongReference) {\n super('Remove Song from Playlist');\n this.playlist = playlist;\n this.song = song;\n }\n\n markDirty(): void {\n this.playlist.markDirty();\n }\n\n execute() {\n this.index = this.playlist.removeSong(this.song);\n return this.song;\n }\n\n reverse() {\n if (!this.index) {\n throw new Error('Song reference not found');\n }\n this.playlist.songs = this.playlist.songs.toSpliced(\n this.index,\n 0,\n this.song,\n );\n return this.song;\n }\n}\n\nexport class SortPlaylistCommand extends Command {\n playlist: Playlist;\n oldIndex: number;\n newIndex: number;\n\n constructor(playlist: Playlist, oldIndex: number, newIndex: number) {\n super('Sort Playlist');\n this.playlist = playlist;\n this.oldIndex = oldIndex;\n this.newIndex = newIndex;\n }\n\n markDirty(): void {\n this.playlist.markDirty();\n }\n\n execute() {\n const song = this.playlist.songs[this.oldIndex];\n const arr = [...this.playlist.songs];\n if (song) {\n // remove song from oldIndex and insert it at newIndex\n arr.splice(this.oldIndex, 1);\n arr.splice(this.newIndex, 0, song);\n }\n this.playlist.songs = arr;\n return this.playlist;\n }\n\n reverse() {\n const song = this.playlist.songs[this.newIndex];\n const arr = [...this.playlist.songs];\n if (song) {\n // remove song from newIndex and insert it at oldIndex\n arr.splice(this.newIndex, 1);\n arr.splice(this.oldIndex, 0, song);\n }\n this.playlist.songs = arr;\n return this.playlist;\n }\n}\n\nexport class SortPlaylistsCommand extends Command {\n project: ProjectManagerService;\n oldIndex: number;\n newIndex: number;\n\n constructor(\n project: ProjectManagerService,\n oldIndex: number,\n newIndex: number,\n ) {\n super('Sort Playlists');\n this.project = project;\n this.oldIndex = oldIndex;\n this.newIndex = newIndex;\n }\n\n markDirty(): void {\n this.project.playlistsDirty = true;\n }\n\n execute() {\n const playlist = this.project.playlists[this.oldIndex];\n const arr = [...this.project.playlists];\n if (playlist) {\n // remove playlist from oldIndex and insert it at newIndex\n const newIndexPath = this.project.playlists[this.newIndex].path;\n // the below is so the BB shows the playlists in the same order as the BBMO.\n // the BB bases it on config.csv, and goes in the order of 1.csv, 2.csv, ...\n // this is based on path, so we need to make sure the path matches the index (+ 1)\n if (this.oldIndex < this.newIndex) { // if we're moving the playlist up, we need to move the path of everything else down\n for (let i = this.newIndex; i > this.oldIndex; i--) {\n this.project.playlists[i].path = this.project.playlists[i - 1].path;\n this.project.playlists[i].markDirty();\n }\n } else if (this.oldIndex > this.newIndex) { // if we're moving the playlist down, we need to move the path of everything else up\n for (let i = this.newIndex; i < this.oldIndex; i++) {\n this.project.playlists[i].path = this.project.playlists[i + 1].path;\n this.project.playlists[i].markDirty();\n }\n }\n playlist.path = newIndexPath;\n playlist.markDirty();\n arr.splice(this.oldIndex, 1);\n arr.splice(this.newIndex, 0, playlist);\n }\n this.project.playlists = arr;\n }\n\n reverse() {\n const playlist = this.project.playlists[this.newIndex];\n const arr = [...this.project.playlists];\n if (playlist) {\n // remove playlist from newIndex and insert it at oldIndex\n const newIndexPath = this.project.playlists[this.oldIndex].path;\n // the below is so the BB shows the playlists in the same order as the BBMO.\n // the BB bases it on config.csv, and goes in the order of 1.csv, 2.csv, ...\n // this is based on path, so we need to make sure the path matches the index (+ 1)\n if (this.newIndex < this.oldIndex) { // if we're moving the playlist up, we need to move the path of everything else down\n for (let i = this.oldIndex; i > this.newIndex; i--) {\n this.project.playlists[i].path = this.project.playlists[i - 1].path;\n this.project.playlists[i].markDirty();\n }\n } else if (this.newIndex > this.oldIndex) { // if we're moving the playlist down, we need to move the path of everything else up\n for (let i = this.oldIndex; i < this.newIndex; i++) {\n this.project.playlists[i].path = this.project.playlists[i + 1].path;\n this.project.playlists[i].markDirty();\n }\n }\n playlist.path = newIndexPath;\n playlist.markDirty();\n arr.splice(this.newIndex, 1);\n arr.splice(this.oldIndex, 0, playlist);\n }\n this.project.playlists = arr;\n }\n}\n\nexport class DeletePlaylistCommand extends Command {\n projectManager: ProjectManagerService;\n playlist: Playlist;\n index: number;\n\n constructor(projectManager: ProjectManagerService, playlist: Playlist) {\n super('Delete Playlist');\n this.projectManager = projectManager;\n this.index = projectManager.playlists.findIndex((d) => d === playlist);\n this.playlist = playlist;\n }\n\n markDirty(): void {\n this.projectManager.playlistsDirty = true;\n }\n\n async execute() {\n this.projectManager.playlists = this.projectManager.playlists.filter(\n (p) => p !== this.playlist,\n );\n return this.playlist;\n }\n\n async reverse() {\n this.projectManager.playlists = this.projectManager.playlists.toSpliced(\n this.index,\n 0,\n this.playlist,\n );\n return this.playlist;\n }\n}\n\nexport class DuplicatePlaylistCommand extends Command {\n projectManager: ProjectManagerService;\n playlist: Playlist;\n newPlaylist?: Playlist;\n\n constructor(projectManager: ProjectManagerService, playlist: Playlist) {\n super('Duplicate Playlist');\n this.projectManager = projectManager;\n this.playlist = playlist;\n }\n\n markDirty(): void {\n this.projectManager.playlistsDirty = true;\n this.newPlaylist?.markDirty();\n }\n\n async execute() {\n if (this.newPlaylist) {\n this.projectManager.playlists = [\n ...this.projectManager.playlists,\n this.newPlaylist,\n ];\n } else {\n const newPlaylist = this.projectManager.addPlaylist(this.playlist.name);\n this.newPlaylist = newPlaylist;\n this.newPlaylist.songs = [...this.playlist.songs];\n }\n return this.newPlaylist;\n }\n\n async reverse() {\n this.projectManager.playlists = this.projectManager.playlists.filter(\n (d) => d !== this.newPlaylist,\n );\n return this.playlist;\n }\n}\n","import type ProjectManagerService from 'editor/services/project-manager';\nimport Command from './command';\n\nexport class RenameProjectCommand extends Command {\n project: ProjectManagerService;\n fromName: string;\n toName: string;\n\n constructor(project: ProjectManagerService, name: string) {\n super('Rename Project');\n this.project = project;\n this.fromName = project.projectFile!.name;\n this.toName = name;\n }\n\n markDirty(): void {\n this.project.projectFile!.markDirty();\n }\n\n execute() {\n this.project.projectFile!.name = this.toName;\n return this.project;\n }\n\n reverse() {\n this.project.projectFile!.name = this.fromName;\n return this.project;\n }\n}\n","import { tracked } from '@glimmer/tracking';\n\nexport default class Project {\n id: string;\n handle: FileSystemDirectoryHandle;\n @tracked name: string;\n @tracked version: number = 0;\n @tracked revision: number = 0;\n @tracked build: number = 0;\n @tracked folder?: string;\n @tracked song?: string;\n\n constructor(handle: FileSystemDirectoryHandle, name: string, id?: string) {\n this.handle = handle;\n this.name = name;\n this.id = id ?? crypto.randomUUID();\n }\n\n async validate() {\n const entries: FileSystemHandle[] = [];\n for await (const [, entry] of this.handle.entries()) {\n entries.push(entry);\n }\n const projectHandle = entries.find((entry) => /\\.bbp/i.test(entry.name));\n if (projectHandle && projectHandle.kind === 'file') {\n const file = await (projectHandle).getFile();\n const xml = await file.text();\n return this.parseProjectFile(xml);\n }\n return false;\n }\n\n parseProjectFile(xml: string) {\n const isProjectXML = //i.test(xml);\n if (isProjectXML) {\n let result = / {\n track: SongTrack;\n type: number = 0;\n tick: number = 0;\n note: number = 0;\n velocity: number = 0;\n length: number = 0;\n event: MidiEvent;\n\n constructor(\n track: SongTrack,\n tick: number,\n note: number,\n velocity: number,\n length: number,\n ) {\n super('Add Midi Event');\n this.track = track;\n this.tick = tick;\n this.note = note;\n this.velocity = velocity;\n this.length = length;\n this.event = new MidiEvent(\n this.tick,\n this.type,\n this.note,\n this.velocity,\n this.length,\n );\n }\n\n markDirty(): void {\n this.track.markDirty();\n }\n\n execute() {\n this.track.addEvent(this.event);\n return this.event;\n }\n\n reverse() {\n this.track.removeEvent(this.event);\n return this.event;\n }\n}\n\nexport class AddMidiEventsCommand extends Command {\n track: SongTrack;\n events: MidiEvent[];\n\n constructor(track: SongTrack, events: MidiEvent[]) {\n super('Add Midi Events');\n this.track = track;\n this.events = events;\n }\n\n markDirty(): void {\n this.track.markDirty();\n }\n\n execute() {\n this.track.addEvents(this.events);\n return this.events;\n }\n\n reverse() {\n this.track.removeEvents(this.events);\n return this.events;\n }\n}\n\nexport class RemoveMidiEventCommand extends Command {\n track: SongTrack;\n event: MidiEvent;\n\n constructor(track: SongTrack, event: MidiEvent) {\n super('Remove Midi Event');\n this.track = track;\n this.event = event;\n }\n\n markDirty(): void {\n this.track.markDirty();\n }\n\n execute() {\n this.track.removeEvent(this.event);\n return this.event;\n }\n\n reverse() {\n this.track.addEvent(this.event);\n return this.event;\n }\n}\n\nexport class RemoveMidiEventsCommand extends Command {\n track: SongTrack;\n events: MidiEvent[];\n\n constructor(track: SongTrack, events: MidiEvent[]) {\n super('Remove Midi Events');\n this.track = track;\n this.events = events;\n }\n\n markDirty(): void {\n this.track.markDirty();\n }\n\n execute() {\n this.track.removeEvents(this.events);\n return this.events;\n }\n\n reverse() {\n this.track.addEvents(this.events);\n return this.events;\n }\n}\n\nexport class RenameSongCommand extends Command {\n song: Song;\n fromName: string;\n toName: string;\n\n constructor(song: Song, name: string) {\n super('Rename Song');\n this.song = song;\n this.fromName = song.name!;\n this.toName = name;\n }\n\n markDirty(): void {\n this.song.markDirty();\n }\n\n execute() {\n this.song.name = this.toName;\n return this.song;\n }\n\n reverse() {\n this.song.name = this.fromName;\n return this.song;\n }\n}\n\nexport class UpdateTempoCommand extends Command {\n song: Song;\n fromTempo: number;\n toTempo: number;\n\n constructor(song: Song, fromTempo: number, toTempo: number) {\n super('Update tempo');\n this.song = song;\n this.fromTempo = fromTempo;\n this.toTempo = toTempo;\n }\n\n markDirty(): void {\n this.song.markDirty();\n }\n\n execute() {\n this.song.bpm = this.toTempo;\n return this.song;\n }\n\n reverse() {\n this.song.bpm = this.fromTempo;\n return this.song;\n }\n}\n\nexport class UpdateMidiEventVelocityCommand extends Command {\n event: MidiEvent;\n fromVelocity: number;\n toVelocity: number;\n\n constructor(event: MidiEvent, fromVelocity: number, toVelocity: number) {\n super('Update Velocity');\n this.event = event;\n this.fromVelocity = fromVelocity;\n this.toVelocity = toVelocity;\n }\n\n markDirty(): void {\n this.event.markDirty();\n }\n\n execute() {\n this.event.velocity = this.toVelocity;\n return this.event;\n }\n\n reverse() {\n this.event.velocity = this.fromVelocity;\n return this.event;\n }\n}\n\nexport class UpdateMidiEventTickCommand extends Command {\n track: SongTrack;\n event: MidiEvent;\n fromTick: number;\n toTick: number;\n\n constructor(\n track: SongTrack,\n event: MidiEvent,\n toTick: number,\n fromTick?: number,\n ) {\n super('Update MIDI Event Tick');\n this.track = track;\n this.event = event;\n this.fromTick = fromTick ?? event.tick;\n this.toTick = toTick;\n }\n\n markDirty(): void {\n this.track.markDirty();\n }\n\n execute() {\n this.event.tick = this.toTick;\n return this.event;\n }\n\n reverse() {\n this.event.tick = this.fromTick;\n return this.event;\n }\n}\n\nexport class UpdateMidiEventNoteCommand extends Command {\n event: MidiEvent;\n fromNote: number;\n toNote: number;\n\n constructor(event: MidiEvent, toNote: number, fromNote?: number) {\n super('Update MIDI Event Note');\n this.event = event;\n this.fromNote = fromNote ?? event.note;\n this.toNote = toNote;\n }\n\n markDirty(): void {\n this.event.markDirty();\n }\n\n execute() {\n this.event.note = this.toNote;\n return this.event;\n }\n\n reverse() {\n this.event.note = this.fromNote;\n return this.event;\n }\n}\n\nexport class FilterOverlappingMidiEventsCommand extends Command {\n track: SongTrack;\n events: MidiEvent[] = [];\n\n constructor(track: SongTrack) {\n super('Filter Overlapping MIDI Events');\n this.track = track;\n this.events = track.filterEvents();\n }\n\n markDirty(): void {\n this.track.markDirty();\n }\n\n execute() {\n this.track.removeEvents(this.events);\n return this.track;\n }\n\n reverse() {\n this.track.addEvents(this.events);\n return this.track;\n }\n}\n\nexport class UpdateMidiEventLengthCommand extends Command {\n track: SongTrack;\n event: MidiEvent;\n fromLength: number;\n toLength: number;\n\n constructor(\n track: SongTrack,\n event: MidiEvent,\n toLength: number,\n fromLength?: number,\n ) {\n super('Update MIDI note length');\n this.track = track;\n this.event = event;\n this.fromLength = fromLength ?? event.length;\n this.toLength = toLength;\n }\n\n markDirty(): void {\n this.track.markDirty();\n }\n\n execute() {\n this.event.length = this.toLength;\n return this.event;\n }\n\n reverse() {\n this.event.length = this.fromLength;\n return this.event;\n }\n}\n\nexport class AddPartCommand extends Command {\n song: Song;\n part?: SongPart;\n afterPart?: SongPart;\n clonePart?: SongPart;\n\n constructor(song: Song, afterPart?: SongPart, clonePart?: SongPart) {\n super('Add Part');\n this.song = song;\n this.afterPart = afterPart;\n this.clonePart = clonePart;\n }\n\n markDirty(): void {\n this.song.markDirty();\n }\n\n execute() {\n this.part = this.song.addPart(this.afterPart, this.clonePart);\n return this.song;\n }\n\n reverse() {\n if (!this.part) {\n throw new Error('Part not found');\n }\n this.song.removePart(this.part);\n return this.song;\n }\n}\n\nexport class RemovePartCommand extends Command {\n song: Song;\n part: SongPart;\n beforePart?: SongPart;\n index?: number;\n\n constructor(song: Song, part: SongPart) {\n super('Remove Part');\n this.song = song;\n this.index = song.parts.findIndex((p) => p.info === part.info);\n this.part = part;\n }\n\n markDirty(): void {\n this.song.markDirty();\n }\n\n execute() {\n this.song.removePart(this.part);\n return this.song;\n }\n\n reverse() {\n this.song.insertPart(this.part, this.index);\n return this.song;\n }\n}\ntype AddTrackOpts = {\n timeSignatureNumerator: number;\n timeSignatureDenominator: number;\n};\n\nexport class AddTrackCommand extends Command {\n part: SongPart;\n track: SongTrack;\n sectionType: SectionType;\n sectionIndex: number = 0;\n\n constructor(part: SongPart, sectionType: SectionType, opts: AddTrackOpts) {\n super('Add Track');\n this.part = part;\n let name;\n switch (sectionType) {\n case SectionType.TRANSITION:\n name = 'Transition';\n break;\n case SectionType.FILL:\n name = 'Fill';\n break;\n default: {\n switch (part.type) {\n case PartType.INTRO:\n name = 'Intro';\n break;\n case PartType.OUTRO:\n name = 'Outro';\n break;\n default:\n name = 'Main';\n break;\n }\n }\n }\n const track = new SongTrack(\n name,\n opts.timeSignatureNumerator,\n opts.timeSignatureDenominator,\n );\n this.track = track;\n this.sectionType = sectionType;\n }\n\n markDirty(): void {\n this.part.markDirty();\n }\n\n execute() {\n this.sectionIndex =\n this.part.type === PartType.PART && this.sectionType === SectionType.FILL\n ? this.part.fills.length\n : -1;\n this.part.addTrack(this.sectionType, this.sectionIndex, this.track);\n return this.track;\n }\n\n reverse() {\n this.part.removeTrack(this.sectionType, this.sectionIndex);\n return this.track;\n }\n}\n\nexport class ReplaceTrackCommand extends Command {\n part: SongPart;\n prevTrack: SongTrack;\n newTrack: SongTrack;\n sectionType: SectionType;\n sectionIndex: number;\n\n constructor(\n part: SongPart,\n sectionType: SectionType,\n sectionIndex: number,\n track: SongTrack,\n ) {\n super('Replace Track');\n this.newTrack = track;\n this.part = part;\n this.prevTrack = part.getTrack(sectionType, sectionIndex)!;\n this.sectionType = sectionType;\n this.sectionIndex = sectionIndex;\n }\n\n markDirty(): void {\n this.part.markDirty();\n }\n\n execute() {\n this.part.removeTrack(this.sectionType, this.sectionIndex);\n this.part.addTrack(this.sectionType, this.sectionIndex, this.newTrack);\n return this.newTrack;\n }\n\n reverse() {\n this.part.removeTrack(this.sectionType, this.sectionIndex);\n if (this.prevTrack) {\n this.part.addTrack(this.sectionType, this.sectionIndex, this.prevTrack);\n }\n return this.newTrack;\n }\n}\n\nexport class UnlinkTrackCommand extends Command {\n part: SongPart;\n prevTrack: SongTrack;\n newTrack: SongTrack;\n sectionType: SectionType;\n sectionIndex: number;\n\n constructor(part: SongPart, sectionType: SectionType, sectionIndex: number) {\n super('Replace Track');\n this.part = part;\n this.sectionType = sectionType;\n this.sectionIndex = sectionIndex;\n this.prevTrack = part.getTrack(sectionType, sectionIndex)!;\n this.newTrack = this.prevTrack.copy();\n }\n\n markDirty(): void {\n this.part.markDirty();\n }\n\n execute() {\n this.part.removeTrack(this.sectionType, this.sectionIndex);\n this.part.addTrack(this.sectionType, this.sectionIndex, this.newTrack);\n return this.newTrack;\n }\n\n reverse() {\n this.part.removeTrack(this.sectionType, this.sectionIndex);\n this.part.addTrack(this.sectionType, this.sectionIndex, this.prevTrack);\n return this.newTrack;\n }\n}\n\nexport class RemoveTrackCommand extends Command {\n part: SongPart;\n track: SongTrack;\n sectionType: SectionType;\n sectionIndex: number;\n fillsBefore: number[];\n\n constructor(part: SongPart, sectionType: SectionType, index: number) {\n super('Remove Track');\n this.part = part;\n this.fillsBefore = part.info.fillFileIndexes;\n const track = part.getTrack(sectionType, index);\n if (!track) {\n throw new Error('Track not found');\n }\n this.track = track;\n this.sectionType = sectionType;\n this.sectionIndex = index;\n }\n\n markDirty(): void {\n this.part.markDirty();\n }\n\n execute() {\n this.part.removeTrack(this.sectionType, this.sectionIndex);\n return this.part;\n }\n\n reverse() {\n this.part.info.fillFileIndexes = this.fillsBefore;\n this.part.addTrack(this.sectionType, this.sectionIndex, this.track);\n return this.part;\n }\n}\n\nexport class RenameTrackCommand extends Command {\n part: SongPart;\n track: SongTrack;\n sectionType: SectionType;\n sectionIndex: number;\n fromName: string;\n toName: string;\n\n constructor(\n part: SongPart,\n sectionType: SectionType,\n index: number,\n name: string,\n ) {\n super('Rename Track');\n this.part = part;\n const track = part.getTrack(sectionType, index);\n if (!track) {\n throw new Error('Track not found');\n }\n this.fromName = track.name;\n this.toName = name;\n this.track = track;\n this.sectionType = sectionType;\n this.sectionIndex = index;\n }\n\n markDirty(): void {\n this.part.markDirty();\n }\n\n execute() {\n this.part.renameTrack(this.sectionType, this.sectionIndex, this.toName);\n return this.part;\n }\n\n reverse() {\n this.part.renameTrack(this.sectionType, this.sectionIndex, this.fromName);\n return this.part;\n }\n}\n\nexport class UpdateTrackBarCountCommand extends Command {\n track: SongTrack;\n fromBarCount: number;\n toBarCount: number;\n addEvents: MidiEvent[] = [];\n removeEvents: MidiEvent[] = [];\n\n constructor(\n track: SongTrack,\n toBarCount: number,\n inFront = false,\n copyEvents = false,\n ) {\n super('Update Track Bar Count');\n this.track = track;\n this.fromBarCount = track.barCount;\n this.toBarCount = toBarCount;\n\n // What is the change in bar count\n const barDiff = this.toBarCount - this.fromBarCount;\n // How many bars are being added or removed\n const barsChanged = Math.abs(barDiff);\n // How many ticks are being added or removed\n const ticksAffected = barsChanged * this.track.info.barLength;\n\n if (barDiff > 0) {\n // We are adding bars\n if (inFront) {\n // We are adding bars in front\n // Remove all events (we will add new events shifted by ticksAffected)\n this.removeEvents = this.track.events;\n // Add the events back shifted by ticksAffected\n this.addEvents = this.track.events.map((event) => {\n return new MidiEvent(\n event.tick + ticksAffected,\n event.type,\n event.note,\n event.velocity,\n event.length,\n );\n });\n } else {\n // We are adding bars in the end\n // No need to shift event ticks\n }\n if (copyEvents) {\n // We are copying events to the new bars\n if (inFront) {\n // We are copying events to the new bars in front\n // Make a copy of all events at the beginning within ticksAffected and add them\n this.addEvents = [\n ...this.addEvents,\n ...this.track.events\n .filter((event) => event.tick < ticksAffected)\n .map((event) => {\n return new MidiEvent(\n event.tick,\n event.type,\n event.note,\n event.velocity,\n event.length,\n );\n }),\n ];\n } else {\n // We are copying events to the new bars at the end\n // Make a copy of all events at the end within ticksAffected and add them\n this.addEvents = this.track.events\n .filter(\n (event) => event.tick >= this.track.tickCount - ticksAffected,\n )\n .map((event) => {\n return new MidiEvent(\n event.tick + ticksAffected,\n event.type,\n event.note,\n event.velocity,\n event.length,\n );\n });\n }\n }\n } else {\n // We are removing bars\n this.removeEvents = this.track.events;\n if (inFront) {\n // Remove all events (we will add new events shifted by ticksAffected)\n if (copyEvents) {\n // We are removing bars in front offset by one bar (copy is overloaded to mean this)\n // Make a copy of all events at the beginning within ticksAffected and add them\n this.addEvents = this.track.events\n .filter((event) => event.tick < ticksAffected)\n .map((event) => {\n return new MidiEvent(\n event.tick,\n event.type,\n event.note,\n event.velocity,\n event.length,\n );\n });\n this.addEvents = [\n ...this.addEvents,\n ...this.track.events\n .filter((event) => event.tick >= ticksAffected * 2)\n .map((event) => {\n return new MidiEvent(\n event.tick - ticksAffected,\n event.type,\n event.note,\n event.velocity,\n event.length,\n );\n }),\n ];\n } else {\n // Add the events back shifted by ticksAffected\n this.addEvents = this.track.events\n .filter((event) => event.tick >= ticksAffected)\n .map((event) => {\n return new MidiEvent(\n event.tick - ticksAffected,\n event.type,\n event.note,\n event.velocity,\n event.length,\n );\n });\n }\n } else {\n // We are removing bars at the end\n // Remove all events at the end within ticksAffected\n this.addEvents = this.track.events.filter(\n (event) => event.tick < this.track.tickCount - ticksAffected,\n );\n }\n\n const newTickCount = this.track.tickCount - ticksAffected;\n this.addEvents = this.addEvents.map((event) => {\n let tickEnd = event.tick + event.length;\n if (tickEnd > newTickCount) {\n tickEnd = newTickCount;\n }\n return new MidiEvent(\n event.tick,\n event.type,\n event.note,\n event.velocity,\n tickEnd - event.tick,\n );\n });\n }\n }\n\n markDirty(): void {\n this.track.markDirty();\n }\n\n execute() {\n this.track.barCount = this.toBarCount;\n this.track.removeEvents(this.removeEvents);\n this.track.addEvents(this.addEvents);\n return this.track;\n }\n\n reverse() {\n this.track.barCount = this.fromBarCount;\n this.track.removeEvents(this.addEvents);\n this.track.addEvents(this.removeEvents);\n return this.track;\n }\n}\n\nexport class UpdateTimeSignatureNumeratorCommand extends Command {\n track: SongTrack;\n fromNumerator: number;\n toNumerator: number;\n fromBarLength: number;\n fromTickCount: number;\n\n constructor(track: SongTrack, toNumerator: number) {\n super('Update Time Signature');\n this.track = track;\n this.fromNumerator = track.timeSignatureNumerator;\n this.fromBarLength = track.info.barLength;\n this.fromTickCount = track.info.tickCount;\n this.toNumerator = toNumerator;\n }\n\n markDirty(): void {\n this.track.markDirty();\n }\n\n execute() {\n const ticksPerBeat = beatTicks(\n this.track.info.tickToQuarter,\n this.track.info.timeSignatureDenominator,\n );\n const beats = this.track.info.tickCount / ticksPerBeat;\n const fullBars = Math.floor(beats / this.toNumerator);\n const extraBeats = beats % this.toNumerator;\n\n this.track.timeSignatureNumerator = this.toNumerator;\n this.track.info.barLength = this.toNumerator * ticksPerBeat;\n if (extraBeats > 0) {\n this.track.info.tickCount =\n (fullBars + 1) * ticksPerBeat * this.toNumerator;\n }\n return this.track;\n }\n\n reverse() {\n this.track.timeSignatureNumerator = this.fromNumerator;\n this.track.info.barLength = this.fromBarLength;\n this.track.info.tickCount = this.fromTickCount;\n return this.track;\n }\n}\n\nexport class UpdateTimeSignatureDenominatorCommand extends Command {\n track: SongTrack;\n fromDenominator: number;\n toDenominator: number;\n\n constructor(track: SongTrack, toDenominator: number) {\n super('Update Time Signature');\n this.track = track;\n this.fromDenominator = track.timeSignatureDenominator;\n this.toDenominator = toDenominator;\n }\n\n markDirty(): void {\n this.track.markDirty();\n }\n\n execute() {\n this.track.timeSignatureDenominator = this.toDenominator;\n return this.track;\n }\n\n reverse() {\n this.track.timeSignatureDenominator = this.fromDenominator;\n return this.track;\n }\n}\n\nexport class ChangeTrigPosCommand extends Command {\n track: SongTrack;\n fromTrigPos: number;\n fromTickCount: number;\n toTrigPos: number;\n diff: number;\n removedEvents: MidiEvent[] = [];\n\n constructor(track: SongTrack, toTrigPos: number) {\n super('Change Track Start');\n this.track = track;\n this.fromTrigPos = track.trigPos;\n this.toTrigPos = toTrigPos;\n this.fromTickCount = this.track.tickCount;\n this.diff = toTrigPos - this.fromTrigPos;\n this.removedEvents = this.track.info.events.filter(\n (ev) => ev.tick < this.diff,\n );\n }\n\n markDirty(): void {\n this.track.markDirty();\n }\n\n execute() {\n this.track.info.tickCount -= this.diff;\n this.track.info.trigPos = this.toTrigPos;\n this.track.info.events = this.track.info.events.filter(\n (event) => event.tick >= this.diff,\n );\n this.track.info.events.forEach((event) => (event.tick -= this.diff));\n return this.track;\n }\n\n reverse() {\n this.track.info.tickCount += this.diff;\n this.track.info.trigPos = this.fromTrigPos;\n this.track.info.events.forEach((event) => (event.tick += this.diff));\n this.track.info.events = [...this.removedEvents, ...this.track.info.events];\n return this.track;\n }\n}\n\nexport class DoubleBeatCommand extends Command {\n track: SongTrack;\n tickCount: number;\n events: MidiEvent[];\n\n constructor(track: SongTrack) {\n super('Double Beat');\n this.track = track;\n this.tickCount = track.info.tickCount;\n this.events = track.events;\n }\n\n markDirty(): void {\n this.track.markDirty();\n }\n\n execute() {\n this.track.info.tickCount *= 2;\n const newEvents = this.track.events.map(\n (event) =>\n new MidiEvent(\n this.tickCount + event.tick,\n event.type,\n event.note,\n event.velocity,\n event.length,\n ),\n );\n this.track.info.events = [...this.track.info.events, ...newEvents];\n return this.track;\n }\n\n reverse() {\n this.track.info.tickCount = this.tickCount;\n this.track.info.events = this.events;\n return this.track;\n }\n}\n\nexport class QuantizeTrackCommand extends Command {\n track: SongTrack;\n division: number;\n events: MidiEvent[];\n\n constructor(track: SongTrack, division: number = 16) {\n super('Quantize Track');\n this.track = track;\n this.division = division;\n this.events = track.events;\n }\n\n markDirty(): void {\n this.track.markDirty();\n }\n\n execute() {\n const ticksPerBeat = this.track.tickToQuarter * (16 / this.track.timeSignatureDenominator);\n const step = ticksPerBeat / this.division;\n\n const newEvents: MidiEvent[] = [];\n this.track.events.map((event) => {\n const newEvent = event.copy();\n newEvent.tick = Math.round(event.tick / step) * step;\n newEvents.push(newEvent);\n });\n\n this.track.instruments.forEach((instrument) => {\n newEvents\n .filter((event) => event.note === instrument)\n .forEach((event, idx, events) => {\n const nextNote = events[idx + 1];\n let end = event.tick + event.length;\n end = Math.round(end / step) * step;\n const length = end - event.tick;\n event.length = Math.max(step, length);\n if (nextNote) {\n const maxLength = nextNote.tick - event.tick;\n event.length = Math.min(event.length, maxLength);\n } else {\n end = this.track.info.tickCount;\n if (event.tick >= this.track.info.tickCount) {\n end = this.track.info.tickCount + this.track.extraTicks;\n }\n event.length = Math.min(event.length, end - event.tick);\n }\n });\n });\n\n this.track.info.events = newEvents;\n return this.track;\n }\n\n reverse() {\n this.track.info.events = this.events;\n return this.track;\n }\n}\n\nexport class ImportAccentCommand extends Command {\n projectManager: ProjectManagerService;\n file: File;\n effectFile?: EffectFile;\n\n constructor(projectManager: ProjectManagerService, file: File) {\n super('Import accent');\n this.projectManager = projectManager;\n this.file = file;\n }\n\n markDirty(): void {\n this.effectFile?.markDirty();\n this.projectManager.effectsDirty = true;\n }\n\n async execute() {\n this.effectFile = await this.projectManager.importEffect(this.file);\n return this.effectFile;\n }\n\n async reverse() {\n this.projectManager.removeEffect(this.effectFile!);\n return this.effectFile!;\n }\n}\n\nexport class AddAccentCommand extends Command {\n songPart: SongPart;\n accentFileName: string;\n\n constructor(songPart: SongPart, accentFileName: string) {\n super('Add accent');\n this.songPart = songPart;\n this.accentFileName = accentFileName;\n }\n\n markDirty(): void {\n this.songPart.markDirty();\n }\n\n execute() {\n this.songPart.info.accentFileName = this.accentFileName;\n this.songPart.info.effectVolume = 100;\n return this.songPart;\n }\n\n reverse() {\n this.songPart.info.accentFileName = '';\n this.songPart.info.effectVolume = 100;\n return this.songPart;\n }\n}\n\nexport class RemoveAccentCommand extends Command {\n songPart: SongPart;\n accentFileName: string;\n\n constructor(songPart: SongPart) {\n super('Remove accent');\n this.songPart = songPart;\n this.accentFileName = songPart.accentFileName;\n }\n\n markDirty(): void {\n this.songPart.markDirty();\n }\n\n execute() {\n this.songPart.info.accentFileName = '';\n return this.songPart;\n }\n\n reverse() {\n this.songPart.info.accentFileName = this.accentFileName;\n return this.songPart;\n }\n}\n\nexport class UpdateAccentVolumeCommand extends Command {\n songPart: SongPart;\n fromVolume: number;\n toVolume: number;\n\n constructor(songPart: SongPart, toVolume: number) {\n super('Update Accent Volume');\n this.songPart = songPart;\n this.fromVolume = songPart.info.effectVolume;\n this.toVolume = toVolume;\n }\n\n markDirty(): void {\n this.songPart.markDirty();\n }\n\n execute() {\n this.songPart.info.effectVolume = this.toVolume;\n return this.songPart;\n }\n\n reverse() {\n this.songPart.info.effectVolume = this.fromVolume;\n return this.songPart;\n }\n}\n\nexport class RandomiseFillsCommand extends Command {\n songPart: SongPart;\n randomise: boolean;\n\n constructor(songPart: SongPart, randomise: boolean) {\n super(randomise ? 'Randomise fills' : 'Unrandomise fills');\n this.songPart = songPart;\n this.randomise = randomise;\n }\n\n markDirty(): void {\n this.songPart.markDirty();\n }\n\n execute() {\n this.songPart.info.random = this.randomise;\n return this.songPart;\n }\n\n reverse() {\n this.songPart.info.random = !this.randomise;\n return this.songPart;\n }\n}\n\nexport class SortFillsCommand extends Command {\n songPart: SongPart;\n oldIndex: number;\n newIndex: number;\n\n constructor(songPart: SongPart, oldIndex: number, newIndex: number) {\n super('Sort Fills');\n this.songPart = songPart;\n this.oldIndex = oldIndex;\n this.newIndex = newIndex;\n }\n\n markDirty(): void {\n this.songPart.markDirty();\n }\n\n execute() {\n const oldFill = this.songPart.fills[this.oldIndex];\n\n if (oldFill) {\n this.songPart.removeTrack(SectionType.FILL, this.oldIndex);\n this.songPart.addTrack(SectionType.FILL, this.newIndex, oldFill);\n }\n\n return this.songPart;\n }\n\n reverse() {\n const newFill = this.songPart.fills[this.newIndex];\n\n if (newFill) {\n this.songPart.removeTrack(SectionType.FILL, this.newIndex);\n this.songPart.addTrack(SectionType.FILL, this.oldIndex, newFill);\n }\n\n return this.songPart;\n }\n}\n\nexport class SortPartsCommand extends Command {\n song: Song;\n oldIndex: number;\n newIndex: number;\n\n constructor(song: Song, oldIndex: number, newIndex: number) {\n super('Sort Parts');\n this.song = song;\n this.oldIndex = oldIndex;\n this.newIndex = newIndex;\n }\n\n markDirty(): void {\n this.song.markDirty();\n }\n\n execute() {\n const part = this.song.info.parts[this.oldIndex];\n const arr = [...this.song.info.parts];\n if (part) {\n // remove part from oldIndex and insert it at newIndex\n arr.splice(this.oldIndex, 1);\n arr.splice(this.newIndex, 0, part);\n }\n this.song.info.parts = arr;\n return this.song;\n }\n\n reverse() {\n const part = this.song.info.parts[this.newIndex];\n const arr = [...this.song.info.parts];\n if (part) {\n // remove part from newIndex and insert it at oldIndex\n arr.splice(this.newIndex, 1);\n arr.splice(this.oldIndex, 0, part);\n }\n this.song.info.parts = arr;\n return this.song;\n }\n}\n\nexport class AddEffectCommand extends Command {\n project: ProjectManagerService;\n effect: EffectFile;\n\n constructor(project: ProjectManagerService, effectFile: EffectFile) {\n super('Add Effect');\n this.project = project;\n this.effect = effectFile;\n }\n\n markDirty(): void {\n this.project.effectsDirty = true;\n }\n\n execute() {\n this.project.effects = [...this.project.effects, this.effect];\n return this.effect;\n }\n\n reverse() {\n this.project.effects = this.project.effects.filter(\n (e) => e !== this.effect,\n );\n return this.effect;\n }\n}\n\nexport class AddNewSongCommand extends Command {\n project: ProjectManagerService;\n folder: SongFolder;\n song?: SongFile;\n\n constructor(project: ProjectManagerService, folder: SongFolder) {\n super('Add New Song');\n this.project = project;\n this.folder = folder;\n }\n\n markDirty(): void {\n this.folder.markDirty();\n this.song?.markDirty();\n }\n\n async execute() {\n this.song = await this.project.createSong(this.folder);\n return this.song;\n }\n\n async reverse() {\n if (!this.song) {\n throw new Error('Song not found');\n }\n this.project.removeSong(this.folder, this.song);\n return this.song;\n }\n}\n\nexport class AddSongCommand extends Command {\n folder: SongFolder;\n song: SongFile;\n\n constructor(folder: SongFolder, song: SongFile) {\n super('Add Song');\n this.folder = folder;\n this.song = song;\n }\n\n markDirty(): void {\n this.folder.markDirty();\n }\n\n async execute() {\n await this.folder.addSong(this.song);\n return this.song;\n }\n\n async reverse() {\n this.folder.songs = this.folder.songs.filter((d) => d !== this.song);\n return this.song;\n }\n}\n\nexport class DeleteSongCommand extends Command {\n folder: SongFolder;\n song: SongFile;\n index: number;\n\n constructor(folder: SongFolder, song: SongFile) {\n super('Delete Song');\n this.folder = folder;\n this.index = folder.songs.findIndex((s) => s === song);\n this.song = song;\n }\n\n markDirty(): void {\n this.folder.markDirty();\n this.song.markDirty();\n }\n\n async execute() {\n this.folder.songs = this.folder.songs.filter((d) => d !== this.song);\n return this.song;\n }\n\n async reverse() {\n this.folder.addSong(this.song, this.index);\n this.song.hash = \"\";\n return this.song;\n }\n}\n\nexport class DuplicateSongCommand extends Command {\n projectManager: ProjectManagerService;\n folder: SongFolder;\n song: SongFile;\n newSong?: SongFile;\n\n constructor(\n projectManager: ProjectManagerService,\n folder: SongFolder,\n song: SongFile,\n ) {\n super('Duplicate Song');\n this.projectManager = projectManager;\n this.folder = folder;\n this.song = song;\n }\n\n markDirty(): void {\n this.folder.markDirty();\n this.newSong?.markDirty();\n }\n\n async execute() {\n this.newSong =\n this.newSong ??\n (await this.projectManager.copySong(this.song, this.folder));\n await this.folder.addSong(this.newSong);\n return this.newSong;\n }\n\n async reverse() {\n this.folder.songs = this.folder.songs.filter((d) => d !== this.newSong);\n return this.song;\n }\n}\n\nexport class UpdateDrumsetCommand extends Command {\n song: Song;\n fromDrumset: DrumsetFile;\n toDrumset: DrumsetFile;\n\n constructor(song: Song, fromDrumset: DrumsetFile, toDrumset: DrumsetFile) {\n super('Update Drumset');\n this.song = song;\n this.fromDrumset = fromDrumset;\n this.toDrumset = toDrumset;\n }\n\n markDirty(): void {\n this.song.markDirty();\n }\n\n execute() {\n this.song.drumset = this.toDrumset.path;\n this.song.drumsetName = this.toDrumset.name;\n return this.song;\n }\n\n reverse() {\n this.song.drumset = this.fromDrumset.path;\n this.song.drumsetName = this.fromDrumset.name;\n return this.song;\n }\n}\n","import { registerDestructor } from '@ember/destroyable';\nimport { tracked } from '@glimmer/tracking';\nimport constrainValue from 'editor/utils/constrain-value';\nimport Crc32 from 'editor/utils/crc32';\nimport elementExists from 'editor/utils/element-exists';\nimport { beatTicks } from 'editor/utils/music-utils';\nimport Reader from 'editor/utils/reader';\nimport unique from 'editor/utils/unique';\nimport Writer from 'editor/utils/writer';\nimport { createNanoEvents, type Emitter } from 'nanoevents';\n\nconst SONG_HEADER_LENGTH = 32;\nconst SONG_OFFSETS_LENGTH = 80;\nconst SONG_MAX_PARTS = 32;\n\nexport enum SectionType {\n MAIN,\n FILL,\n TRANSITION,\n}\n\nexport enum PartType {\n INTRO,\n PART,\n OUTRO,\n}\n\nclass SongMeta {\n uuid?: string;\n drumsetName: string = '';\n @tracked defaultDrumsetName: string = '';\n\n constructor() {\n this.uuid = crypto.randomUUID();\n }\n}\n\nclass SongInfo {\n @tracked drumset: string = '';\n @tracked bpm: number = 120;\n loop: number = 0;\n @tracked parts: SongPartInfo[] = [];\n intro: SongPartInfo = new SongPartInfo();\n outro: SongPartInfo = new SongPartInfo();\n\n get isDirty() {\n return (\n this.intro.isDirty ||\n this.outro.isDirty ||\n this.parts.some((part) => part.isDirty)\n );\n }\n\n markClean() {\n this.intro.markClean();\n this.outro.markClean();\n this.parts.forEach((part) => part.markClean());\n }\n}\n\nfunction reorderFills(fills: number[]) {\n const positives = fills.filter((num) => num >= 0);\n const negatives = fills.filter((num) => num < 0);\n // Return the first 8 fills\n return [...positives, ...negatives].slice(0, 8);\n}\n\ninterface SongPartEvents {\n addTrack: (\n sectionType: SectionType,\n sectionIndex: number,\n trackIndex: number,\n ) => void;\n removeTrack: (sectionType: SectionType, sectionIndex: number) => void;\n}\n\nexport class SongPart {\n type: PartType;\n info: SongPartInfo;\n midi: SongTrack[];\n emmitter: Emitter;\n _isDirty = false;\n @tracked numFills: number;\n\n constructor(partName: PartType, info: SongPartInfo, midi: SongTrack[]) {\n this.type = partName;\n this.info = info;\n this.midi = midi;\n this.emmitter = createNanoEvents();\n this.numFills = this.info.fillCount; // this is just a hack for PR #112, so that undoing a fill sort updates visually\n }\n\n on(event: E, callback: SongPartEvents[E]) {\n return this.emmitter.on(event, callback);\n }\n\n get isDirty() {\n return this.info.isDirty || this.tracks.some((track) => track.isDirty);\n }\n\n markDirty() {\n this.info.markDirty();\n }\n\n markClean() {\n this.info.markClean();\n this.tracks.forEach((track) => track.markClean());\n }\n\n get timeSignatureNumerator() {\n return (\n this.main?.timeSignatureNumerator ?? this.info.timeSignatureNumerator\n );\n }\n\n get timeSignatureDenominator() {\n return (\n this.main?.timeSignatureDenominator ?? this.info.timeSignatureDenominator\n );\n }\n\n getTrack(sectionType: SectionType, index?: number): SongTrack | undefined {\n switch (sectionType) {\n case SectionType.FILL:\n return this.fills[index ?? 0];\n case SectionType.TRANSITION:\n return this.transition;\n default:\n return this.main;\n }\n }\n\n addTrack(sectionType: SectionType, sectionIndex: number, track: SongTrack) {\n let trackIndex = this.midi.indexOf(track);\n if (trackIndex === -1) {\n this.midi.push(track);\n trackIndex = this.midi.length - 1;\n }\n this._setTrackIndex(sectionType, sectionIndex, trackIndex);\n this.emmitter.emit('addTrack', sectionType, sectionIndex, trackIndex);\n return sectionIndex;\n }\n\n removeTrack(sectionType: SectionType, sectionIndex: number) {\n this._removeTrackIndex(sectionType, sectionIndex, -1);\n this.emmitter.emit('removeTrack', sectionType, sectionIndex);\n }\n\n renameTrack(sectionType: SectionType, sectionIndex: number, name: string) {\n const track = this.getTrack(sectionType, sectionIndex);\n if (!track) {\n throw new Error('Track not found');\n }\n track.name = name;\n }\n\n _setTrackIndex(\n sectionType: SectionType,\n sectionIndex: number,\n trackIndex: number,\n ) {\n switch (sectionType) {\n case SectionType.FILL: {\n const fillIndexes = this.info.fillFileIndexes.toSpliced(\n sectionIndex,\n 0,\n trackIndex,\n );\n this.info.fillFileIndexes = reorderFills(fillIndexes);\n break;\n }\n case SectionType.TRANSITION:\n this.info.transitionFileIndex = trackIndex;\n break;\n default:\n this.info.mainLoopFileIndex = trackIndex;\n break;\n }\n }\n\n _removeTrackIndex(\n sectionType: SectionType,\n sectionIndex: number,\n trackIndex: number,\n ) {\n switch (sectionType) {\n case SectionType.FILL: {\n const fillIndexes = this.info.fillFileIndexes.toSpliced(\n sectionIndex,\n 1,\n trackIndex,\n );\n this.info.fillFileIndexes = reorderFills(fillIndexes);\n break;\n }\n case SectionType.TRANSITION:\n this.info.transitionFileIndex = trackIndex;\n break;\n default:\n this.info.mainLoopFileIndex = trackIndex;\n break;\n }\n }\n\n get main() {\n return this.midi[this.info.mainLoopFileIndex];\n }\n\n set main(midi: SongTrack | undefined) {\n if (midi) {\n this.info.mainLoopFileIndex = this.midi.indexOf(midi);\n } else {\n this.info.mainLoopFileIndex = -1;\n }\n }\n\n get transition() {\n return this.midi[this.info.transitionFileIndex];\n }\n\n set transition(midi: SongTrack | undefined) {\n if (midi) {\n this.info.transitionFileIndex = this.midi.indexOf(midi);\n } else {\n this.info.transitionFileIndex = -1;\n }\n }\n\n get fills(): SongTrack[] {\n const fills = this.info.fillFileIndexes\n .map((index) => this.midi[index])\n .filter(elementExists)\n\n // this is just a hack for PR #112, so that undoing a fill sort updates visually\n // without the \"if (this.numFills != fills.length) {\", it would cause an infinite loop of rerenders.\n if (this.numFills != fills.length) {\n this.numFills = fills.length;\n }\n return fills;\n }\n\n set fills(midi: SongTrack[]) {\n this.info.fillFileIndexes = midi.map((m) => this.midi.indexOf(m));\n }\n\n get hasAccent() {\n return this.info.accentFileName !== '';\n }\n\n get accentFileName() {\n return this.info.accentFileName;\n }\n\n get accentVolume() {\n return this.info.effectVolume;\n }\n\n get shuffleFills() {\n return this.info.random;\n }\n\n set shuffleFills(shuffle: boolean) {\n this.info.random = shuffle;\n }\n\n get tracks() {\n return [this.main, ...this.fills, this.transition].filter(elementExists);\n }\n\n get trackIndexes() {\n return [\n this.info.mainLoopFileIndex,\n ...this.info.fillFileIndexes,\n this.info.transitionFileIndex,\n ].filter((index) => index >= 0);\n }\n\n copy(newTracks: SongTrack[]) {\n const newInfo = this.info.copy();\n if (this.midi !== newTracks) {\n // We are copying this part to a new song so we have to copy the tracks and update the part indexes\n const indexes = new Map();\n let track, index;\n track = this.midi[this.info.mainLoopFileIndex]!;\n if (track) {\n if (indexes.get(track)) {\n newInfo.mainLoopFileIndex = indexes.get(track)!;\n } else {\n index = newTracks.length;\n newTracks.push(track);\n newInfo.mainLoopFileIndex = index;\n indexes.set(track, index);\n }\n }\n\n track = this.midi[this.info.transitionFileIndex]!;\n if (track) {\n if (indexes.get(track)) {\n newInfo.transitionFileIndex = indexes.get(track)!;\n } else {\n index = newTracks.length;\n newTracks.push(track);\n newInfo.transitionFileIndex = index;\n indexes.set(track, index);\n }\n }\n\n const fills = this.info.fillFileIndexes.filter((index) => index >= 0);\n const fillIndexes = fills.map((index) => {\n track = this.midi[index]!;\n if (indexes.get(track)) {\n return indexes.get(track)!;\n } else {\n index = newTracks.length;\n newTracks.push(track);\n indexes.set(track, index);\n return index;\n }\n });\n fillIndexes.push(...new Array(8 - fillIndexes.length).fill(-1));\n newInfo.fillFileIndexes = fillIndexes;\n\n // Now make a copy of each track so they are disconnected from the source song\n indexes.forEach((index, track) => {\n newTracks[index] = track.copy();\n });\n }\n return newInfo;\n }\n}\n\nexport class SongPartInfo {\n _fillCount = 0;\n bpmDelta = 0;\n repeat = true;\n @tracked random = false;\n timeSignatureNumerator = 4;\n timeSignatureDenominator = 4;\n ticksToQuarter = 480;\n ticksPerBar = this.ticksToQuarter * 4;\n @tracked mainLoopFileIndex = -1;\n @tracked transitionFileIndex = -1;\n @tracked fillFileIndexes: number[] = new Array(8).fill(-1);\n @tracked accentFileName: string = '';\n // 0 - 200\n @tracked effectVolume: number = 100;\n loopCount: number = 0;\n _isDirty = false;\n\n get isDirty() {\n return this._isDirty;\n }\n\n markDirty() {\n this._isDirty = true;\n }\n\n markClean() {\n this._isDirty = false;\n }\n\n get fillCount() {\n return this.fillFileIndexes.filter((index) => index >= 0).length;\n }\n\n copy() {\n const part = new SongPartInfo();\n part._fillCount = this._fillCount;\n part.bpmDelta = this.bpmDelta;\n part.repeat = this.repeat;\n part.random = this.random;\n part.timeSignatureNumerator = this.timeSignatureNumerator;\n part.timeSignatureDenominator = this.timeSignatureDenominator;\n part.ticksToQuarter = this.ticksToQuarter;\n part.ticksPerBar = this.ticksPerBar;\n part.mainLoopFileIndex = this.mainLoopFileIndex;\n part.transitionFileIndex = this.transitionFileIndex;\n part.fillFileIndexes = [...this.fillFileIndexes];\n part.accentFileName = this.accentFileName;\n part.effectVolume = this.effectVolume;\n part.loopCount = this.loopCount;\n return part;\n }\n}\n\nexport class MidiEvent {\n @tracked tick: number = 0;\n type: number = 0;\n @tracked note: number = 0;\n @tracked _velocity: number = 0;\n @tracked length: number = 0;\n isDirty = false;\n\n constructor(\n tick: number = 0,\n type: number = 0,\n note: number = 0,\n velocity: number = 0,\n length: number = 1920,\n ) {\n this.tick = tick;\n this.type = type;\n this.note = note;\n this.velocity = velocity;\n this.length = length;\n }\n\n markDirty() {\n this.isDirty = true;\n }\n\n markClean() {\n this.isDirty = false;\n }\n\n set velocity(velocity: number) {\n this._velocity = velocity < 0 ? 0 : velocity > 127 ? 127 : velocity;\n }\n\n get velocity() {\n return this._velocity;\n }\n\n copy() {\n return new MidiEvent(\n this.tick,\n this.type,\n this.note,\n this.velocity,\n this.length,\n );\n }\n\n asMap() {\n return {\n tick: this.tick,\n type: this.type,\n note: this.note,\n velocity: this.velocity,\n length: this.length,\n };\n }\n}\n\nexport class SongTrack {\n dataOffset: number = 0;\n metaOffset: number = 0;\n crc: number = 0;\n @tracked fileName: string = '';\n info: SongTrackInfo = new SongTrackInfo();\n _isDirty = false;\n\n constructor(\n name: string = 'New Track',\n timeSignatureNumerator = 4,\n timeSignatureDenominator = 4,\n ) {\n this.name = name;\n this.info.timeSignatureNumerator = timeSignatureNumerator;\n this.info.timeSignatureDenominator = timeSignatureDenominator;\n this.info.tickCount =\n this.info.tickToQuarter *\n (4 / timeSignatureDenominator) *\n timeSignatureNumerator;\n this.info.barLength = this.info.tickCount;\n }\n\n get isDirty() {\n return this._isDirty || this.events.some((event) => event.isDirty);\n }\n\n markDirty() {\n this._isDirty = true;\n }\n\n markClean() {\n this._isDirty = false;\n this.events.forEach((event) => event.markClean());\n }\n\n get name() {\n return this.fileName\n .split('/')\n .pop()!\n .replace(/\\.mid$/i, '');\n }\n\n set name(name: string) {\n this.fileName = `C:/Users/BBFF/${name}.mid`;\n }\n\n get tempo() {\n return this.bpm;\n }\n\n get bpm() {\n return this.info.bpm;\n }\n\n set bpm(bpm: number) {\n this.info.bpm = bpm;\n }\n\n get barCount() {\n return Math.ceil(this.info.tickCount / this.info.barLength);\n }\n\n set barCount(count: number) {\n this.info.tickCount = count * this.info.barLength - this.trigPos;\n }\n\n get barLength() {\n return this.info.barLength;\n }\n\n get trigPos() {\n // trigPos is unreliable\n // return this.info.trigPos;\n const diff = this.tickCount % this.barLength;\n if (diff === 0) {\n return 0;\n } else {\n return Math.abs(this.barLength - diff);\n }\n }\n\n get tickCount() {\n return this.info.tickCount;\n }\n\n // How many ticks appear after the end of the last bar (for fills)\n get extraTicks() {\n return (\n this.events.reduce((acc, event) => {\n return Math.max(acc, event.tick + event.length);\n }, this.tickCount) +\n this.trigPos -\n this.tickCount\n );\n }\n\n get totalTicks() {\n return this.tickCount + this.trigPos;\n }\n\n get tickToQuarter() {\n return this.info.tickToQuarter;\n }\n\n get timeSignatureNumerator() {\n return this.info.timeSignatureNumerator;\n }\n\n get timeSignatureDenominator() {\n return this.info.timeSignatureDenominator;\n }\n\n set timeSignatureNumerator(numerator: number) {\n this.info.timeSignatureNumerator = numerator;\n }\n\n set timeSignatureDenominator(denominator: number) {\n const adjustment = this.info.timeSignatureDenominator / denominator;\n this.info.timeSignatureDenominator = denominator;\n this.info.events = this.info.events.map((event) => {\n event.tick = event.tick * adjustment;\n event.length = event.length * adjustment;\n return event;\n });\n this.info.tickCount = this.info.tickCount * adjustment;\n this.info.barLength = this.info.barLength * adjustment;\n }\n\n get events() {\n return this.info.events;\n }\n\n filterEvents() {\n // Filter out overlapped events\n return this.events.filter((ev, index) => {\n // if the event tick is less than the length of the previous note, remove it\n for (let i = index - 1; i >= 0; i--) {\n const prev = this.events[i]!;\n // if the ev tick + length overlaps prev tick + length\n if (\n ev.note == prev.note &&\n ev.tick + ev.length > prev.tick &&\n ev.tick < prev.tick + prev.length\n ) {\n return true;\n }\n }\n return false;\n });\n }\n\n get instruments() {\n return this.events\n .filter((event) => event.type === 0)\n .map((event) => event.note)\n .filter((note, i, notes) => notes.indexOf(note) === i)\n .sort((a, b) => a - b)\n .reverse();\n }\n\n get noteOnEvents() {\n return this.events.filter((event) => event.type === 0);\n }\n\n eventsForInstrument(instrumentId: number) {\n return this.events\n .filter((event) => event.type === 0)\n .filter((event) => event.note === instrumentId);\n }\n\n addEvent(event: MidiEvent) {\n this.info.addEvent(event);\n }\n\n addEvents(events: MidiEvent[]) {\n this.info.addEvents(events);\n }\n\n removeEvent(event: MidiEvent) {\n this.info.removeEvent(event);\n }\n\n removeEvents(events: MidiEvent[]) {\n this.info.removeEvents(events);\n }\n\n copy() {\n const track = new SongTrack(this.name);\n track.info = this.info.copy();\n track.fileName = this.fileName;\n return track;\n }\n\n toMidi() {\n const writer = new Writer(1024, 1024);\n writer.setString('MThd', false);\n writer.setUint(6, false);\n writer.setShort(0, false);\n writer.setShort(1, false);\n writer.setShort(this.tickToQuarter, false);\n\n const trackData = trackToMidi(this);\n writer.setString('MTrk', false);\n writer.setUint(trackData.byteLength, false);\n writer.append(trackData);\n return writer.close();\n }\n}\n\nfunction trackToMidi(track: SongTrack) {\n const writer = new Writer(1024, 1024);\n\n // Write copyright meta event\n writer.setVarInt(0); // delta\n writer.setByte(0xff); // meta message\n writer.setByte(0x02); // Copyright\n // Copyright message written into the MIDI file\n // TODO: Replace with Singular Sound URL (or change message as needed)\n const copyright = 'BeatBuddy Manager: http://localhost';\n writer.setVarInt(copyright.length);\n writer.setString(copyright, false);\n\n // Write sequence name meta event\n writer.setVarInt(0); // delta\n writer.setByte(0xff); // meta message\n writer.setByte(0x03); // Sequence name\n writer.setVarInt(track.name.length);\n writer.setString(track.name, false);\n\n // Write tempo meta event\n writer.setVarInt(0); // delta\n writer.setByte(0xff); // meta message\n writer.setByte(0x51); // Tempo\n writer.setByte(3); // length\n const tempo = Math.ceil(60_000_000 / track.info.bpm);\n // Write tempo out in three bytes\n writer.setByte((tempo >> 16) & 0xff);\n writer.setByte((tempo >> 8) & 0xff);\n writer.setByte(tempo & 0xff);\n\n // Write time signature meta event\n writer.setVarInt(0); // delta\n writer.setByte(0xff); // meta message\n writer.setByte(0x58); // Tempo\n writer.setVarInt(4); // length\n writer.setByte(track.info.timeSignatureNumerator);\n writer.setByte(Math.log2(track.info.timeSignatureDenominator));\n writer.setByte(track.info.midiClocksPerMetronomeClick);\n writer.setByte(track.info.n32ndNotesPerMIDIQuarterNote);\n\n let badEvent = false;\n const events = track.events.flatMap((event) => {\n // Skip if the event's tick is too high\n if (event.tick > track.tickCount + track.info.tickToQuarter * 2) {\n // track.info.tickToQuarter * 2 is to account for extra ticks\n // unfortunately, the extra ticks are not accurate in the case of Gorans corrupted (?) files - extra ticks get messed up here.\n badEvent = true;\n return []; // Return an empty array to skip this event\n }\n return [\n {\n note: event.note,\n velocity: event.velocity,\n tick: event.tick,\n },\n {\n note: event.note,\n velocity: 0,\n tick: event.tick + event.length,\n },\n ];\n });\n events.sort((a, b) => {\n return a.tick - b.tick;\n });\n let ticks = 0;\n let lastStatus: number;\n events.forEach((event) => {\n const delta = event.tick - ticks;\n writer.setVarInt(delta);\n if (!lastStatus) {\n writer.setByte(0x90);\n lastStatus = 0x90;\n }\n writer.setByte(event.note);\n writer.setByte(event.velocity);\n ticks = event.tick;\n });\n\n // Ensure that the delta is always positive\n let delta = track.tickCount - ticks;\n if (delta < 0) {\n delta = 0;\n }\n writer.setVarInt(delta);\n writer.setByte(0xff);\n writer.setByte(0x2f);\n writer.setByte(0x00);\n\n if (badEvent) {\n logMessageToLocalStorage('Bad event in track ' + track.name);\n console.warn('Bad event in track', track.name);\n }\n\n return writer.close();\n}\n\nfunction logMessageToLocalStorage(message: string) {\n const timestamp = new Date().toISOString();\n const logEntry = `${timestamp} - ${message}\\n`;\n\n const existingLogs = localStorage.getItem('logs') || '';\n localStorage.setItem('logs', existingLogs + logEntry);\n}\n\nexport class SongTrackInfo {\n format: number = 0;\n track: number = 0;\n @tracked tickCount: number = 0;\n pickupNotesLength: number = 0;\n additionalNotesLength: number = 0;\n @tracked timeSignatureNumerator: number = 0;\n @tracked timeSignatureDenominator: number = 0;\n n32ndNotesPerMIDIQuarterNote: number = 8;\n midiClocksPerMetronomeClick: number = 24;\n tickToQuarter: number = 480;\n @tracked barLength: number = 0;\n @tracked trigPos: number = 0;\n bpm: number = 120;\n index: number = 0;\n @tracked _events: MidiEvent[] = [];\n\n get events() {\n return this._events;\n }\n\n set events(events: MidiEvent[]) {\n this._events = events.sort(sortMidiEvents);\n }\n\n addEvent(event: MidiEvent) {\n this.events = [...this.events, event];\n }\n\n addEvents(events: MidiEvent[]) {\n this.events = [...this.events, ...events];\n }\n\n removeEvent(event: MidiEvent) {\n this.events = this.events.filter((e) => e !== event);\n }\n\n removeEvents(events: MidiEvent[]) {\n this.events = this.events.filter((e) => !events.includes(e));\n }\n\n copy() {\n const track = new SongTrackInfo();\n track.format = this.format;\n track.track = this.track;\n track.tickCount = this.tickCount;\n track.pickupNotesLength = this.pickupNotesLength;\n track.additionalNotesLength = this.additionalNotesLength;\n track.timeSignatureNumerator = this.timeSignatureNumerator;\n track.timeSignatureDenominator = this.timeSignatureDenominator;\n track.n32ndNotesPerMIDIQuarterNote = this.n32ndNotesPerMIDIQuarterNote;\n track.midiClocksPerMetronomeClick = this.midiClocksPerMetronomeClick;\n track.tickToQuarter = this.tickToQuarter;\n track.barLength = this.barLength;\n track.trigPos = this.trigPos;\n track.bpm = this.bpm;\n track.index = this.index;\n track.events = this.events.map((event) => event.copy());\n return track;\n }\n}\n\nclass SongHeader {\n type: string = 'BBSF';\n backwardsCompatibleVersion: number = 2;\n backwardsCompatibleRevision: number = 1;\n backwardsCompatibleBuild: number = 5712;\n crc: number = 0;\n flags: number = 0;\n version: number = 0;\n revision: number = 0;\n build: number = 0;\n}\n\nclass SongOffsets {\n selfOffset: number = 0;\n metaOffset: number = 0;\n songOffset: number = 0;\n midiDataOffset: number = 0;\n midiMetaOffset: number = 0;\n midiPreambleOffset: number = 0;\n autoPilotOffset: number = 0;\n selfLength: number = 0;\n metaLength: number = 0;\n songLength: number = 0;\n midiPreambleLength: number = 0;\n midiMetaLength: number = 0;\n midiDataLength: number = 0;\n autoPilotLength: number = 0;\n}\n\ninterface Events {\n rename: (name: string) => void;\n changeDrumset: (drumset: string) => void;\n addTrack: (\n part: SongPart,\n sectionType: SectionType,\n sectionIndex: number,\n trackIndex: number,\n ) => void;\n removeTrack: (\n part: SongPart,\n sectionType: SectionType,\n sectionIndex: number,\n ) => void;\n}\n\nexport default class Song {\n header: SongHeader = new SongHeader();\n offsets: SongOffsets = new SongOffsets();\n meta: SongMeta = new SongMeta();\n info: SongInfo = new SongInfo();\n tracks: SongTrack[] = [];\n @tracked _name: string;\n emmitter: Emitter;\n _isDirty = false;\n\n constructor(name: string) {\n this._name = name;\n this.emmitter = createNanoEvents();\n }\n\n on(event: E, callback: Events[E]) {\n return this.emmitter.on(event, callback);\n }\n\n get isDirty() {\n return (\n this._isDirty ||\n this.tracks.some((track) => track._isDirty) ||\n this.allParts.some((part) => part.isDirty)\n );\n }\n\n markDirty() {\n this._isDirty = true;\n }\n\n markClean() {\n this._isDirty = false;\n this.tracks.forEach((track) => track.markClean());\n this.allParts.forEach((part) => part.markClean());\n }\n\n get isValid(): true | string {\n let response = '';\n this.parts.forEach((part) => {\n // The tracks here are for the main parts, not the fills (outro, intro, etc)\n if (part.tracks.length === 0) {\n response = 'Invalid Song, missing parts';\n }\n });\n if (response === '') {\n return true;\n } else {\n return response;\n }\n }\n\n get uuid() {\n return this.meta.uuid;\n }\n\n get name() {\n return this._name;\n }\n\n set name(name: string) {\n this._name = name;\n this.emmitter.emit('rename', name);\n }\n\n get drumsetName() {\n return this.meta.drumsetName;\n }\n\n set drumsetName(drumsetName: string) {\n this.meta.drumsetName = drumsetName;\n }\n\n get defaultDrumsetName() {\n return this.meta.defaultDrumsetName;\n }\n\n set defaultDrumsetName(drumsetName: string) {\n this.meta.defaultDrumsetName = drumsetName;\n }\n\n get drumset() {\n return this.info.drumset;\n }\n\n set drumset(drumset: string) {\n this.info.drumset = drumset;\n this.emmitter.emit('changeDrumset', drumset);\n }\n\n get sections() {\n return this.info.parts.length;\n }\n\n get intro() {\n return this.setupPartEvents(\n new SongPart(PartType.INTRO, this.info.intro, this.tracks),\n );\n }\n\n get outro() {\n return this.setupPartEvents(\n new SongPart(PartType.OUTRO, this.info.outro, this.tracks),\n );\n }\n\n get parts() {\n return this.info.parts.map((info) =>\n this.setupPartEvents(new SongPart(PartType.PART, info, this.tracks)),\n );\n }\n\n get allParts() {\n return [this.intro, ...this.parts, this.outro];\n }\n\n get usedTracks() {\n return this.allParts.flatMap((part) => part.tracks);\n }\n\n get effects(): string[] {\n return this.allParts\n .map((part) => part.accentFileName)\n .filter((effectFile) => effectFile !== '');\n }\n\n addPart(afterPart?: SongPart, clonePart?: SongPart) {\n let part: SongPartInfo;\n if (clonePart) {\n part = clonePart.copy(this.tracks);\n } else {\n part = new SongPartInfo();\n part.timeSignatureNumerator =\n afterPart?.timeSignatureNumerator ??\n this.parts[0]?.timeSignatureNumerator ??\n this.intro?.timeSignatureNumerator ??\n 4;\n part.timeSignatureDenominator =\n afterPart?.timeSignatureDenominator ??\n this.parts[0]?.timeSignatureDenominator ??\n this.intro?.timeSignatureDenominator ??\n 4;\n part.ticksPerBar = beatTicks(\n part.ticksToQuarter,\n part.timeSignatureDenominator,\n );\n }\n let index = this.parts.findIndex((p) => p.info == afterPart?.info);\n if (index === -1) {\n index = this.parts.length - 1;\n }\n return this.insertPart(\n this.setupPartEvents(new SongPart(PartType.PART, part, this.tracks)),\n index + 1,\n );\n }\n\n insertPart(part: SongPart, index?: number) {\n const info = part.info;\n if (typeof index === 'number') {\n this.info.parts = [\n ...this.info.parts.slice(0, index),\n info,\n ...this.info.parts.slice(index),\n ];\n } else {\n this.info.parts = [info, ...this.info.parts];\n }\n\n return part;\n }\n\n removePart(songPart: SongPart) {\n this.info.parts = this.info.parts.filter((p) => p !== songPart.info);\n }\n\n get tempo() {\n return this.info.bpm;\n }\n\n get bpm() {\n return this.info.bpm;\n }\n\n set bpm(bpm: number) {\n this.info.bpm = constrainValue(bpm, 40, 300);\n this.tracks.forEach((track) => (track.bpm = this.info.bpm));\n }\n\n setupPartEvents(part: SongPart) {\n const addTrackDestructor = part.on(\n 'addTrack',\n (sectionType, sectionIndex, trackIndex) => {\n // If this is the first track, then set the song BPM from the track\n if (this.usedTracks.length === 1) {\n const track = this.usedTracks[0]!;\n this.bpm = track.bpm;\n }\n this.emmitter.emit(\n 'addTrack',\n part,\n sectionType,\n sectionIndex,\n trackIndex,\n );\n },\n );\n const removeTrackDestructor = part.on(\n 'removeTrack',\n (sectionType, sectionIndex) => {\n this.emmitter.emit('removeTrack', part, sectionType, sectionIndex);\n },\n );\n registerDestructor(part, () => {\n addTrackDestructor();\n removeTrackDestructor();\n });\n return part;\n }\n\n save() {\n // META\n const metaWriter = new Writer(256, 256);\n metaWriter.setString(`{${this.meta.uuid}}`, false, 40);\n metaWriter.setString(this.meta.drumsetName, false, 128);\n const padding = new Array(88).fill(90); // Z\n metaWriter.setBytes(new Uint8Array(padding));\n const metaOffset = SONG_HEADER_LENGTH + SONG_OFFSETS_LENGTH;\n const meta = metaWriter.close();\n const metaLength = meta.byteLength;\n\n // SONG\n const songWriter = new Writer(1024, 1024);\n songWriter.setUint(this.info.loop);\n songWriter.setUint(this.info.bpm);\n songWriter.setUint(this.info.parts.length);\n songWriter.setUint(0); // reserved\n songWriter.setString(this.info.drumset, false, 16);\n\n // Get all used tracks and setup a translation map for the track indexes\n const trackIndexes = this.allParts\n .flatMap((part) => part.trackIndexes)\n .filter(unique)\n .sort((a, b) => a - b);\n const trackMap = new Map();\n const usedTracks = trackIndexes.map((index, newIndex) => {\n trackMap.set(index, newIndex);\n return this.tracks[index]!;\n });\n\n writeSongPart(songWriter, this.info.intro, trackMap);\n writeSongPart(songWriter, this.info.outro, trackMap);\n this.info.parts.forEach((part) => {\n writeSongPart(songWriter, part, trackMap);\n });\n // Write blank parts as required by the file format\n for (let i = this.info.parts.length, ii = SONG_MAX_PARTS; i < ii; i++) {\n writeSongPart(songWriter, new SongPartInfo(), trackMap);\n }\n const songOffset = SONG_HEADER_LENGTH + SONG_OFFSETS_LENGTH + metaLength;\n const song = songWriter.close();\n const songLength = song.byteLength;\n\n // MIDI\n const midiPreambleWriter = new Writer(1024, 1024);\n const midiMetaWriter = new Writer(2048, 1024);\n const midiDataWriter = new Writer(5120, 1024);\n\n usedTracks.forEach((item) => {\n midiPreambleWriter.setUint(midiDataWriter.offset);\n midiPreambleWriter.setUint(midiMetaWriter.offset);\n let length = item.fileName.length + 1;\n const rem = length % 4;\n if (rem > 0) {\n length += 4 - rem;\n }\n midiMetaWriter.setString(item.fileName, false, length);\n writeMidiData(midiDataWriter, item);\n const crc = new Crc32();\n crc.update(midiMetaWriter.buffer, midiMetaWriter.offset);\n crc.update(midiDataWriter.buffer, midiDataWriter.offset);\n const crcValue = crc.getCRC(true);\n midiPreambleWriter.setUint(crcValue);\n midiPreambleWriter.setUint(0); // reserved\n midiPreambleWriter.setUint(0); // reserved\n midiPreambleWriter.setUint(0); // reserved\n midiPreambleWriter.setUint(0); // reserved\n midiPreambleWriter.setUint(0); // reserved\n });\n\n const midiPreamble = midiPreambleWriter.close();\n const midiPreambleOffset = songOffset + songLength;\n const midiPreambleLength = midiPreamble.byteLength;\n const midiMeta = midiMetaWriter.close();\n const midiMetaOffset = midiPreambleOffset + midiPreambleLength;\n const midiMetaLength = midiMeta.byteLength;\n const midiData = midiDataWriter.close();\n const midiDataOffset = midiMetaOffset + midiMetaLength;\n const midiDataLength = midiData.byteLength;\n\n const writer = new Writer();\n\n // OFFSETS\n const offsetsWriter = new Writer();\n offsetsWriter.setUint(SONG_HEADER_LENGTH); // self offset\n offsetsWriter.setUint(metaOffset); // meta offset\n offsetsWriter.setUint(songOffset); // song offset\n offsetsWriter.setUint(midiDataOffset); // midi data offset\n offsetsWriter.setUint(midiMetaOffset); // midi meta offset\n offsetsWriter.setUint(midiPreambleOffset); // midi preamble offset\n offsetsWriter.setUint(0); // auto pilot offset\n offsetsWriter.setUint(0); // reserved\n offsetsWriter.setUint(0); // reserved\n offsetsWriter.setUint(0); // reserved\n offsetsWriter.setUint(SONG_OFFSETS_LENGTH); // self length\n offsetsWriter.setUint(metaLength); // meta length\n offsetsWriter.setUint(songLength); // song length\n offsetsWriter.setUint(midiPreambleLength); // midi preamble length\n offsetsWriter.setUint(midiMetaLength); // midi meta length\n offsetsWriter.setUint(midiDataLength); // midi data length\n offsetsWriter.setUint(0); // auto pilot length\n offsetsWriter.setUint(0); // reserved\n offsetsWriter.setUint(0); // reserved\n offsetsWriter.setUint(0); // reserved\n\n const crc32 = new Crc32();\n crc32.update(offsetsWriter.buffer, offsetsWriter.offset);\n crc32.update(metaWriter.buffer, metaWriter.offset);\n crc32.update(songWriter.buffer, songWriter.offset);\n crc32.update(midiPreambleWriter.buffer, midiPreambleWriter.offset);\n crc32.update(midiMetaWriter.buffer, midiMetaWriter.offset);\n crc32.update(midiDataWriter.buffer, midiDataWriter.offset);\n const crc = crc32.getCRC(true);\n this.header.crc = crc;\n\n writeSongHeader(writer, crc);\n writer.append(offsetsWriter.close());\n writer.append(meta);\n writer.append(song);\n writer.append(midiPreamble);\n writer.append(midiMeta);\n writer.append(midiData);\n\n return writer.close();\n }\n\n copy() {\n const data = this.save();\n const song = Song.parse(data, `${this.name} Copy`);\n song.meta.uuid = crypto.randomUUID();\n return song;\n }\n\n static parseHeader(buffer: ArrayBuffer) {\n const reader = new Reader(new DataView(buffer), 0);\n return parseSongHeader(reader);\n }\n\n static parse(buffer: ArrayBuffer, name: string) {\n const reader = new Reader(new DataView(buffer), 0);\n const song = new Song(name);\n song.header = parseSongHeader(reader);\n song.offsets = parseSongOffsets(reader);\n song.meta = parseSongMeta(reader.seek(song.offsets.metaOffset));\n song.tracks = parseSongMidi(reader, song.offsets);\n song.info = parseSongInfo(reader.seek(song.offsets.songOffset));\n return song;\n }\n}\n\nfunction parseSongHeader(reader: Reader) {\n const header = new SongHeader();\n header.type = reader.getString(4);\n header.backwardsCompatibleVersion = reader.getByte();\n header.backwardsCompatibleRevision = reader.getByte();\n header.backwardsCompatibleBuild = reader.getUShort();\n header.crc = reader.getUint();\n header.flags = reader.getByte();\n reader.getByte(); //reserved\n reader.getByte(); //reserved\n reader.getByte(); //reserved\n header.version = reader.getByte();\n header.revision = reader.getByte();\n header.build = reader.getUShort();\n // reserved 20-32\n reader.getUint();\n reader.getUint();\n reader.getUint();\n return header;\n}\n\nfunction parseSongOffsets(reader: Reader) {\n const offsets = new SongOffsets();\n offsets.selfOffset = reader.getUint();\n offsets.metaOffset = reader.getUint();\n offsets.songOffset = reader.getUint();\n offsets.midiDataOffset = reader.getUint();\n offsets.midiMetaOffset = reader.getUint();\n offsets.midiPreambleOffset = reader.getUint();\n offsets.autoPilotOffset = reader.getUint();\n reader.getUint(); // reserved\n reader.getUint(); // reserved\n reader.getUint(); // reserved\n offsets.selfLength = reader.getUint();\n offsets.metaLength = reader.getUint();\n offsets.songLength = reader.getUint();\n offsets.midiPreambleLength = reader.getUint();\n offsets.midiMetaLength = reader.getUint();\n offsets.midiDataLength = reader.getUint();\n offsets.autoPilotLength = reader.getUint();\n reader.getUint(); // reserved\n reader.getUint(); // reserved\n reader.getUint(); // reserved\n return offsets;\n}\n\nfunction parseSongMeta(reader: Reader) {\n const meta = new SongMeta();\n meta.uuid = reader\n .getString(40, true)\n .replace(/\\{(.+)\\}.*/, '$1')\n .trim();\n meta.drumsetName = reader.getString(127, true).trim();\n meta.defaultDrumsetName = meta.drumsetName;\n // The full available drumset name is padded with \\0 to 127 bytes\n // The rest of the meta data is padded with Z's\n return meta;\n}\n\nfunction parseSongInfo(reader: Reader) {\n const info = new SongInfo();\n info.loop = reader.getUint();\n info.bpm = reader.getUint();\n const partCount = reader.getUint();\n reader.getUint(); // reserved\n info.drumset = reader.getString(16, true);\n info.intro = parsePart(reader);\n info.outro = parsePart(reader);\n info.parts = [];\n for (let i = 0; i < partCount; i++) {\n info.parts.push(parsePart(reader));\n }\n return info;\n}\n\nfunction parsePart(reader: Reader) {\n const part = new SongPartInfo();\n part._fillCount = reader.getUint();\n part.bpmDelta = reader.getUint();\n part.repeat = reader.getUShort() == 1;\n part.random = reader.getUShort() == 1;\n part.timeSignatureNumerator = reader.getUint();\n part.timeSignatureDenominator = reader.getUint();\n part.ticksPerBar = reader.getUint();\n part.mainLoopFileIndex = reader.getInt();\n part.transitionFileIndex = reader.getInt();\n part.fillFileIndexes = [\n reader.getInt(),\n reader.getInt(),\n reader.getInt(),\n reader.getInt(),\n reader.getInt(),\n reader.getInt(),\n reader.getInt(),\n reader.getInt(),\n ];\n part.accentFileName = reader.getString(16, true);\n part.effectVolume = reader.getUint();\n part.loopCount = reader.getUint();\n reader.getUint(); // reserved\n reader.getUint(); // reserved\n return part;\n}\n\nfunction parseSongMidi(\n reader: Reader,\n {\n midiPreambleOffset,\n midiPreambleLength,\n midiMetaOffset,\n midiMetaLength,\n midiDataOffset,\n }: SongOffsets,\n) {\n const midiParts = midiPreambleLength / 32;\n const midi = [];\n for (let i = 0; i < midiParts; i++) {\n const item = parseMidiMeta(reader.seek(midiPreambleOffset + i * 32));\n reader.seek(midiMetaOffset + item.metaOffset);\n item.fileName = reader.getString(midiMetaLength - item.metaOffset, true);\n item.info = parseMidiTrack(\n reader.seek(midiDataOffset + item.dataOffset),\n item.fileName,\n );\n midi.push(item);\n }\n return midi;\n}\n\nfunction sortMidiEvents(a: MidiEvent, b: MidiEvent) {\n if (a.tick === b.tick) {\n if (a.type === b.type) {\n return a.note - b.note;\n }\n // Types are reversed so that note off events are first for the same tick\n return b.type - a.type;\n }\n return a.tick - b.tick;\n}\n\nfunction parseMidiTrack(reader: Reader, name: string) {\n const track = new SongTrackInfo();\n track.format = reader.getUint();\n track.track = reader.getUint();\n track.tickCount = reader.getUint();\n track.pickupNotesLength = reader.getUint();\n track.additionalNotesLength = reader.getUint();\n track.timeSignatureNumerator = reader.getByte();\n track.timeSignatureDenominator = reader.getByte();\n track.n32ndNotesPerMIDIQuarterNote = reader.getByte();\n track.midiClocksPerMetronomeClick = reader.getByte();\n track.tickToQuarter = reader.getUint();\n track.barLength = reader.getUint();\n track.trigPos = reader.getUint();\n track.bpm = reader.getUint();\n track.index = reader.getUint();\n reader.getUint(); // reserved\n reader.getUint(); // reserved\n const eventCount = reader.getUint();\n let events: MidiEvent[] = [];\n let badEvent = false;\n for (let i = 0; i < eventCount; i++) {\n const tick = reader.getUint();\n const type = reader.getByte();\n const note = reader.getByte();\n const velocity = reader.getByte();\n const event = new MidiEvent(tick, type, note, velocity);\n reader.getByte(); // reserved\n events.push(event);\n\n if (tick > track.tickCount + track.tickToQuarter * 2) {\n // track.tickToQuarter * 2 is to account for extra ticks\n // this property doesn't exist in song track info, and additionalNotesLength (which may be the same thing? or maybe not) is huge\n badEvent = true;\n }\n }\n\n events = normalizeMidiEvents(events, track);\n\n track.events = events;\n\n if (track.tickToQuarter === 0) {\n const factor =\n track.timeSignatureNumerator / (track.timeSignatureDenominator / 4);\n track.tickToQuarter = track.barLength / factor;\n }\n\n if (badEvent) {\n logMessageToLocalStorage('Bad event in track ' + name);\n console.warn('Bad event in track', name);\n }\n\n return track;\n}\n\nexport function normalizeMidiEvents(events: MidiEvent[], track: SongTrackInfo) {\n events = events.toSorted(sortMidiEvents);\n\n // Working backwards, find each note-on event,\n // then search forwards to the next note-off event (or note-on with 0 velocity)\n // and set the length to the difference\n for (let i = events.length - 1; i >= 0; i--) {\n const event = events[i]!;\n if (event.type === 0 && event.velocity > 0) {\n for (let j = i + 1; j < events.length; j++) {\n const nextEvent = events[j]!;\n if (\n nextEvent.note === event.note &&\n (nextEvent.type === 1 || nextEvent.velocity === 0)\n ) {\n event.length = nextEvent.tick - event.tick;\n break;\n }\n }\n }\n }\n\n // Remove any note on events with a velocity of 0\n events = events.filter(\n (event) => !(event.type === 0 && event.velocity === 0),\n );\n\n // Remove all note off events\n events = events.filter((event) => event.type === 0);\n\n // For each event, search backwards and set the length to the difference between\n // the current event and the next event if it is shorter than the existing length\n events.forEach((event, i) => {\n for (let j = i + 1; j < events.length; j++) {\n const nextEvent = events[j]!;\n if (nextEvent.type === 0 && nextEvent.note === event.note) {\n event.length = Math.min(event.length, nextEvent.tick - event.tick);\n break;\n }\n }\n });\n\n // Remove any note with a zero length\n events = events.filter((event) => event.length > 0);\n\n // For each event, ensure that the tick + length is not longer than tickCount\n events.forEach((event) => {\n if (event.tick + event.length > track.tickCount) {\n event.length = track.tickCount - event.tick;\n }\n // Events after the end of the track are set to the length of a quarter note\n if (event.tick >= track.tickCount) {\n event.length =\n (track.tickToQuarter * (track.timeSignatureDenominator / 4)) /\n track.timeSignatureNumerator;\n }\n });\n\n return events;\n}\n\nfunction parseMidiMeta(reader: Reader) {\n const meta = new SongTrack();\n meta.dataOffset = reader.getUint();\n meta.metaOffset = reader.getUint();\n meta.crc = reader.getUint();\n // reserved 12 - 28\n return meta;\n}\n\nfunction writeSongHeader(writer: Writer, crc: number) {\n writer.setString('BBSF', false);\n writer.setByte(2); // backwards compatibility version\n writer.setByte(0); // backwards compatibility revision\n writer.setUShort(5712); // backwards compatibility build\n writer.setUint(crc);\n writer.setByte(0); // flags\n writer.setByte(0); // reserved\n writer.setByte(0); // reserved\n writer.setByte(0); // reserved\n writer.setByte(0); // version\n writer.setByte(0); // revision\n writer.setUShort(0); // build\n writer.setUint(0); // reserved\n writer.setUint(0); // reserved\n writer.setUint(0); // reserved\n}\n\nfunction writeSongPart(\n writer: Writer,\n part: SongPartInfo,\n trackMap: Map,\n) {\n writer.setUint(part.fillCount ?? 0);\n writer.setUint(part.bpmDelta ?? 0);\n writer.setUShort(part.repeat ?? true ? 1 : 0);\n writer.setUShort(part.random ? 1 : 0);\n writer.setUint(part.timeSignatureNumerator ?? 4);\n writer.setUint(part.timeSignatureDenominator ?? 4);\n writer.setUint(part.ticksPerBar ?? 1920);\n writer.setInt(trackMap.get(part.mainLoopFileIndex) ?? -1);\n writer.setInt(trackMap.get(part.transitionFileIndex) ?? -1);\n (part.fillFileIndexes ?? new Array(8).fill(-1)).forEach((index) => {\n writer.setInt(trackMap.get(index) ?? -1);\n });\n writer.setString(part.accentFileName ?? '', false, 16);\n writer.setUint(part.effectVolume ?? 100);\n writer.setUint(part.loopCount ?? 0);\n writer.setUint(0); // reserved\n writer.setUint(0); // reserved\n}\n\nfunction writeMidiData(writer: Writer, item: SongTrack) {\n writer.setUint(item.info.format ?? 0);\n writer.setUint(item.info.track ?? 0);\n writer.setUint(item.info.tickCount ?? 0);\n writer.setUint(item.info.pickupNotesLength ?? 0);\n writer.setUint(item.info.additionalNotesLength ?? 0);\n writer.setByte(item.info.timeSignatureNumerator ?? 0);\n writer.setByte(item.info.timeSignatureDenominator ?? 0);\n writer.setByte(item.info.n32ndNotesPerMIDIQuarterNote ?? 0);\n writer.setByte(item.info.midiClocksPerMetronomeClick ?? 0);\n writer.setUint(item.info.tickToQuarter ?? 0);\n writer.setUint(item.info.barLength ?? 0);\n writer.setUint(item.info.trigPos ?? 0);\n writer.setUint(item.info.bpm ?? 0);\n writer.setUint(item.info.index ?? 0);\n writer.setUint(0); // reserved\n writer.setUint(0); // reserved\n // x 2 because we’re going to write a note off for every note on\n writer.setUint(item.info.events.length * 2);\n item.info.events\n .flatMap((event) => [\n event,\n // Write a note off event for each note on event\n new MidiEvent(event.tick + event.length, 1, event.note, 0, 0),\n ])\n .sort(sortMidiEvents)\n .forEach((event) => {\n writer.setUint(event.tick);\n writer.setByte(event.type);\n writer.setByte(event.note);\n writer.setByte(event.velocity);\n writer.setByte(0); // reserved\n });\n}\n","import { assert } from '@ember/debug';\nimport { modifier } from 'ember-modifier';\n\ninterface DisabledSignature {\n Element: HTMLElement;\n Args: {\n Named: {\n when: boolean;\n };\n Positional: [];\n };\n}\n\nfunction disabled(\n element: HTMLElement,\n _: never[],\n { when: isDisabled }: DisabledSignature['Args']['Named'],\n) {\n assert(\n 'disabled modifier requires boolean `when` argument',\n typeof isDisabled === 'boolean',\n );\n\n element.setAttribute('aria-disabled', isDisabled ? 'true' : 'false');\n if (isDisabled) {\n element.setAttribute('readonly', 'true');\n if (element instanceof HTMLSelectElement) {\n element.setAttribute('disabled', 'true');\n }\n } else {\n element.removeAttribute('readonly');\n if (element instanceof HTMLSelectElement) {\n element.removeAttribute('disabled');\n }\n }\n element.classList.toggle('disabled', isDisabled);\n\n if (isDisabled) {\n const stopEvent = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n return false;\n };\n\n element.addEventListener('click', stopEvent, true);\n return () => element.removeEventListener('click', stopEvent, true);\n }\n return () => {};\n}\n\nexport default modifier(disabled);\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n disabled: typeof disabled;\n }\n}\n","import { modifier } from 'ember-modifier';\n\nexport default modifier((element: HTMLElement, [isDragging]: [boolean]) => {\n if (isDragging) {\n element.classList.add('droppable');\n } else {\n element.classList.remove('droppable');\n }\n});\n","import { modifier } from 'ember-modifier';\nimport { later, next } from '@ember/runloop';\n\ninterface ClickOutsideSignature {\n Element: HTMLElement;\n Args: {\n Named: {\n timeout?: number;\n wormholeEl?: HTMLElement | string;\n };\n Positional: [() => void];\n };\n}\n\nfunction onClickOutside(\n element: HTMLElement,\n [callback]: [() => void],\n {\n timeout: timeout = 0,\n wormholeEl: wormholeEl = undefined,\n }: { timeout?: number; wormholeEl?: HTMLElement | string },\n) {\n function handleClick(event: TouchEvent | MouseEvent) {\n let $wormhole;\n if (typeof wormholeEl === 'string') {\n $wormhole = document.querySelector(wormholeEl);\n } else {\n $wormhole = wormholeEl;\n }\n if (\n !element.contains(event.target as Node) &&\n (!$wormhole || !$wormhole.contains(event.target as Node))\n ) {\n later(() => callback(), timeout);\n }\n }\n // This modifier is activated during a click event.\n // If we dond’t delay attaching to document, then the click event fires on the activating click because of event bubbling\n // I’m using capture phase so it doesn’t fire if the DOM is changed as a result of the click\n // eslint-disable-next-line ember/no-runloop\n next(() => {\n document.addEventListener('click', handleClick, { capture: true });\n document.addEventListener('touchstart', handleClick, { capture: true });\n });\n\n return () => {\n document.removeEventListener('touchstart', handleClick, {\n capture: true,\n });\n document.removeEventListener('click', handleClick, { capture: true });\n };\n}\n\nexport default modifier(onClickOutside);\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'on-click-outside': typeof onClickOutside;\n }\n}\n","import { modifier } from 'ember-modifier';\n\ninterface OnKeySignature {\n Element: HTMLElement;\n Args: {\n Positional: [key: string, (event: KeyboardEvent) => void];\n Named?: {\n preventDefault?: boolean;\n includeInputs?: boolean;\n cmdKey?: boolean;\n shiftKey?: boolean;\n altKey?: boolean;\n capture?: boolean;\n };\n };\n}\n\nfunction onKey(\n element: HTMLElement,\n [key, callback]: [string, (event: KeyboardEvent) => void],\n named?: {\n preventDefault?: boolean;\n includeInputs?: boolean;\n cmdKey?: boolean;\n shiftKey?: boolean;\n altKey?: boolean;\n capture?: boolean;\n },\n) {\n const opts = Object.assign(\n {\n preventDefault: false,\n includeInputs: false,\n cmdKey: false,\n shiftKey: false,\n altKey: false,\n capture: false,\n },\n named,\n );\n const eventHandler = (event: KeyboardEvent) => {\n if (\n (event.code === key || event.key === key) &&\n ((opts.cmdKey === false && !(event.metaKey || event.ctrlKey)) ||\n (opts.cmdKey === true && (event.metaKey || event.ctrlKey))) &&\n (event.metaKey === opts.cmdKey || event.ctrlKey === opts.cmdKey) &&\n event.shiftKey === opts.shiftKey &&\n event.altKey === opts.altKey\n ) {\n if (\n !opts.includeInputs &&\n (event.target instanceof HTMLInputElement ||\n event.target instanceof HTMLTextAreaElement) &&\n event.target != element\n ) {\n return;\n }\n if (opts.preventDefault) {\n event.preventDefault();\n }\n callback(event);\n }\n };\n document.addEventListener('keydown', eventHandler, { capture: opts.capture });\n\n return () => {\n document.removeEventListener('keydown', eventHandler, {\n capture: opts.capture,\n });\n };\n}\n\nexport default modifier(onKey);\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'on-key': typeof onKey;\n }\n}\n","import { modifier } from 'ember-modifier';\n\nexport interface ScrollIntoViewSignature {\n Element: HTMLElement;\n Args: {\n Positional: [];\n Named: {\n when?: boolean;\n opts?: ScrollIntoViewOptions;\n };\n };\n}\n\nconst scrollIntoView = modifier(\n function scrollIntoView(\n element: HTMLElement,\n _,\n { when: shouldScrollIntoView = true, opts },\n ) {\n if (shouldScrollIntoView) {\n element.scrollIntoView(opts);\n }\n },\n);\n\nexport default scrollIntoView;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'scroll-into-view': typeof scrollIntoView;\n scrollIntoView: typeof scrollIntoView;\n }\n}\n","import { modifier } from 'ember-modifier';\n\nexport interface SelectedSignature {\n Element: HTMLElement;\n Args: {\n Positional: [];\n Named: {\n when?: boolean;\n };\n };\n}\n\nconst selected = modifier(function selected(\n element: HTMLElement,\n _,\n { when: shouldBeSelected = false },\n) {\n if (shouldBeSelected) {\n element.classList.add('selected');\n } else {\n element.classList.remove('selected');\n }\n});\n\nexport default selected;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n selected: typeof selected;\n }\n}\n","/**!\n * Sortable 1.15.2\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.2\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = parent.parentNode);\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","import { modifier } from 'ember-modifier';\n//@ts-expect-error\nimport Sortable from 'sortablejs';\n\n// NOTE: I’ve left commented out code in here to serve as SortableJS documentation\n\ninterface Event {\n to: HTMLElement; //— list, in which moved element\n from: HTMLElement; // — previous list\n item: HTMLElement; //— dragged element\n clone: HTMLElement;\n oldIndex: number; // | undefined; //— old index within parent\n newIndex: number; // | undefined; //— new index within parent\n oldDraggableIndex: number; // | undefined; //— old index within parent, only counting draggable elements\n newDraggableIndex: number; // | undefined; //— new index within parent, only counting draggable elements\n pullMode: string | boolean | undefined; //— Pull mode if dragging into another sortable (\"clone\", true, or false), otherwise undefined\n}\n\ninterface MoveEvent {\n to: HTMLElement;\n from: HTMLElement;\n dragged: HTMLElement;\n draggedRect: DOMRect;\n related: HTMLElement; //— element on which have guided\n relatedRect: DOMRect;\n willInsertAfter: Boolean; //— true if will element be inserted after target (or false if before)\n}\n\nexport interface SortableSignature {\n Element: HTMLElement;\n Args: {\n Positional: [];\n Named: {\n sort?: boolean;\n draggable: string;\n handle?: string;\n group?: string | { name: string; pull: boolean | 'clone' };\n swapThreshold?: number;\n allowAdd?: string;\n allowRemove?: string;\n removeItem?: boolean;\n onChange?: (oldIndex: number, newIndex: number) => void;\n onMove?: (\n fromElement: HTMLElement,\n fromIndex: number,\n toElement: HTMLElement,\n toIndex: number,\n ) => void;\n };\n };\n}\n\nconst sortable = modifier(function sortable(\n element: HTMLElement,\n _,\n {\n sort,\n draggable,\n handle,\n group,\n swapThreshold,\n allowAdd,\n allowRemove,\n removeItem,\n onChange,\n onMove,\n }: SortableSignature['Args']['Named'],\n) {\n const sortable = new Sortable(element, {\n sort: sort ?? true,\n draggable: draggable,\n handle: handle,\n group: group,\n swapThreshold: swapThreshold ?? 1,\n // setData: function (dataTransfer: DataTransfer, dragEl: HTMLElement) {\n // dataTransfer.setData('Text', dragEl.textContent ?? ''); // `dataTransfer` object of HTML5 DragEvent\n // },\n\n // // Element is chosen\n onChoose: function (/*evt: Event*/) {\n // evt.oldIndex; // element index within parent\n },\n\n // // Element is unchosen\n onUnchoose: function (/*evt: Event*/) {\n // same properties as onEnd\n },\n\n // // Element dragging started\n onStart: function (/*evt: Event*/) {\n // evt.oldIndex; // element index within parent\n },\n\n // Element dragging ended\n onEnd: function (evt: Event) {\n // evt.item; // dragged HTMLElement\n // evt.to; // target list\n // evt.from; // previous list\n // evt.oldIndex; // element's old index within old parent\n // evt.newIndex; // element's new index within new parent\n // evt.oldDraggableIndex; // element's old index within old parent, only counting draggable elements\n // evt.newDraggableIndex; // element's new index within new parent, only counting draggable elements\n // evt.clone; // the clone element\n // evt.pullMode; // when item is in another sortable: `\"clone\"` if cloning, `true` if moving\n if (evt.from === evt.to) {\n if (evt.oldDraggableIndex !== evt.newDraggableIndex) {\n if (removeItem) {\n evt.item.remove();\n }\n onChange?.(evt.oldDraggableIndex, evt.newDraggableIndex);\n }\n } else {\n if (evt.pullMode === 'clone') {\n // From my testing evt.pullMode is true not a string?!?!?!\n evt.item.remove();\n } else {\n const child = evt.from.children[evt.oldDraggableIndex];\n if (child) {\n evt.from.insertBefore(evt.item, child);\n } else {\n evt.from.appendChild(evt.item);\n }\n if (removeItem) {\n evt.item.remove();\n }\n }\n onMove?.(evt.from, evt.oldIndex, evt.to, evt.newIndex);\n }\n },\n\n // // Element is dropped into the list from another list\n onAdd: function (/*evt: Event*/) {\n // same properties as onEnd\n },\n\n // // Changed sorting within list\n onUpdate: function (/*evt: Event*/) {\n // same properties as onEnd\n },\n\n // // Called by any change to the list (add / update / remove)\n onSort: function (/*evt: Event*/) {\n // same properties as onEnd\n },\n\n // // Element is removed from the list into another list\n onRemove: function (/*evt: Event*/) {\n // same properties as onEnd\n },\n\n // // Attempt to drag a filtered element\n onFilter: function (/*evt: Event*/) {\n // var itemEl = evt.item; // HTMLElement receiving the `mousedown|tapstart` event.\n },\n\n // // Event when you move an item in the list or between lists\n onMove: function (evt: MoveEvent /*, originalEvent: Event*/) {\n // // Example: https://jsbin.com/nawahef/edit?js,output\n // evt.dragged; // dragged HTMLElement\n // evt.draggedRect; // DOMRect {left, top, right, bottom}\n // evt.related; // HTMLElement on which have guided\n // evt.relatedRect; // DOMRect\n // evt.willInsertAfter; // Boolean that is true if Sortable will insert drag element after target by default\n // //@ts-expect-error\n // originalEvent.clientY; // mouse position\n // // return false; — for cancel\n // // return -1; — insert before target\n // // return 1; — insert after target\n // // return true; — keep default insertion point based on the direction\n // // return void; — keep default insertion point based on the direction\n if (allowAdd && !evt.to.matches(allowAdd)) {\n return false;\n }\n },\n\n // // Called when creating a clone of element\n onClone: function (/*evt: Event*/) {\n // var origEl = evt.item;\n // var cloneEl = evt.clone;\n },\n\n // // Called when dragging element changes position\n onChange: function (/*evt: Event*/) {\n // evt.newIndex; // most likely why this event is used is to get the dragging element's current index\n // same properties as onEnd\n },\n });\n\n return () => {\n sortable.destroy();\n };\n});\n\nexport default sortable;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n sortable: typeof sortable;\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport type { SongFile } from 'editor/services/project-manager';\n\nexport default class PlaygroundController extends Controller {\n declare model: { songFile: SongFile };\n\n get song() {\n return this.model.songFile.song!;\n }\n\n @action\n saveSong() {\n const song = this.song;\n const blob = new Blob([song.save()], {\n type: 'application/octet-stream',\n });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = song.name + '.bbs';\n a.click();\n }\n}\n","import Route from '@ember/routing/route';\nimport { service } from '@ember/service';\nimport Drumset from 'editor/models/drumset';\nimport Song from 'editor/models/song';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport {\n DrumsetFile,\n EffectFile,\n SongFile,\n SongFolder,\n} from 'editor/services/project-manager';\nimport type SongPlayerService from 'editor/services/song-player';\n\nexport default class PlaygroundRoute extends Route {\n @service declare projectManager: ProjectManagerService;\n @service declare songPlayer: SongPlayerService;\n\n model() {\n const drumsetPromise = new Promise((resolve) => {\n fetch('/drumset.drm').then((response) => {\n response.arrayBuffer().then((buffer) => {\n const drumset = Drumset.parse(buffer);\n resolve(drumset);\n });\n });\n });\n const songPromise = new Promise((resolve) => {\n fetch('/song.bbs').then((response) => {\n response.arrayBuffer().then((buffer) => {\n const song = Song.parse(buffer, 'Test Song');\n resolve(song);\n });\n });\n });\n const effect1Promise = new Promise((resolve) => {\n fetch('/2E816613.WAV').then((response) => {\n response.arrayBuffer().then((buffer) => {\n const handle: unknown = {\n getFile: () => ({ arrayBuffer: () => buffer }),\n };\n const effectFile = new EffectFile(\n handle,\n 'Bright crash',\n '2E816613.WAV',\n );\n resolve(effectFile);\n });\n });\n });\n const effect2Promise = new Promise((resolve) => {\n fetch('/34A0F081.WAV').then((response) => {\n response.arrayBuffer().then((buffer) => {\n const handle: unknown = {\n getFile: () => ({ arrayBuffer: () => buffer }),\n };\n const effectFile = new EffectFile(\n handle,\n 'Dark crash',\n '34A0F081.WAV',\n );\n resolve(effectFile);\n });\n });\n });\n return Promise.all([\n drumsetPromise,\n songPromise,\n effect1Promise,\n effect2Promise,\n ]).then(([drumset, song, effect1, effect2]) => {\n const df = new DrumsetFile(\n (null),\n 'Standard',\n 'x.drm',\n );\n df.drumset = drumset;\n this.projectManager.drumsets = [df];\n this.projectManager.effects = [effect1, effect2];\n this.songPlayer.song = song;\n const folder = new SongFolder(\n (null),\n 'Test folder',\n 'test',\n );\n const songFile = new SongFile(\n folder,\n (null),\n 'Test song',\n 'test.bbs',\n );\n songFile.song = song;\n return { drumset, songFile };\n });\n }\n\n afterModel({ songFile }: { drumset: Drumset; songFile: SongFile }) {\n const song = songFile.song!;\n song.addPart(song.parts.at(-1));\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport { isDevelopingApp, macroCondition } from '@embroider/macros';\nimport { tracked } from '@glimmer/tracking';\nimport { RenameProjectCommand } from 'editor/models/project-commands';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport { SongFile, SongFolder } from 'editor/services/project-manager';\nimport type UndoManagerService from 'editor/services/undo-manager';\nimport nameFilter from 'editor/utils/name-filter';\n\nfunction waitForSongs(folder: SongFolder): Promise {\n return new Promise((resolve) => {\n const checkSongs = () => {\n if (folder.songs.length > 0) {\n resolve();\n } else {\n setTimeout(checkSongs, 100);\n }\n };\n checkSongs();\n });\n}\n\nexport default class RestrictedController extends Controller {\n @service declare projectManager: ProjectManagerService;\n @service declare undoManager: UndoManagerService;\n @service declare router: RouterService;\n @tracked displayHelpPopup = false;\n\n @tracked showOptionsMenu?: boolean;\n\n nameFilter = nameFilter;\n\n get browserIsSupported() {\n const supportsDirectoryPicker = window.showDirectoryPicker !== undefined;\n const supportsNonDestructiveArrayMethods =\n Array.prototype.toSorted !== undefined;\n return supportsDirectoryPicker && supportsNonDestructiveArrayMethods;\n }\n\n @action\n async sync() {\n await this.projectManager.syncToSDCard();\n }\n\n @action\n async exportAll() {\n await this.projectManager.exportAll();\n }\n\n @action\n async save() {\n await this.projectManager.save();\n }\n\n @action\n async toggleTheme() {\n await this.projectManager.toggleTheme(false);\n }\n\n @action\n showMenu(show: boolean, ev?: MouseEvent) {\n if (this.showOptionsMenu != show) {\n ev?.preventDefault();\n ev?.stopPropagation();\n this.showOptionsMenu = show;\n }\n }\n\n @action\n async importSong() {\n const currentSong = this.projectManager.currentSong;\n const commands = await this.projectManager.importSong();\n if (commands) {\n commands.on('execute', async (results) => {\n const [song] = results;\n if (song instanceof SongFile) {\n this.transitionToSong(song);\n }\n if (song instanceof SongFolder) {\n const folder = song as SongFolder;\n await waitForSongs(folder);\n this.transitionToFolder(song as SongFolder);\n }\n });\n commands.on('reverse', () => {\n if (currentSong) {\n this.transitionToSong(currentSong);\n } else {\n this.router.transitionTo('restricted.songs');\n }\n });\n\n await this.undoManager.executeCommand(commands);\n }\n }\n\n transitionToSong(song: SongFile) {\n if (\n this.router.isActive(\n 'restricted.songs.folder.song',\n song.folder.path,\n song.path,\n )\n ) {\n this.router.refresh('restricted.songs.folder.song');\n } else {\n this.router.transitionTo(\n 'restricted.songs.folder.song',\n song.folder.path,\n song.path,\n );\n }\n }\n\n transitionToFolder(folder: SongFolder) {\n if (this.router.isActive('restricted.songs.folder', folder.path)) {\n this.router.refresh('restricted.songs.folder');\n } else {\n this.router.transitionTo('restricted.songs.folder', folder.path);\n }\n }\n\n @action\n async importDrumset() {\n const command = await this.projectManager.importDrumset();\n if (command) {\n command.on('execute', (drumset) => {\n this.router.transitionTo('restricted.drumsets.drumset', drumset.path);\n });\n command.on('reverse', () => {\n this.router.transitionTo('restricted.drumsets');\n });\n this.undoManager.executeCommand(command);\n }\n }\n\n @action\n async openProject() {\n let handle: FileSystemDirectoryHandle;\n try {\n handle = await window.showDirectoryPicker({\n id: 'open-project',\n startIn: 'documents',\n mode: 'readwrite',\n });\n } catch (err: any) {\n if (err.name === 'AbortError' && /user aborted/i.test(err.message)) {\n return;\n }\n throw err;\n }\n if (await this.projectManager.loadProject(handle)) {\n localStorage.setItem('logs', '');\n const folder =\n this.projectManager.currentFolder ?? this.projectManager.songFolders[0];\n const song = this.projectManager.currentSong ?? folder?.songs[0];\n if (folder && song) {\n this.router.transitionTo(\n 'restricted.songs.folder.song',\n folder.path,\n song.path,\n );\n } else {\n this.router.transitionTo('restricted.songs');\n }\n } else {\n alert('Invalid project');\n }\n }\n\n @action\n async newProject() {\n let projectDirectoryHandle: FileSystemDirectoryHandle;\n try {\n projectDirectoryHandle = await window.showDirectoryPicker({\n id: 'new-project',\n startIn: 'documents',\n });\n\n const entries: FileSystemHandle[] = [];\n for await (const [, entry] of projectDirectoryHandle.entries()) {\n entries.push(entry);\n }\n\n if (entries.length > 0) {\n alert('Please select an empty directory to create a new project in');\n return;\n }\n\n const projectFileHandle = await window.showSaveFilePicker({\n startIn: projectDirectoryHandle,\n suggestedName: 'New Project.bbp',\n types: [\n {\n description: 'Beatbuddy Project',\n accept: {\n 'application/x-beatbuddy-project': ['.bbp'],\n },\n },\n ],\n });\n\n if (!(await projectDirectoryHandle.resolve(projectFileHandle))) {\n alert('Please create a project file within the project directory');\n return;\n }\n await this.projectManager.createProject(\n projectDirectoryHandle,\n projectFileHandle,\n );\n this.router.transitionTo('restricted.songs');\n } catch (err: any) {\n if (err.name === 'AbortError' && /user aborted/i.test(err.message)) {\n return;\n }\n throw err;\n }\n }\n\n @action\n closeProject() {\n if (this.warnIfDirty()) {\n this.projectManager.closeProject();\n this.router.transitionTo('restricted.index');\n }\n }\n\n @action\n warnIfDirty(ev?: BeforeUnloadEvent): boolean {\n if (macroCondition(isDevelopingApp())) {\n // During development, I don’t want to be prompted to save changes when I refresh the page\n return true;\n }\n if (this.projectManager.isDirty) {\n const confirmed = confirm(\n 'You have not saved your changes, are you sure you want to leave this page?\\nClick \"Cancel\" to remain on this page.',\n );\n if (!confirmed) {\n if (ev) {\n ev.preventDefault();\n ev.returnValue = '';\n }\n return false;\n }\n }\n return true;\n }\n\n @action\n toggleHelpPopup(force: boolean) {\n this.displayHelpPopup = force;\n }\n\n @action\n updateProjectName(name: string) {\n if (name.includes('/') || name.includes('\\\\')) {\n alert('Project name cannot contain slashes');\n return;\n }\n if (this.projectManager.projectFile) {\n this.undoManager.executeCommand(\n new RenameProjectCommand(this.projectManager, name),\n );\n }\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport {\n CreateDrumsetCommand,\n DeleteDrumsetCommand,\n DuplicateDrumsetCommand,\n RenameDrumsetCommand,\n SortDrumsetsAlphabeticallyCommand,\n SortDrumsetsCommand,\n} from 'editor/models/drumset-commands';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport type { DrumsetFile } from 'editor/services/project-manager';\nimport type UndoManagerService from 'editor/services/undo-manager';\nimport nameFilter from 'editor/utils/name-filter';\nimport wait from 'editor/utils/wait';\n\nexport default class RestrictedDrumsetsController extends Controller {\n @service declare router: RouterService;\n @service declare projectManager: ProjectManagerService;\n @service declare undoManager: UndoManagerService;\n\n nameFilter = nameFilter;\n @tracked menuDrumset?: DrumsetFile;\n @tracked ignoreNextClickOutside: boolean = false;\n\n get drumsets() {\n return this.projectManager.drumsets;\n }\n\n get selectedDrumset() {\n return this.projectManager.currentDrumset;\n }\n\n get currentProject() {\n return this.projectManager.currentProject!;\n }\n\n @action\n showMenuFor(drumset: DrumsetFile | undefined, ev?: MouseEvent) {\n if (!drumset && this.ignoreNextClickOutside) {\n this.ignoreNextClickOutside = false;\n return;\n }\n if (this.menuDrumset != drumset) {\n ev?.preventDefault();\n ev?.stopPropagation();\n if (this.menuDrumset && drumset) {\n this.ignoreNextClickOutside = true;\n }\n this.menuDrumset = drumset;\n }\n if (!drumset) {\n this.menuDrumset = undefined;\n return;\n }\n }\n\n @action\n shouldShowMenuFor(drumset: DrumsetFile) {\n return this.menuDrumset === drumset;\n }\n\n @action\n sortDrumsets(oldIndex: number, newIndex: number) {\n this.undoManager.executeCommand(\n new SortDrumsetsCommand(this.projectManager, oldIndex, newIndex),\n );\n }\n\n @action\n renameDrumset(drumset: DrumsetFile, name: string) {\n if (name !== drumset.name) {\n this.undoManager.executeCommand(new RenameDrumsetCommand(drumset, name));\n }\n }\n\n @action\n selectDrumset(drumset: DrumsetFile) {\n this.router.transitionTo('restricted.drumsets.drumset', drumset.path);\n }\n\n @action\n addDrumset() {\n const command = new CreateDrumsetCommand(this.projectManager);\n const previousDrumset = this.projectManager.currentDrumset;\n command.on('execute', (drumset) =>\n this.router.transitionTo('restricted.drumsets.drumset', drumset.path),\n );\n command.on('reverse', () => {\n this.projectManager.currentDrumset = previousDrumset;\n this.router.transitionTo('restricted.drumsets.index');\n });\n this.undoManager.executeCommand(command);\n }\n\n @action\n sortDrumsetsAlphabetically() {\n this.undoManager.executeCommand(\n new SortDrumsetsAlphabeticallyCommand(this.projectManager),\n );\n }\n\n @action\n deleteDrumset(drumset: DrumsetFile) {\n const command = new DeleteDrumsetCommand(this.projectManager, drumset);\n command.on('execute', () => {\n this.router.transitionTo('restricted.drumsets.index');\n });\n command.on('reverse', (drumset) => {\n this.router.transitionTo('restricted.drumsets.drumset', drumset.path);\n });\n this.undoManager.executeCommand(command);\n }\n\n @action\n async duplicateDrumset(drumset: DrumsetFile, ev?: MouseEvent) {\n ev?.stopPropagation();\n await wait(async () => {\n const command = new DuplicateDrumsetCommand(this.projectManager, drumset);\n command.on('execute', (drumset) => {\n this.router.transitionTo('restricted.drumsets.drumset', drumset.path);\n });\n command.on('reverse', (drumset) => {\n this.router.transitionTo('restricted.drumsets.drumset', drumset.path);\n });\n try {\n await this.undoManager.executeCommand(command);\n } catch (err: any) {\n alert(`Error duplicating drumset`);\n throw err;\n }\n });\n }\n\n @action\n exportDrumset(drumset: DrumsetFile) {\n this.projectManager.exportDrumset(drumset);\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { RenameDrumsetCommand } from 'editor/models/drumset-commands';\nimport type { DrumsetFile } from 'editor/services/project-manager';\nimport type UndoManagerService from 'editor/services/undo-manager';\n\nexport default class RestrictedDrumsetsDrumsetController extends Controller {\n @service declare undoManager: UndoManagerService;\n\n declare model: DrumsetFile;\n\n get drumset() {\n return this.model.drumset!;\n }\n\n @action\n renameDrumset(name: string) {\n if (name !== this.model.name) {\n this.undoManager.executeCommand(\n new RenameDrumsetCommand(this.model, name),\n );\n }\n }\n}\n","import Route from '@ember/routing/route';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport type { DrumsetFile } from 'editor/services/project-manager';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport type SongPlayerService from 'editor/services/song-player';\nimport type StatusService from 'editor/services/status';\n\nexport default class RestrictedDrumsetsDrumsetRoute extends Route {\n @service declare projectManager: ProjectManagerService;\n @service declare songPlayer: SongPlayerService;\n @service declare status: StatusService;\n @service declare router: RouterService;\n\n model({ drumset }: { drumset: string }) {\n const drumsetFile = this.projectManager.findDrumset(drumset);\n this.projectManager.currentDrumset = drumsetFile;\n return drumsetFile;\n }\n\n async afterModel(model?: DrumsetFile) {\n if (model) {\n this.projectManager.currentDrumset = model;\n await model.parse();\n this.status.addDrumsetInfo(model);\n model.drumset?.prepareAudio(this.songPlayer.audioContext);\n } else {\n this.router.transitionTo('restricted.drumsets');\n }\n }\n}\n","import Route from '@ember/routing/route';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport type ProjectManagerService from 'editor/services/project-manager';\n\nexport default class RestrictedDrumsetsIndexRoute extends Route {\n @service declare router: RouterService;\n @service declare projectManager: ProjectManagerService;\n\n beforeModel() {\n const drumsetFile =\n this.projectManager.currentDrumset ?? this.projectManager.drumsets.at(0);\n if (drumsetFile) {\n this.router.transitionTo('restricted.drumsets.drumset', drumsetFile.path);\n }\n }\n}\n","import Route from '@ember/routing/route';\nimport type RouterService from '@ember/routing/router-service';\nimport type Transition from '@ember/routing/transition';\nimport { service } from '@ember/service';\nimport type ProjectManagerService from 'editor/services/project-manager';\n\nexport default class RestrictedDrumsetsRoute extends Route {\n @service declare projectManager: ProjectManagerService;\n @service declare router: RouterService;\n\n beforeModel(transition: Transition) {\n if (!this.projectManager.currentProject) {\n this.projectManager.transition = transition;\n this.router.transitionTo('restricted');\n }\n }\n}\n","import Route from '@ember/routing/route';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport type ProjectManagerService from 'editor/services/project-manager';\n\nexport default class RestrictedIndexRoute extends Route {\n @service declare projectManager: ProjectManagerService;\n @service declare router: RouterService;\n\n afterModel() {\n if (this.projectManager.currentProject) {\n this.router.transitionTo('restricted.songs');\n }\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport {\n AddPlaylistCommand,\n DeletePlaylistCommand,\n DuplicatePlaylistCommand,\n RenamePlaylistCommand,\n SortPlaylistsCommand,\n} from 'editor/models/playlist-commands';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport type { Playlist } from 'editor/services/project-manager';\nimport type UndoManagerService from 'editor/services/undo-manager';\nimport nameFilter from 'editor/utils/name-filter';\nimport wait from 'editor/utils/wait';\n\nexport default class RestrictedPlaylistsController extends Controller {\n @service declare router: RouterService;\n @service declare projectManager: ProjectManagerService;\n @service declare undoManager: UndoManagerService;\n\n @tracked menuPlaylist?: Playlist;\n @tracked ignoreNextClickOutside: boolean = false;\n\n nameFilter = nameFilter;\n\n get playlists() {\n return this.projectManager.playlists;\n }\n\n get currentProject() {\n return this.projectManager.currentProject!;\n }\n\n @action\n isSelected(playlist: Playlist) {\n return playlist === this.projectManager.currentPlaylist;\n }\n\n @action\n selectPlaylist(playlist: Playlist) {\n this.router.transitionTo('restricted.playlists.playlist', playlist.id);\n }\n\n @action\n songsForPlaylist(playlist: Playlist) {\n return this.projectManager.songsForPlaylist(playlist);\n }\n\n @action\n createPlaylist() {\n this.undoManager.executeCommand(\n new AddPlaylistCommand(this.projectManager),\n );\n }\n\n @action\n sortPlaylists(oldIndex: number, newIndex: number) {\n this.undoManager.executeCommand(\n new SortPlaylistsCommand(this.projectManager, oldIndex, newIndex),\n );\n }\n\n @action\n renamePlaylist(playlist: Playlist, name: string) {\n this.undoManager.executeCommand(new RenamePlaylistCommand(playlist, name));\n }\n\n @action\n showMenuFor(playlist: Playlist | undefined, ev?: MouseEvent) {\n if (!playlist && this.ignoreNextClickOutside) {\n this.ignoreNextClickOutside = false;\n return;\n }\n if (this.menuPlaylist != playlist) {\n ev?.preventDefault();\n ev?.stopPropagation();\n if (this.menuPlaylist && playlist) {\n this.ignoreNextClickOutside = true;\n }\n this.menuPlaylist = playlist;\n }\n if (!playlist) {\n this.menuPlaylist = undefined;\n return;\n }\n }\n\n @action\n shouldShowMenuFor(playlist: Playlist) {\n return this.menuPlaylist === playlist;\n }\n\n @action\n deletePlaylist(playlist: Playlist) {\n const command = new DeletePlaylistCommand(this.projectManager, playlist);\n command.on('execute', () => {\n this.router.transitionTo('restricted.playlists.index');\n });\n command.on('reverse', (playlist) => {\n this.router.transitionTo('restricted.playlists.playlist', playlist.path);\n });\n this.undoManager.executeCommand(command);\n }\n\n @action\n async duplicatePlaylist(playlist: Playlist, ev?: MouseEvent) {\n ev?.stopPropagation();\n await wait(async () => {\n const command = new DuplicatePlaylistCommand(\n this.projectManager,\n playlist,\n );\n command.on('execute', (playlist) => {\n this.router.transitionTo('restricted.playlists.playlist', playlist.id);\n });\n command.on('reverse', (playlist) => {\n this.router.transitionTo('restricted.playlists.playlist', playlist.id);\n });\n try {\n await this.undoManager.executeCommand(command);\n } catch (err: any) {\n alert(`Error duplicating playlist`);\n throw err;\n }\n });\n }\n}\n","import Route from '@ember/routing/route';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport type ProjectManagerService from 'editor/services/project-manager';\n\nexport default class RestrictedPlaylistsIndexRoute extends Route {\n @service declare projectManager: ProjectManagerService;\n @service declare router: RouterService;\n\n beforeModel() {\n if (this.projectManager.currentPlaylist) {\n this.router.transitionTo(\n 'restricted.playlists.playlist',\n this.projectManager.currentPlaylist.id,\n );\n } else {\n if (this.projectManager.playlists.length > 0) {\n this.router.transitionTo(\n 'restricted.playlists.playlist',\n this.projectManager.playlists[0]!.id,\n );\n }\n }\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport { next } from '@ember/runloop';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport {\n AddSongToPlaylistCommand,\n RemoveSongFromPlaylistCommand,\n SortPlaylistCommand,\n} from 'editor/models/playlist-commands';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport {\n Playlist,\n SongFile,\n SongReference,\n} from 'editor/services/project-manager';\nimport type UndoManagerService from 'editor/services/undo-manager';\n\nexport default class RestrictedPlaylistsPlaylistController extends Controller {\n @service declare undoManager: UndoManagerService;\n @service declare projectManager: ProjectManagerService;\n\n declare model: Playlist;\n @tracked menuSong?: SongReference;\n @tracked currentSongRef?: SongReference;\n @tracked currentSong?: SongFile;\n @tracked ignoreNextClickOutside: boolean = false;\n\n get playlist() {\n return this.model;\n }\n\n get folders() {\n return this.projectManager.songFolders;\n }\n\n @action\n async addSong(song: SongFile) {\n this.currentSongRef = await this.undoManager.executeCommand(\n new AddSongToPlaylistCommand(this.playlist, song),\n );\n }\n\n @action\n async duplicateSong(song: SongReference) {\n this.currentSongRef = await this.undoManager.executeCommand(\n new AddSongToPlaylistCommand(this.playlist, song.song),\n );\n }\n\n @action\n async dragSongToPlaylist(\n fromElement: HTMLElement,\n fromIndex: number,\n _toElement: HTMLElement,\n toIndex: number,\n ) {\n const folderFromIndex = parseInt(fromElement.dataset['folderIndex']!);\n const fromFolder = this.folders[folderFromIndex]!;\n const song = fromFolder.songs[fromIndex];\n if (song) {\n this.currentSongRef = await this.undoManager.executeCommand(\n new AddSongToPlaylistCommand(this.playlist, song, toIndex),\n );\n }\n }\n\n @action\n removeSong(song: SongReference) {\n this.undoManager.executeCommand(\n new RemoveSongFromPlaylistCommand(this.playlist, song),\n );\n }\n\n @action\n removeSelectedSong() {\n if (this.selectedSongRef) {\n this.removeSong(this.selectedSongRef);\n }\n }\n\n @action\n sortPlaylist(oldIndex: number, newIndex: number) {\n // eslint-disable-next-line ember/no-runloop\n next(() => {\n this.undoManager.executeCommand(\n new SortPlaylistCommand(this.playlist, oldIndex, newIndex),\n );\n });\n }\n\n @tracked selectedSongRef?: SongReference;\n @action\n selectSong(songRef?: SongReference) {\n this.selectedSongRef = songRef;\n this.projectManager.currentSong = songRef?.song;\n }\n\n @action\n shouldShowMenuFor(item: SongReference) {\n return this.menuSong === item;\n }\n\n @action\n showMenuFor(item: SongReference | undefined, ev?: MouseEvent) {\n if (!item && this.ignoreNextClickOutside) {\n this.ignoreNextClickOutside = false;\n return;\n }\n if (item && this.menuSong != item) {\n ev?.preventDefault();\n ev?.stopPropagation();\n if (this.menuSong && item) {\n this.ignoreNextClickOutside = true;\n }\n }\n if (!item) {\n this.menuSong = undefined;\n return;\n }\n if (item instanceof SongReference) {\n this.menuSong = item;\n }\n }\n}\n","import Route from '@ember/routing/route';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport type { Playlist } from 'editor/services/project-manager';\nimport type ProjectManagerService from 'editor/services/project-manager';\n\nexport default class RestrictedPlaylistsPlaylistRoute extends Route {\n @service declare projectManager: ProjectManagerService;\n @service declare router: RouterService;\n\n model({ playlist: playlistId }: { playlist: string }) {\n const playlist = this.projectManager.playlists.find(\n (p) => p.id === playlistId,\n );\n this.projectManager.currentPlaylist = playlist;\n return playlist;\n }\n\n afterModel(model: Playlist) {\n if (!model) {\n this.router.transitionTo('restricted.playlists');\n }\n }\n}\n","import Route from '@ember/routing/route';\nimport type RouterService from '@ember/routing/router-service';\nimport type Transition from '@ember/routing/transition';\nimport { service } from '@ember/service';\nimport type ProjectManagerService from 'editor/services/project-manager';\n\nexport default class RestrictedPlaylistsRoute extends Route {\n @service declare projectManager: ProjectManagerService;\n @service declare router: RouterService;\n\n beforeModel(transition: Transition) {\n if (!this.projectManager.currentProject) {\n this.projectManager.transition = transition;\n this.router.transitionTo('restricted');\n }\n }\n}\n","import Route from '@ember/routing/route';\n\nexport default class RestrictedRoute extends Route {}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport type RouterService from '@ember/routing/router-service';\nimport { next } from '@ember/runloop';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport {\n AddFolderCommand,\n MoveSongCommand,\n SortFoldersCommand,\n SortFoldersSongsAlphabeticallyCommand,\n} from 'editor/models/folder-commands';\nimport { AddNewSongCommand } from 'editor/models/song-commands';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport { SongFile, SongFolder } from 'editor/services/project-manager';\nimport type UndoManagerService from 'editor/services/undo-manager';\n\nexport default class RestrictedSongsController extends Controller {\n @service declare router: RouterService;\n @service declare projectManager: ProjectManagerService;\n @service declare undoManager: UndoManagerService;\n declare model: SongFolder[];\n\n @tracked filterText = '';\n\n get folder() {\n return this.projectManager.currentFolder;\n }\n\n get song() {\n return this.projectManager.currentSong;\n }\n\n get folders() {\n return this.projectManager.songFolders;\n }\n\n get sortMethod() {\n return this.projectManager.sortMethod;\n }\n\n @action\n async updateFilter(event: Event) {\n this.filterText = (event.target as HTMLInputElement).value;\n }\n\n get filter() {\n if (this.filterText.length >= 2) {\n return this.filterText;\n } else {\n return '';\n }\n }\n\n @action\n clearFilter() {\n this.filterText = '';\n }\n\n @action\n selectSong(folder: SongFolder, song: SongFile) {\n this.router.transitionTo(\n 'restricted.songs.folder.song',\n folder.path,\n song.path,\n );\n }\n\n @action\n sortFolders(oldIndex: number, newIndex: number) {\n this.undoManager.executeCommand(\n new SortFoldersCommand(this.projectManager, oldIndex, newIndex),\n );\n }\n\n @action\n isSelected(folder: SongFolder) {\n return this.folder == folder;\n }\n\n @action\n async addFolder() {\n const folder = await this.undoManager.executeCommand(\n new AddFolderCommand(this.projectManager),\n );\n this.router.transitionTo('restricted.songs.folder', folder.path);\n }\n\n @action\n async addSong(folder?: SongFolder) {\n folder = folder ?? this.folder;\n if (!folder) {\n return;\n }\n const command = new AddNewSongCommand(this.projectManager, folder);\n command.on('execute', (song) => {\n this.router.transitionTo('restricted.songs.folder.song', song.path);\n });\n await this.undoManager.executeCommand(command);\n }\n\n @action\n async importSong(folder?: SongFolder) {\n folder = folder ?? this.folder;\n if (!folder) {\n return;\n }\n const commands = await this.projectManager.importSong(folder);\n if (commands) {\n commands.on('execute', async (results) => {\n const [song] = results;\n if (song instanceof SongFile) {\n this.router.transitionTo(\n 'restricted.songs.folder.song',\n song.folder.path,\n song.path,\n );\n }\n });\n commands.on('reverse', () => {\n this.projectManager.currentFolder = undefined;\n this.router.transitionTo('restricted.songs.index');\n });\n\n await this.undoManager.executeCommand(commands);\n }\n }\n\n @action\n moveSong(\n fromElement: HTMLElement,\n fromIndex: number,\n toElement: HTMLElement,\n toIndex: number,\n ) {\n // eslint-disable-next-line ember/no-runloop\n next(() => {\n const folderFromIndex = parseInt(fromElement.dataset['folderIndex']!);\n const folderToIndex = parseInt(toElement.dataset['folderIndex']!);\n const fromFolder = this.folders[folderFromIndex]!;\n const toFolder = this.folders[folderToIndex]!;\n this.undoManager.executeCommand(\n new MoveSongCommand(fromFolder, fromIndex, toFolder, toIndex),\n );\n });\n }\n\n @action\n sortFoldersSongsAlphabetically() {\n switch (this.sortMethod) {\n case 'none':\n this.projectManager.sortMethod = 'AtoZ';\n break;\n case 'AtoZ':\n this.projectManager.sortMethod = 'ZtoA';\n break;\n case 'ZtoA':\n this.projectManager.sortMethod = 'AtoZ';\n break;\n default:\n this.projectManager.sortMethod = 'none';\n break;\n }\n const command = new SortFoldersSongsAlphabeticallyCommand(\n this.projectManager,\n );\n const song = this.projectManager.currentSong;\n command.on('execute', () => {\n if (song) {\n this.router.transitionTo(\n 'restricted.songs.folder.song',\n song.folder.path,\n song.path,\n );\n }\n });\n this.undoManager.executeCommand(command);\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport { AddNewSongCommand } from 'editor/models/song-commands';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport { SongFile, type SongFolder } from 'editor/services/project-manager';\nimport type UndoManagerService from 'editor/services/undo-manager';\n\nexport default class RestrictedSongsFolderIndexController extends Controller {\n @service declare projectManager: ProjectManagerService;\n @service declare router: RouterService;\n @service declare undoManager: UndoManagerService;\n declare model: SongFolder;\n\n get folder() {\n return this.model;\n }\n\n @action\n async addSong() {\n const command = new AddNewSongCommand(this.projectManager, this.folder);\n command.on('execute', (song) => {\n this.router.transitionTo('restricted.songs.folder.song', song.path);\n });\n await this.undoManager.executeCommand(command);\n }\n\n @action\n async importSong() {\n const commands = await this.projectManager.importSong(this.folder);\n if (commands) {\n commands.on('execute', async (results) => {\n const [song] = results;\n if (song instanceof SongFile) {\n this.router.transitionTo(\n 'restricted.songs.folder.song',\n song.folder.path,\n song.path,\n );\n }\n });\n commands.on('reverse', () => {\n this.projectManager.currentFolder = undefined;\n this.router.transitionTo('restricted.songs.index');\n });\n\n await this.undoManager.executeCommand(commands);\n }\n }\n}\n","import Route from '@ember/routing/route';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport type ProjectManagerService from 'editor/services/project-manager';\n\nexport default class RestrictedSongsFolderIndexRoute extends Route {\n @service declare projectManager: ProjectManagerService;\n @service declare router: RouterService;\n\n beforeModel() {\n const folder =\n this.projectManager.currentFolder ?? this.projectManager.songFolders[0];\n if (folder) {\n const song = this.projectManager.findSong(folder);\n if (folder && song) {\n this.router.transitionTo(\n 'restricted.songs.folder.song',\n folder.path,\n song.path,\n );\n }\n }\n }\n}\n","import Route from '@ember/routing/route';\nimport type RouterService from '@ember/routing/router-service';\nimport type Transition from '@ember/routing/transition';\nimport { service } from '@ember/service';\nimport { SongFolder } from 'editor/services/project-manager';\nimport ProjectManagerService from 'editor/services/project-manager';\n\nexport default class RestrictedSongsFolderRoute extends Route {\n @service declare projectManager: ProjectManagerService;\n @service declare router: RouterService;\n\n constructor(properties?: object) {\n super(properties);\n this.projectManager.on('removeFolder', (folder) => {\n const model = this.modelFor(this.routeName);\n if (model === folder) {\n this.router.transitionTo('restricted.songs');\n }\n });\n }\n\n beforeModel(transition: Transition) {\n if (this.projectManager.drumsets.length === 0) {\n this.router.transitionTo('restricted.songs');\n }\n }\n\n model({ folder: folderId }: { folder: string }) {\n const folder = this.projectManager.findFolder(folderId);\n this.projectManager.currentFolder = folder;\n this.projectManager.currentSong = undefined;\n return folder;\n }\n\n afterModel(model: SongFolder) {\n if (!model) {\n this.router.transitionTo('restricted.songs');\n }\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport type { SongFile } from 'editor/services/project-manager';\n\nexport default class RestrictedSongsFolderSongController extends Controller {\n @service declare projectManager: ProjectManagerService;\n\n declare model: SongFile;\n\n get song() {\n return this.model.song!;\n }\n\n @action\n async saveSong() {\n await this.projectManager.save();\n }\n}\n","import Route from '@ember/routing/route';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport type { SongFile, SongFolder } from 'editor/services/project-manager';\nimport type SongPlayerService from 'editor/services/song-player';\nimport type StatusService from 'editor/services/status';\n\nexport default class RestrictedSongsFolderSongRoute extends Route {\n @service declare router: RouterService;\n @service declare projectManager: ProjectManagerService;\n @service declare songPlayer: SongPlayerService;\n @service declare status: StatusService;\n\n constructor(properties?: object) {\n super(properties);\n this.projectManager.on('removeSong', (folder, song) => {\n const model = this.modelFor(this.routeName);\n if (model === song) {\n this.router.transitionTo('restricted.songs.folder', folder.id);\n }\n });\n }\n\n async model({ song }: { song: string }) {\n const folder = this.modelFor('restricted.songs.folder');\n const songFile = folder?.findSong(song);\n if (songFile) {\n this.projectManager.currentSong = songFile;\n\n try {\n await songFile.parse();\n } catch (err) {\n alert(`Error reading song: ${songFile.folder.name}/${songFile.name}`);\n this.projectManager.addSongError(songFile);\n this.router.transitionTo('restricted.songs.folder', folder.id);\n }\n const song = songFile.song!;\n const drumset = this.projectManager.findDrumset(song.drumset);\n await drumset.parse();\n this.songPlayer.song = song;\n return songFile;\n }\n }\n\n afterModel(model: SongFile) {\n if (!model) {\n this.router.transitionTo('restricted.songs');\n return;\n }\n this.status.addSongMidiInfo(model);\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport type ProjectManagerService from 'editor/services/project-manager';\nimport type UndoManagerService from 'editor/services/undo-manager';\n\nexport default class RestrictedSongsIndexController extends Controller {\n @service declare projectManager: ProjectManagerService;\n @service declare undoManager: UndoManagerService;\n @service declare router: RouterService;\n\n @action\n async importDrumset() {\n const command = await this.projectManager.importDrumset();\n if (command) {\n command.on('execute', (drumset) => {\n this.router.transitionTo('restricted.drumsets.drumset', drumset.path);\n });\n command.on('reverse', () => {\n this.router.transitionTo('restricted.drumsets');\n });\n this.undoManager.executeCommand(command);\n }\n }\n}\n","import Route from '@ember/routing/route';\nimport type RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport type ProjectManagerService from 'editor/services/project-manager';\n\nexport default class RestrictedSongsIndexRoute extends Route {\n @service declare projectManager: ProjectManagerService;\n @service declare router: RouterService;\n\n beforeModel() {\n if (this.projectManager.drumsets.length > 0) {\n const folder =\n this.projectManager.currentFolder ?? this.projectManager.songFolders[0];\n const song = this.projectManager.currentSong ?? folder?.songs[0];\n if (folder && song) {\n this.router.transitionTo(\n 'restricted.songs.folder.song',\n folder.path,\n song.path,\n );\n }\n }\n }\n}\n","import Route from '@ember/routing/route';\nimport type RouterService from '@ember/routing/router-service';\nimport type Transition from '@ember/routing/transition';\nimport { service } from '@ember/service';\nimport type ProjectManagerService from 'editor/services/project-manager';\n\nexport default class RestrictedSongsRoute extends Route {\n @service declare projectManager: ProjectManagerService;\n @service declare router: RouterService;\n\n beforeModel(transition: Transition) {\n if (!this.projectManager.currentProject) {\n this.projectManager.transition = transition;\n this.router.transitionTo('restricted');\n }\n }\n}\n","import EmberRouter from '@ember/routing/router';\nimport config from 'editor/config/environment';\n\nexport default class Router extends EmberRouter {\n location = config.locationType;\n rootURL = config.rootURL;\n}\n\nRouter.map(function () {\n this.route('restricted', { path: '/' }, function () {\n this.route('songs', function () {\n this.route('folder', { path: ':folder' }, function () {\n this.route('song', { path: ':song' });\n });\n });\n this.route('playlists', function () {\n this.route('playlist', { path: ':playlist' });\n });\n this.route('drumsets', function () {\n this.route('drumset', { path: ':drumset' });\n });\n });\n this.route('playground');\n});\n","import Service from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class PasteboardService extends Service {\n pastboards: Map = new Map();\n // A hack to force reactivity on the map\n @tracked counter = 0;\n\n store(key: string, value: any) {\n this.counter += 1;\n this.pastboards.set(key, value);\n }\n\n retrieve(key: string) {\n if (this.counter > 0) {\n return this.pastboards.get(key);\n }\n }\n\n hasCopy(key: string) {\n if (this.counter > 0) {\n return this.pastboards.has(key);\n }\n }\n}\n\ndeclare module '@ember/service' {\n interface Registry {\n pasteboard: PasteboardService;\n }\n}\n","import { action } from '@ember/object';\nimport Service from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport shuffle from 'editor/utils/shuffle';\n\nconst WAITING_PHRASES = [\n 'Busy tuning up my air guitar.',\n 'Trying to remember the lyrics to “Happy Birthday”.',\n 'Figuring out “Stairway to Heaven” on my kazoo.',\n 'Wondering if I should wear sunglasses at night.',\n 'Wondering if I left my drumsticks at home.',\n 'At this rate, I’ll have enough time to learn a new instrument... or two.',\n 'Pondering whether it would just be faster to learn to play the drums.',\n 'Composing a tune called the “The Waiting Around Blues” in my head.',\n 'If only inspiration struck as often as boredom does.',\n 'Playing “Name That Tune” with the music in my head.',\n 'If patience is a virtue, consider me a virtuoso.',\n 'Time slows down for musicians waiting to play.',\n 'Feeling like a permanent fixture in the green room.',\n 'I’m not waiting to play. I’m waiting to rock!',\n 'Waiting for my big break.',\n 'If only twiddling my thumbs made music.',\n 'Waiting for my moment in the spotlight.',\n 'Rearranging my home studio while I wait.',\n];\n\nexport default class ProgressService extends Service {\n @tracked progress = 0;\n @tracked total = 0;\n @tracked showProgress = false;\n @tracked waitingPhrase: string;\n showProgressTimer?: ReturnType;\n changePhrasesTimer?: ReturnType;\n\n constructor(properties?: object) {\n super(properties);\n this.reset();\n this.waitingPhrase = WAITING_PHRASES[0]!;\n }\n\n @action\n test() {\n setTimeout(() => {\n this.completeWork(1);\n if (!this.isComplete) {\n this.test();\n }\n }, 100);\n }\n\n get percentage() {\n return Math.floor((this.progress / this.total) * 100);\n }\n\n get isComplete() {\n return this.progress === this.total;\n }\n\n reset() {\n this.progress = 0;\n this.total = 0;\n this.showProgressTimer = undefined;\n shuffle(WAITING_PHRASES);\n }\n\n addWork(count = 1) {\n this.total += count;\n if (!this.showProgressTimer) {\n this.showProgressTimer = setTimeout(() => {\n this.showProgress = true;\n this.changePhrasesTimer = setInterval(\n () => this.updateFunnyPhrase(),\n 8000,\n );\n }, 500);\n }\n }\n\n // Get the first phrase, and add it to the back of the array\n updateFunnyPhrase() {\n this.waitingPhrase = WAITING_PHRASES.shift()!;\n WAITING_PHRASES.push(this.waitingPhrase);\n }\n\n completeWork(count = 1) {\n this.progress += count;\n if (this.isComplete) {\n this.showProgress = false;\n if (this.showProgressTimer) {\n clearTimeout(this.showProgressTimer);\n clearInterval(this.changePhrasesTimer);\n this.showProgressTimer = undefined;\n this.changePhrasesTimer = undefined;\n }\n }\n }\n\n async trackPromises(promises: Promise[]) {\n this.addWork(promises.length);\n promises.forEach((promise) => {\n promise.finally(() => {\n this.completeWork();\n });\n });\n const results = await Promise.allSettled(promises);\n return results.map((result) => {\n if (result.status === 'rejected') {\n throw result.reason;\n } else {\n return result.value;\n }\n });\n }\n}\n\ndeclare module '@ember/service' {\n interface Registry {\n progress: ProgressService;\n }\n}\n","// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n ], { type: 'text/javascript' }))));\n w.onmessage = function (e) {\n var d = e.data, ed = d.$e$;\n if (ed) {\n var err = new Error(ed[0]);\n err['code'] = ed[1];\n err.stack = ed[2];\n cb(err, null);\n }\n else\n cb(null, d);\n };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n ,\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) {\n if (ev.data.length) {\n strm.push(ev.data[0], ev.data[1]);\n postMessage([ev.data[0].length]);\n }\n else\n strm.flush();\n };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else if (dat.length == 1) {\n strm.queuedSize -= dat[0];\n if (strm.ondrain)\n strm.ondrain(dat[0]);\n }\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.queuedSize = 0;\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n strm.queuedSize += d.length;\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n if (flush) {\n strm.flush = function () { w.postMessage([]); };\n }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * deflated output for small inputs.\n */\n Deflate.prototype.flush = function () {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n this.p(this.b, false);\n this.s.w = this.s.i, this.s.i -= 2;\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6, 1);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7, 0);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * GZIPped output for small inputs.\n */\n Gzip.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8, 1);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n // process concatenated GZIP\n if (this.s.f && !this.s.l && !final) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * zlibbed output for small inputs.\n */\n Zlib.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10, 1);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11, 0);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.o = StrmOpt.call(this, opts, cb) || {};\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n }\n // init substream\n // overriden by AsyncDecompress\n Decompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (dat, final) {\n _this.ondata(dat, final);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o)\n : new this.Z(this.o);\n this.i();\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n Decompress.call(this, opts, cb);\n this.queuedSize = 0;\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n }\n AsyncDecompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (err, dat, final) {\n _this.ondata(err, dat, final);\n };\n this.s.ondrain = function (size) {\n _this.queuedSize -= size;\n if (_this.ondrain)\n _this.ondrain(size);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n this.queuedSize += chunk.length;\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (val instanceof u8)\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this.ondata(err, dat, final);\n _this.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this.d & 1))\n return;\n _this.u.splice(-1, 1);\n _this.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (data, final) {\n this.ondata(null, data, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this = this;\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (data, final) {\n try {\n this.i.push(data, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (data, final) {\n if (this.i.terminate)\n data = slc(data, 0);\n this.i.push(data, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var _a;\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n if (sc_1 == 4294967295) {\n _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n }\n else if (dd)\n sc_1 = -1;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this.k[0] == chks_3 && _this.c)\n _this.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n // Synchronously decompress under 512KB, or barely-compressed data\n if (su < 524288 || sc > 0.8 * su) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\n}\n","import { assert } from '@ember/debug';\nimport type Transition from '@ember/routing/transition';\nimport Service, { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport Command, { CompositeCommand } from 'editor/models/command';\nimport Drumset, { Instrument } from 'editor/models/drumset';\nimport { AddDrumsetCommand } from 'editor/models/drumset-commands';\nimport { AddFolderCommand } from 'editor/models/folder-commands';\nimport Song from 'editor/models/song';\nimport {\n AddEffectCommand,\n AddSongCommand,\n DeleteSongCommand,\n} from 'editor/models/song-commands';\nimport Crc32 from 'editor/utils/crc32';\nimport elementExists from 'editor/utils/element-exists';\nimport promiseBatch from 'editor/utils/promise-batch';\nimport Reader from 'editor/utils/reader';\nimport unique from 'editor/utils/unique';\nimport wait from 'editor/utils/wait';\nimport Writer from 'editor/utils/writer';\nimport { strToU8, unzipSync, zipSync, type Zippable } from 'fflate';\nimport { createNanoEvents, type Emitter } from 'nanoevents';\nimport type ProgressService from './progress';\nimport UndoManagerService from './undo-manager';\n\nconst MAX_PLAYLISTS = 17;\nconst STRIP_NUMBER_REGEX = /\\d+\\.\\s+(.+)/;\n\nexport class ProjectEntry {\n handle: FileSystemHandle;\n @tracked _name: string;\n path: string;\n changed = false;\n\n constructor(handle: FileSystemHandle, name: string, path: string) {\n this.handle = handle;\n this._name = name;\n this.path = path;\n }\n\n get id() {\n return this.path;\n }\n\n get name() {\n return this._name;\n }\n\n set name(name: string) {\n this._name = name;\n }\n\n get isDirty() {\n return this.changed;\n }\n\n markDirty() {\n this.changed = true;\n }\n\n markClean() {\n this.changed = false;\n }\n}\n\nexport class ProjectFile extends ProjectEntry {\n handle: FileSystemFileHandle;\n version: number = 1;\n revision: number = 0;\n build: number = 0x1641;\n hash?: string;\n\n constructor(handle: FileSystemFileHandle, name: string, path: string) {\n super(handle, name, path);\n this.handle = handle;\n }\n\n async parse() {\n const file = await this.handle.getFile();\n const xml = await file.text();\n this.hash = await sha256hash(new TextEncoder().encode(xml));\n return this.parseProjectFile(xml);\n }\n\n async save(saveTo?: FileSystemFileHandle) {\n const handle = saveTo ?? this.handle;\n\n if (await saveTo?.isSameEntry(this.handle)) {\n if (!this.changed) {\n return;\n }\n }\n\n const file = await handle.createWritable();\n file.write(\n `\\n`,\n );\n file.close();\n }\n\n parseProjectFile(xml: string) {\n const isProjectXML = //i.test(xml);\n if (isProjectXML) {\n let result = / song.isDirty);\n }\n\n markClean(): void {\n this.changed = false;\n this.songs.forEach((song) => song.markClean());\n }\n\n async addSong(song: SongFile, index?: number) {\n if (this.songs.length >= 128) {\n throw new Error('Cannot have more than 128 songs in a folder');\n }\n const existingHandle = song.handle;\n if (await fileExists(this.handle, song.path)) {\n const path = await createNewPathName(this.handle, '.BBS');\n song.path = path;\n }\n song.handle = await this.handle.getFileHandle(song.path, {\n create: true,\n });\n await copyFile(existingHandle, song.handle);\n if (typeof index === 'number') {\n this.songs = this.songs.toSpliced(index, 0, song);\n } else {\n this.songs = [...this.songs, song];\n }\n song.folder = this;\n }\n\n findSong(path: string) {\n return this.songs.find((song) => song.path === path);\n }\n\n async removeSong(index: number) {\n const song = this.songs[index];\n if (song) {\n this.songs = this.songs.toSpliced(index, 1);\n return song;\n }\n return undefined;\n }\n}\n\nexport class SongFile extends ProjectEntry {\n handle: FileSystemFileHandle;\n folder: SongFolder;\n #song?: Song;\n hash?: string;\n\n constructor(\n folder: SongFolder,\n handle: FileSystemFileHandle,\n name: string,\n path: string,\n ) {\n super(handle, name, path);\n this.folder = folder;\n this.handle = handle;\n }\n\n get isDirty(): boolean {\n return this.changed || (this.#song?.isDirty ?? false);\n }\n\n markClean(): void {\n this.changed = false;\n this.#song?.markClean();\n }\n\n get id() {\n return this.path.split('.')[0]!;\n }\n\n get song(): Song | undefined {\n return this.#song;\n }\n\n set song(song: Song) {\n this.#song = song;\n song.on('rename', (name) => {\n this.name = name;\n });\n }\n\n async parse() {\n if (this.song) {\n return this.song;\n }\n const file = await this.handle?.getFile();\n if (file) {\n const buffer = await file?.arrayBuffer();\n this.hash = await sha256hash(buffer);\n this.song = Song.parse(buffer, this.name);\n return this.song;\n }\n }\n}\n\nexport class SongReference {\n path: string;\n song?: SongFile;\n\n constructor(path: string) {\n this.path = path;\n }\n}\n\nexport class Playlist extends ProjectEntry {\n _id: string;\n handle: FileSystemFileHandle;\n @tracked songs: SongReference[] = [];\n\n constructor(handle: FileSystemFileHandle, name: string, path: string) {\n super(handle, name, path);\n this._id = path.split('.')[0]!;\n this.handle = handle;\n }\n\n get id() {\n return this._id;\n }\n\n addSong(song: SongFile, index?: number) {\n if (this.songs.length === 128) {\n throw new Error('Cannot have more than 128 songs in a playlist');\n }\n const path = `${song.folder.path}/${song.path}`;\n const ref = new SongReference(path);\n ref.song = song;\n if (typeof index === 'number') {\n this.songs = this.songs.toSpliced(index, 0, ref);\n } else {\n this.songs = [...this.songs, ref];\n }\n return ref;\n }\n\n removeSong(song: SongReference) {\n const index = this.songs.indexOf(song);\n if (index > -1) {\n this.songs = this.songs.toSpliced(index, 1);\n }\n return index;\n }\n}\n\nexport class DrumsetFile extends ProjectEntry {\n handle: FileSystemFileHandle;\n drumset?: Drumset;\n hash?: string;\n\n constructor(handle: FileSystemFileHandle, name: string, path: string) {\n super(handle, name, path);\n this.handle = handle;\n }\n\n get isDirty() {\n return this.changed || (this.drumset?.isDirty ?? false);\n }\n\n markClean(): void {\n this.changed = false;\n this.drumset?.markClean();\n }\n\n get id() {\n return this.path.split('.')[0]!;\n }\n\n get name() {\n return this._name;\n }\n\n set name(name: string) {\n this._name = name;\n if (!this.drumset) {\n this.parse();\n }\n this.drumset!.name = name;\n this.changed = true;\n }\n\n _parsingPromise?: Promise;\n /**\n * This function uses a stored promise to prevent multiple parsing of the same drumset\n * This is needed especially at project load when all drumsets are being parsed in the b\n * background but the current song needs it’s drumset to be parsed immediately\n */\n async parse() {\n if (this.drumset) {\n return this.drumset;\n }\n if (!this._parsingPromise) {\n this._parsingPromise = (async () => {\n const file = await this.handle?.getFile();\n if (file) {\n const buffer = await file?.arrayBuffer();\n this.hash = await sha256hash(buffer);\n this.drumset = await Drumset.parse(buffer);\n return this.drumset;\n }\n })();\n }\n return this._parsingPromise;\n }\n}\n\nexport class EffectFile extends ProjectEntry {\n handle: FileSystemFileHandle;\n audio?: AudioBuffer;\n\n constructor(handle: FileSystemFileHandle, name: string, path: string) {\n super(handle, name, path);\n this.handle = handle;\n }\n\n async getAudio(audioContext: AudioContext) {\n if (this.audio) {\n return this.audio;\n }\n const file = await this.handle?.getFile();\n if (file) {\n const buffer = await file?.arrayBuffer();\n const decoded = await audioContext.decodeAudioData(buffer);\n this.audio = decoded;\n return decoded;\n }\n }\n\n async read() {\n const file = await this.handle?.getFile();\n if (!file) {\n throw new Error('Unable to read file');\n }\n const buffer = await file?.arrayBuffer();\n return buffer;\n }\n}\n\nasync function parseConfig(\n contents: string,\n callback: (name: string, path: string) => void,\n) {\n // Handle all line boundaries in case users have modified the CSV: https://www.unicode.org/reports/tr18/#Line_Boundaries\n const lines = contents.split(/\\r\\n|[\\n\\v\\f\\r\\x85\\u2028\\u2029]/);\n for await (let line of lines) {\n const [path, fileName] = line.split(/,/);\n if (path) {\n let name = fileName?.replace(STRIP_NUMBER_REGEX, '$1')?.trim();\n await callback(name ?? '', path);\n }\n }\n}\n\nfunction buildConfig(entries: ProjectEntry[]) {\n return entries\n .map((entry, i) => `${entry.path},${i + 1}. ${entry.name}`)\n .join('\\n');\n}\n\nasync function saveConfig(\n handle: FileSystemDirectoryHandle,\n entries: ProjectEntry[],\n) {\n const configHandle = await handle.getFileHandle('config.csv', {\n create: true,\n });\n if (!configHandle) {\n throw new Error('Unable to save folders');\n }\n const config = await configHandle.createWritable();\n const configContents = buildConfig(entries);\n await config.write(configContents);\n await config.close();\n}\n\nfunction hexString(buffer: ArrayBuffer) {\n const arr = new Uint8Array(buffer);\n return Array.from(arr, (byte) => byte.toString(16).padStart(2, '0')).join('');\n}\n\nasync function sha256hash(buffer: ArrayBuffer) {\n const digest = await crypto.subtle.digest('SHA-256', buffer);\n return hexString(digest);\n}\n\nasync function getDirectoryHandle(\n parentDirectory: FileSystemDirectoryHandle,\n name: string,\n) {\n try {\n return await parentDirectory.getDirectoryHandle(name);\n } catch (error) {\n return undefined;\n }\n}\n\nasync function getFileHandle(\n parentDirectory: FileSystemDirectoryHandle,\n name: string,\n) {\n try {\n return await parentDirectory.getFileHandle(name);\n } catch (error) {\n return undefined;\n }\n}\n\nasync function getConfigFile(\n directory: FileSystemDirectoryHandle,\n): Promise {\n let configHandle = await getFileHandle(directory, 'config.csv');\n if (!configHandle) {\n configHandle = await getFileHandle(directory, 'CONFIG.CSV');\n }\n return configHandle;\n}\n\nasync function fileExists(\n parentDirectory: FileSystemDirectoryHandle,\n name: string,\n) {\n try {\n await parentDirectory.getFileHandle(name);\n return true;\n } catch (error) {\n return false;\n }\n}\n\nasync function createDirectory(\n parentDirectory: FileSystemDirectoryHandle,\n name: string,\n) {\n const directory = await parentDirectory.getDirectoryHandle(name, {\n create: true,\n });\n if (!directory) {\n throw new Error(`Unable to create ${name} directory`);\n }\n return directory;\n}\n\nfunction generateUniqueName(list: ProjectEntry[], name: string) {\n let uniqueName = name;\n let i = 1;\n while (list.some((entry) => entry.name === uniqueName)) {\n uniqueName = `${name} (${i})`;\n i++;\n }\n return uniqueName;\n}\n\nasync function createNewPathName(\n directory: FileSystemDirectoryHandle,\n suffix = '',\n): Promise {\n const uuid = crypto.randomUUID();\n const path =\n new Crc32()\n .update(new TextEncoder().encode(uuid).buffer, uuid.length)\n .getCRC(true)\n .toString(16)\n .toUpperCase()\n .padStart(8, '0') + suffix;\n let matchesEntry = false;\n for await (const [, entry] of directory.entries()) {\n if (entry.name === path) {\n matchesEntry = true;\n break;\n }\n }\n if (matchesEntry) {\n return createNewPathName(directory, suffix);\n }\n return path;\n}\n\nasync function copyFile(\n sourceHandle: FileSystemFileHandle | File,\n targetHandle: FileSystemFileHandle,\n) {\n let sourceFile: File;\n if (sourceHandle instanceof FileSystemFileHandle) {\n if (await sourceHandle.isSameEntry(targetHandle)) {\n return;\n }\n sourceFile = await sourceHandle.getFile();\n } else {\n sourceFile = sourceHandle;\n }\n const sourceContents = await sourceFile.arrayBuffer();\n const file = await targetHandle.createWritable();\n file.write(sourceContents);\n await file.close();\n}\n\ninterface Events {\n removeFolder: (folder: SongFolder) => void;\n removeSong: (folder: SongFolder, song: SongFile) => void;\n folderChange: (folder: SongFolder) => void;\n songChange: (song: SongFile) => void;\n}\n\nexport default class ProjectManagerService extends Service {\n @service declare undoManager: UndoManagerService;\n @service declare progress: ProgressService;\n\n emmitter: Emitter;\n transition?: Transition;\n @tracked currentProject?: FileSystemDirectoryHandle;\n @tracked projectFile?: ProjectFile;\n @tracked _currentFolder?: SongFolder;\n @tracked _currentSong?: SongFile;\n @tracked _currentPlaylist?: Playlist;\n @tracked _errorSongs: SongFile[] = [];\n @tracked currentDrumset?: DrumsetFile;\n @tracked currentInstrument?: Instrument;\n @tracked songsHandle?: FileSystemDirectoryHandle;\n @tracked playlistsHandle?: FileSystemDirectoryHandle;\n @tracked songFolders: SongFolder[] = [];\n songFoldersDirty = false;\n @tracked playlists: Playlist[] = [];\n playlistsDirty = false;\n @tracked drumsetsHandle?: FileSystemDirectoryHandle;\n @tracked drumsets: DrumsetFile[] = [];\n drumsetsDirty = false;\n @tracked effectsHandle?: FileSystemDirectoryHandle;\n @tracked effects: EffectFile[] = [];\n @tracked sortMethod?: string = 'none';\n effectsDirty = false;\n onMac = false;\n\n constructor(properties?: object) {\n super(properties);\n //TODO: this needs to be called AFTER the DOM is loaded,\n // but for some reason, the standard Ember lifecycle hooks are not working\n // and neither are attempts to use document event listeners\n this.toggleTheme(true);\n this.emmitter = createNanoEvents();\n this.onMac = navigator.userAgent.toLowerCase().includes('mac');\n // this is the listener for the export all shortcut\n document.addEventListener('keydown', (event) => {\n // export all\n if (\n event.key.toLowerCase() === 'e' &&\n event.shiftKey &&\n (event.ctrlKey || event.metaKey)\n ) {\n this.exportAll();\n return;\n }\n });\n }\n\n on(event: E, callback: Events[E]) {\n return this.emmitter.on(event, callback);\n }\n\n get currentFolder(): SongFolder | undefined {\n return this._currentFolder;\n }\n\n set currentFolder(folder: SongFolder | undefined) {\n this._currentFolder = folder;\n this._currentSong = undefined;\n if (folder) {\n localStorage.setItem('currentFolder', folder?.path ?? '');\n this.emmitter.emit('folderChange', folder);\n }\n }\n\n get currentSong(): SongFile | undefined {\n return this._currentSong;\n }\n\n set currentSong(song: SongFile | undefined) {\n this._currentSong = song;\n if (song) {\n localStorage.setItem('currentSong', song?.path ?? '');\n this.emmitter.emit('songChange', song);\n }\n }\n\n get canAddPlaylist() {\n return this.playlists.length < MAX_PLAYLISTS;\n }\n\n addSongError(song: SongFile) {\n this._errorSongs = [...this._errorSongs, song];\n localStorage.removeItem('currentSong');\n this.currentSong = undefined;\n }\n\n get currentPlaylist() {\n return this._currentPlaylist;\n }\n\n set currentPlaylist(playlist: Playlist | undefined) {\n this._currentPlaylist = playlist;\n if (playlist) {\n localStorage.setItem('currentPlaylist', playlist?.path ?? '');\n }\n }\n\n closeProject() {\n this.undoManager.reset();\n this.currentProject = undefined;\n this.projectFile = undefined;\n this.currentFolder = undefined;\n this.currentSong = undefined;\n this.currentPlaylist = undefined;\n this.songsHandle = undefined;\n this.playlistsHandle = undefined;\n this.songFolders = [];\n this.playlists = [];\n this.drumsetsHandle = undefined;\n this.drumsets = [];\n this.effectsHandle = undefined;\n this.effects = [];\n this.sortMethod = 'none';\n }\n\n get isDirty() {\n return this.undoManager.isDirty;\n }\n\n async createProject(\n projectDirectoryHandle: FileSystemDirectoryHandle,\n projectFileHandle: FileSystemFileHandle,\n ) {\n localStorage.setItem('logs', '');\n return wait(async () => {\n try {\n const projectFile = new ProjectFile(\n projectFileHandle,\n projectFileHandle.name.replace(/\\.bbp$/, ''),\n projectFileHandle.name,\n );\n projectFile.markDirty();\n this.projectFile = projectFile;\n this.currentProject = projectDirectoryHandle;\n\n this.songsHandle = await createDirectory(\n projectDirectoryHandle,\n 'SONGS',\n );\n this.songFoldersDirty = true;\n this.drumsetsHandle = await createDirectory(\n projectDirectoryHandle,\n 'DRUMSETS',\n );\n this.drumsetsDirty = true;\n this.effectsHandle = await createDirectory(\n projectDirectoryHandle,\n 'EFFECTS',\n );\n this.effectsDirty = true;\n // Create an empty PARAMS folder because it's required for the BeatBuddy Manager\n await createDirectory(projectDirectoryHandle, 'PARAMS');\n const folder = await this.createSongFolder('New Folder');\n folder.markDirty();\n await this.save();\n\n return true;\n } catch (err) {\n console.error('Unable to create project', err);\n alert('Unable to create project\\n' + err);\n return false;\n }\n });\n }\n\n async loadProject(projectDirectory: FileSystemDirectoryHandle) {\n const permitted = await this.verifyPermission(projectDirectory);\n if (permitted) {\n this.progress.reset();\n\n await wait(async () => {\n try {\n if (await this.loadProjectFile(projectDirectory)) {\n const songsPromise = this.loadSongs(projectDirectory);\n const playlistsPromise = this.loadPlaylists(projectDirectory);\n const drumsetsPromise = this.loadDrumsets(projectDirectory);\n const effectsPromise = this.loadEffects(projectDirectory);\n await this.progress.trackPromises([\n songsPromise,\n playlistsPromise,\n drumsetsPromise,\n effectsPromise,\n ]);\n\n if (this.songFolders.length === 0) {\n alert('No song folders found');\n return false;\n }\n\n // Link all songs to playlists\n this.playlists.forEach((playlist) => {\n playlist.songs.forEach((songRef) => {\n const [folderPath, songPath] = songRef.path.split('/');\n if (folderPath && songPath) {\n const folder = this.findFolder(folderPath);\n if (folder) {\n const song = folder.findSong(songPath);\n songRef.song = song;\n }\n }\n });\n });\n this.currentProject = projectDirectory;\n\n const storedFolder = localStorage.getItem('currentFolder');\n const folder = this.findFolder(storedFolder ?? '');\n if (folder) {\n this.currentFolder = folder;\n const storedSong = localStorage.getItem('currentSong');\n const song = folder.findSong(storedSong ?? '');\n this.currentSong = song;\n }\n\n const storedPlaylist = localStorage.getItem('currentPlaylist');\n const playlist = this.playlists.find(\n (playlist) => playlist.path === storedPlaylist,\n );\n this.currentPlaylist = playlist;\n\n return true;\n } else {\n return false;\n }\n } catch (err) {\n console.error('Unable to load project', err);\n alert('Unable to load project\\n' + err);\n return false;\n }\n });\n }\n\n return permitted;\n }\n\n async loadProjectFile(directory: FileSystemDirectoryHandle) {\n const entries: FileSystemHandle[] = [];\n for await (const [, entry] of directory.entries()) {\n entries.push(entry);\n }\n const handle = entries.find((entry) => /^(?!\\.).+\\.bbp$/i.test(entry.name));\n\n if (handle && handle.kind === 'file') {\n const projectFile = new ProjectFile(\n handle,\n handle.name,\n handle.name,\n );\n if (await projectFile.parse()) {\n this.projectFile = projectFile;\n return true;\n }\n }\n return false;\n }\n\n async logDirectoryEntries(dir: FileSystemDirectoryHandle) {\n const entries: FileSystemHandle[] = [];\n for await (const [, entry] of dir.entries()) {\n entries.push(entry);\n }\n }\n\n async loadSongs(directory: FileSystemDirectoryHandle) {\n this.songFolders = [];\n const songsHandle = await getDirectoryHandle(directory, 'SONGS');\n if (songsHandle) {\n await this.logDirectoryEntries(songsHandle);\n this.songsHandle = songsHandle;\n const configHandle = await getConfigFile(this.songsHandle);\n if (configHandle) {\n const file = await configHandle.getFile();\n const contents = await file.text();\n const songFolders: SongFolder[] = [];\n const songLoading: Promise[] = [];\n await parseConfig(contents, async (name, path) => {\n const folderHandle = await getDirectoryHandle(songsHandle, path);\n if (folderHandle) {\n const songFolder = new SongFolder(folderHandle, name, path);\n const promise = this.loadFolderSongs(songFolder);\n songLoading.push(promise);\n songFolders.push(songFolder);\n } else {\n }\n });\n await this.progress.trackPromises(songLoading);\n this.songFolders = songFolders;\n } else {\n throw new Error('No SONGS config file found');\n }\n }\n }\n\n async loadFolderSongs(folder: SongFolder) {\n await this.logDirectoryEntries(folder.handle);\n const configHandle = await getConfigFile(folder.handle);\n if (configHandle) {\n const file = await configHandle.getFile();\n const contents = await file.text();\n const songs: SongFile[] = [];\n let fixedSongNameBug = false;\n await parseConfig(contents, async (name, path) => {\n let songHandle = await getFileHandle(folder.handle, path);\n if (songHandle) {\n if (path.endsWith('.BBM')) {\n // Incorrect file extension (previous bug)'\n const newPath = path.replace('.BBM', '.BBS');\n const renameHandle = await folder.handle.getFileHandle(newPath, {\n create: true,\n });\n await copyFile(songHandle, renameHandle);\n\n folder.handle.removeEntry(path);\n path = newPath;\n\n songHandle = renameHandle;\n fixedSongNameBug = true;\n }\n const song = new SongFile(folder, songHandle, name, path);\n songs.push(song);\n }\n });\n if (fixedSongNameBug) {\n await saveConfig(folder.handle, songs);\n }\n folder.songs = songs;\n } else {\n throw new Error(\n `No config file found for ${folder.name}: ${folder.path}`,\n );\n }\n }\n\n async loadPlaylists(directory: FileSystemDirectoryHandle) {\n this.playlists = [];\n try {\n const handle = await getDirectoryHandle(directory, 'PLAYLISTS');\n if (handle) {\n await this.logDirectoryEntries(handle);\n this.playlistsHandle = handle;\n const configHandle = await getConfigFile(this.playlistsHandle);\n if (configHandle) {\n const file = await configHandle.getFile();\n const contents = await file.text();\n const playlists: Playlist[] = [];\n const songLoading: Promise[] = [];\n await parseConfig(contents, async (name, path) => {\n const playlistHandle = await getFileHandle(handle, path);\n if (playlistHandle) {\n const playlist = new Playlist(playlistHandle, name, path);\n songLoading.push(this.loadPlaylistSongs(playlist));\n playlists.push(playlist);\n } else {\n }\n });\n await this.progress.trackPromises(songLoading);\n this.playlists = playlists;\n }\n } else {\n }\n } catch (error) { }\n }\n\n async loadPlaylistSongs(playlist: Playlist) {\n const file = await playlist.handle.getFile();\n const contents = await file.text();\n const songs: SongReference[] = [];\n await parseConfig(contents, async (name, path) => {\n songs.push(new SongReference(path));\n });\n playlist.songs = songs;\n }\n\n async loadDrumsets(directory: FileSystemDirectoryHandle) {\n this.drumsets = [];\n const handle = await getDirectoryHandle(directory, 'DRUMSETS');\n if (handle) {\n this.logDirectoryEntries(handle);\n this.drumsetsHandle = handle;\n const configHandle = await getConfigFile(this.drumsetsHandle);\n if (configHandle) {\n const file = await configHandle.getFile();\n const contents = await file.text();\n const drumsets: DrumsetFile[] = [];\n await parseConfig(contents, async (name, path) => {\n const drumsetHandle = await getFileHandle(handle, path);\n if (drumsetHandle) {\n const drumset = new DrumsetFile(drumsetHandle, name, path);\n drumsets.push(drumset);\n }\n });\n this.drumsets = drumsets;\n }\n } else {\n throw new Error('No DRUMSETS directory found');\n }\n }\n\n async loadEffects(directory: FileSystemDirectoryHandle) {\n this.effects = [];\n const handle = await getDirectoryHandle(directory, 'EFFECTS');\n if (handle) {\n this.logDirectoryEntries(handle);\n this.effectsHandle = handle;\n const configHandle = await getConfigFile(this.effectsHandle);\n if (configHandle) {\n const file = await configHandle.getFile();\n const contents = await file.text();\n const effects: EffectFile[] = [];\n await parseConfig(contents, async (name, path) => {\n const effectHandle = await getFileHandle(handle, path);\n if (effectHandle) {\n const effect = new EffectFile(effectHandle, name, path);\n effects.push(effect);\n }\n });\n this.effects = effects.sort((a, b) => a.name.localeCompare(b.name));\n }\n } else {\n throw new Error('No EFFECTS directory found');\n }\n }\n\n async verifyPermission(fileHandle: FileSystemHandle, readWrite = true) {\n const options: FileSystemHandlePermissionDescriptor = { mode: undefined };\n if (readWrite) {\n options.mode = 'readwrite';\n }\n // Check if permission was already granted. If so, return true.\n if ((await fileHandle.queryPermission(options)) === 'granted') {\n return true;\n }\n // Request permission. If the user grants permission, return true.\n if ((await fileHandle.requestPermission(options)) === 'granted') {\n return true;\n }\n // The user didn't grant permission, so return false.\n return false;\n }\n\n async createSongFolder(name = 'New Folder'): Promise {\n // NOTE: This only applies to Aeros mode.\n // if (this.songFolders.length >= 111) {\n // throw new Error('Cannot have more than 111 song folders');\n // }\n\n name = generateUniqueName(this.songFolders, name);\n const path = await createNewPathName(this.songsHandle!);\n let handle: FileSystemDirectoryHandle | undefined;\n handle = await getDirectoryHandle(this.songsHandle!, path);\n if (handle) {\n // If we get back a handle, it means the folder already exists\n // try again\n return this.createSongFolder();\n } else {\n // create the new folder\n try {\n handle = await this.songsHandle!.getDirectoryHandle(path, {\n create: true,\n });\n const folder = new SongFolder(handle, name, path);\n this.songFolders = [...this.songFolders, folder];\n return folder;\n } catch (err) {\n alert('Unable to create folder');\n throw err;\n }\n }\n }\n\n removeFolder(folder: SongFolder) {\n this.songFolders = this.songFolders.filter((d) => d !== folder);\n this.currentFolder = undefined;\n this.emmitter.emit('removeFolder', folder);\n }\n\n async createSong(folder: SongFolder): Promise {\n if (folder.songs.length >= 128) {\n throw new Error('Cannot have more than 128 songs in a folder');\n }\n\n const song = new Song('New Song');\n song.addPart();\n const path = await createNewPathName(this.songsHandle!, '.BBS');\n let handle = await getFileHandle(folder.handle, path);\n if (handle) {\n // If we get back a handle, it means the file already exists\n // try again\n return this.createSong(folder);\n } else {\n // create the new song file\n try {\n handle = await folder.handle.getFileHandle(path, {\n create: true,\n });\n const songFile = new SongFile(folder, handle, song.name, path);\n songFile.song = song;\n await folder.addSong(songFile);\n return songFile;\n } catch (err) {\n alert('Unable to create song');\n throw err;\n }\n }\n }\n\n async copySong(songFile: SongFile, folder: SongFolder) {\n if (!songFile.song) {\n await songFile.parse();\n }\n const newSong = songFile.song!.copy();\n\n const path = await createNewPathName(this.songsHandle!, '.BBS');\n let handle = await getFileHandle(folder.handle, path);\n if (handle) {\n throw new Error('Unable to save song, file already exists');\n } else {\n handle = await folder.handle.getFileHandle(path, {\n create: true,\n });\n const newSongFile = new SongFile(folder, handle, newSong.name, path);\n newSongFile.song = newSong;\n return newSongFile;\n }\n }\n\n async copyDrumset(drumsetFile: DrumsetFile) {\n await drumsetFile.parse();\n const newDrumset = drumsetFile.drumset!.copy();\n\n const path = await createNewPathName(this.songsHandle!, '.DRM');\n let handle = await getFileHandle(this.drumsetsHandle!, path);\n if (handle) {\n throw new Error('Unable to save drumset, file already exists');\n } else {\n handle = await this.drumsetsHandle!.getFileHandle(path, {\n create: true,\n });\n const newDrumsetFile = new DrumsetFile(handle, newDrumset.name, path);\n newDrumsetFile.drumset = newDrumset;\n return newDrumsetFile;\n }\n }\n\n removeSong(folder: SongFolder, song: SongFile) {\n folder.songs = folder.songs.filter((s) => s !== song);\n this.currentSong = undefined;\n this.emmitter.emit('removeSong', folder, song);\n }\n\n addPlaylist(name?: string) {\n if (this.playlists.length + 1 > MAX_PLAYLISTS) {\n throw new Error(`Cannot have more than ${MAX_PLAYLISTS} playlists`);\n }\n const playlistPaths = this.playlists.map(p => p.path);\n const playlistNumbers: number[] = playlistPaths\n .map((path) => {\n const match = path.match(/^(\\d+)\\.csv$/);\n if (match) {\n return parseInt(match[1], 10);\n } else {\n console.warn(`Filename \"${path}\" does not match the expected pattern.`);\n return null;\n }\n })\n .filter((num): num is number => num !== null);\n\n let next;\n if (playlistNumbers.length === 0) {\n next = 1;\n } else {\n next = Math.max(...playlistNumbers) + 1;\n }\n const newName = generateUniqueName(\n this.playlists,\n name ?? `Playlist ${next}`,\n );\n const path = `${next}.csv`;\n const playlist = new Playlist(null!, newName, path);\n this.playlists = [...this.playlists, playlist];\n return playlist;\n }\n\n removePlaylist(playlist: Playlist) {\n const index = this.playlists.indexOf(playlist);\n if (index > -1) {\n this.playlists = this.playlists.toSpliced(index, 1);\n }\n return index;\n }\n\n findFolder(path: string) {\n return this.songFolders.find((folder) => folder.path === path);\n }\n\n findDrumset(path: string) {\n let drumsetFile =\n this.drumsets.find((drumset) => drumset.path === path) ??\n this.getDefaultDrumset();\n return drumsetFile!;\n }\n\n findEffect(path: string) {\n return this.effects.find((effect) => effect.path === path);\n }\n\n findSong(folder: SongFolder) {\n return folder.songs\n .filter((song) => !this._errorSongs.includes(song))\n .at(0);\n }\n\n getDefaultDrumset() {\n return (\n this.drumsets.find((ds) => ds.name === 'Standard') ?? this.drumsets[0]\n );\n }\n\n songsForPlaylist(playlist: Playlist) {\n return playlist.songs\n .map((song) => {\n const [folderPath, songPath] = song.path.split('/');\n if (folderPath && songPath) {\n const folder = this.findFolder(folderPath);\n if (folder) {\n song.song = folder.findSong(songPath);\n return song;\n }\n }\n })\n .filter(elementExists);\n }\n\n async createDrumset(): Promise {\n const uuid = crypto.randomUUID();\n const name = 'New Drum Set';\n const fileName =\n new Crc32()\n .update(new TextEncoder().encode(uuid).buffer, uuid.length)\n .getCRC(true)\n .toString(16)\n .toUpperCase()\n .padStart(8, '0') + '.DRM';\n\n this.drumsetsHandle =\n this.drumsetsHandle ??\n (await this.currentProject?.getDirectoryHandle('DRUMSETS', {\n create: true,\n }));\n\n if (!this.drumsetsHandle) {\n throw new Error('Unable to create DRUMSETS folder');\n }\n\n let handle: FileSystemFileHandle | undefined;\n handle = await getFileHandle(this.drumsetsHandle!, fileName);\n if (handle) {\n // If we get back a handle, it means the drumset already exists\n // try again\n return this.createDrumset();\n } else {\n // create the new drumset\n try {\n handle = await this.drumsetsHandle!.getFileHandle(fileName, {\n create: true,\n });\n const drumset = new DrumsetFile(handle, name, fileName);\n drumset.drumset = new Drumset();\n drumset.name = name;\n this.drumsets = [...this.drumsets, drumset];\n return drumset;\n } catch (err) {\n alert('Unable to create drumset');\n throw err;\n }\n }\n }\n\n async importEffect(file: File): Promise {\n this.effectsHandle =\n this.effectsHandle ??\n (await this.currentProject?.getDirectoryHandle('EFFECTS', {\n create: true,\n }));\n\n if (!this.effectsHandle) {\n throw new Error('Unable to create EFFECTS folder');\n }\n\n const path = await createNewPathName(this.effectsHandle, '.WAV');\n const effectHandle = await this.effectsHandle.getFileHandle(path, {\n create: true,\n });\n\n await copyFile(file, effectHandle);\n const name = file.name.replace(/\\.wav$/i, '');\n\n const effectFile = new EffectFile(effectHandle, name, path);\n this.effects = [...this.effects, effectFile];\n return effectFile;\n }\n\n async removeEffect(effect: EffectFile) {\n this.effects = this.effects.filter((e) => e !== effect);\n return effect;\n }\n\n async addDrumset(drumset: DrumsetFile, index?: number) {\n const drumsetsHandle = this.drumsetsHandle;\n\n if (!drumsetsHandle) {\n throw new Error('Unable to create DRUMSETS folder');\n }\n\n const existingHandle = drumset.handle;\n if (await fileExists(drumsetsHandle, drumset.path)) {\n const path = await createNewPathName(drumsetsHandle, '.DRM');\n drumset.path = path;\n }\n\n drumset.handle = await drumsetsHandle.getFileHandle(drumset.path, {\n create: true,\n });\n\n await copyFile(existingHandle, drumset.handle);\n\n if (typeof index === 'number') {\n this.drumsets = this.drumsets.toSpliced(index, 0, drumset);\n } else {\n this.drumsets = [...this.drumsets, drumset];\n }\n\n // return new AddDrumsetCommand(this, drumsetFile);\n }\n\n async importDrumset(): Promise | undefined> {\n let handle: FileSystemFileHandle[];\n try {\n handle = await window.showOpenFilePicker({\n id: 'import-drumset',\n startIn: 'downloads',\n excludeAcceptAllOption: true,\n multiple: true,\n types: [\n {\n description: 'BB Drumset',\n accept: {\n 'application/x-beatbuddy-song': ['.drm'],\n },\n },\n ],\n });\n } catch (err: any) {\n if (err.name === 'AbortError' && /user aborted/i.test(err.message)) {\n return;\n }\n throw err;\n }\n\n const commands: Command[] = [];\n\n return await wait | undefined>(async () => {\n await Promise.all(\n handle.map(async (drum) => {\n const drumsetsHandle =\n this.drumsetsHandle ??\n (await this.currentProject?.getDirectoryHandle('DRUMSETS', {\n create: true,\n }));\n\n if (!drumsetsHandle) {\n throw new Error('Unable to create DRUMSETS folder');\n }\n\n const path = await createNewPathName(drumsetsHandle, '.DRM');\n const drumsetHandle = await drumsetsHandle.getFileHandle(path, {\n create: true,\n });\n\n await copyFile(drum, drumsetHandle);\n\n const drumsetFile = new DrumsetFile(\n drumsetHandle,\n 'Imported drumset',\n drumsetHandle.name,\n );\n\n await drumsetFile.parse();\n drumsetFile.name = this.generateUniqueDrumsetName(\n drumsetFile.drumset!.name,\n );\n\n let drumCommand = new AddDrumsetCommand(this, drumsetFile);\n commands.push(drumCommand);\n }),\n );\n return new CompositeCommand('Import Drumset(s)', commands);\n });\n }\n\n generateUniqueDrumsetName(name: string) {\n let uniqueName = name;\n let i = 1;\n while (this.drumsets.some((drumset) => drumset.name === uniqueName)) {\n uniqueName = `${name} (${i})`;\n i++;\n }\n return uniqueName;\n }\n\n // Will import a song (.sng) or a folder (.pbf)\n async importSong(\n folder?: SongFolder,\n ): Promise | undefined> {\n const currentFolder = folder ?? this.currentFolder ?? this.songFolders[0]!;\n const commands: Command[] = [];\n const accept: Record<`${string}/${string}`, `.${string}` | `.${string}`[]> =\n {\n 'application/x-beatbuddy-song': ['.sng'],\n };\n if (!folder) {\n accept['application/x-beatbuddy-folder'] = ['.pbf'];\n }\n\n let handles: FileSystemFileHandle[];\n try {\n handles = await window.showOpenFilePicker({\n id: 'import-song',\n startIn: 'downloads',\n excludeAcceptAllOption: true,\n multiple: true,\n types: [\n {\n description: 'BB Song',\n accept,\n },\n ],\n });\n } catch (err: any) {\n if (err.name === 'AbortError' && /user aborted/i.test(err.message)) {\n return;\n }\n throw err;\n }\n\n return await wait | undefined>(async () => {\n await Promise.all(\n handles.map(async (handle) => {\n const file = await handle.getFile();\n const data = await file.arrayBuffer();\n const unzipped = unzipSync(new Uint8Array(data), {\n filter: (file) => file.originalSize < 10_000_000,\n });\n\n const textDecoder = new TextDecoder('UTF-8');\n\n const paramsInfo = unzipped['PARAMS/info.bcf'];\n if (paramsInfo) {\n const reader = new Reader(new DataView(paramsInfo.buffer));\n const entries = reader.getUint(false);\n const map = new Map();\n for (let i = 0; i < entries; i++) {\n const key = reader.streamString(false);\n const type = reader.getUint(false);\n assert(`${type} should be 10`, type === 10);\n const reserved = reader.getByte();\n assert(`${reserved} should be 0`, reserved === 0);\n const value = reader.streamString(false);\n map.set(key, value);\n }\n const addFolderCommand = new AddFolderCommand(\n this,\n map.get('folder_name') ?? 'Imported Folder',\n );\n addFolderCommand.on('execute', async (folder) => {\n // This block gets hit when we import a pbf folder file\n const songsConfig = unzipped['SONGS/config.csv'];\n if (songsConfig) {\n await parseConfig(\n textDecoder.decode(songsConfig),\n async (name, path) => {\n const songData = unzipped[`SONGS/${path}`];\n if (songData) {\n const songHandle = await folder.handle.getFileHandle(\n path,\n {\n create: true,\n },\n );\n\n const song = Song.parse(songData.buffer, name);\n\n // What we are doing here is looking at the name of the drum set of the imported song\n // and then finding the drum set in the current project that has the same name because\n // if we don't then the song will not be able to find the drum set when it is imported\n let drumsetPath = '';\n for (const drumset of this.drumsets) {\n if (drumset.name === song.drumsetName) {\n drumsetPath = drumset.path;\n break;\n }\n }\n if (drumsetPath == '') {\n const defaultDrumset = this.getDefaultDrumset();\n drumsetPath = defaultDrumset!.path;\n }\n song.drumset = drumsetPath;\n\n const file = await songHandle.createWritable();\n await file.write(song.save());\n await file.close();\n const command = new AddSongCommand(\n folder,\n new SongFile(folder, songHandle, name, path),\n );\n command.execute();\n commands.push(command);\n }\n },\n );\n }\n });\n commands.push(addFolderCommand);\n }\n\n const songConfig = unzipped['SONG/config.csv'];\n if (songConfig) {\n // This block gets hit when we import a sng song file\n await parseConfig(\n textDecoder.decode(songConfig),\n async (name, path) => {\n const songData = unzipped[`SONG/${path}`];\n let existingSong = currentFolder?.findSong(path);\n if (existingSong) {\n if (\n !confirm(\n `Overwrite song: ${existingSong.name}?\\nOK to overwrite\\nCancel to import as new song`,\n )\n ) {\n existingSong = undefined;\n path = await createNewPathName(\n currentFolder.handle,\n '.BBS',\n );\n }\n }\n if (songData) {\n const songHandle = await currentFolder.handle.getFileHandle(\n path,\n { create: true },\n );\n const song = Song.parse(songData.buffer, name);\n\n // What we are doing here is looking at the name of the drum set of the imported song\n // and then finding the drum set in the current project that has the same name because\n // if we don't then the song will not be able to find the drum set when it is imported\n let drumsetPath = '';\n for (const drumset of this.drumsets) {\n if (drumset.name === song.drumsetName) {\n drumsetPath = drumset.path;\n break;\n }\n }\n if (drumsetPath == '') {\n const defaultDrumset = this.getDefaultDrumset();\n drumsetPath = defaultDrumset!.path;\n }\n song.drumset = drumsetPath;\n const file = await songHandle.createWritable();\n await file.write(song.save());\n await file.close();\n const songFile = new SongFile(\n currentFolder,\n songHandle,\n name,\n path,\n );\n commands.push(new AddSongCommand(currentFolder, songFile));\n if (existingSong) {\n commands.push(\n new DeleteSongCommand(currentFolder, existingSong),\n );\n }\n }\n },\n );\n }\n\n const effectsConfig = unzipped['EFFECTS/config.csv'];\n if (effectsConfig) {\n await parseConfig(\n textDecoder.decode(effectsConfig),\n async (name, path) => {\n const existingEffect = this.effects.find(\n (effect) => effect.path === path,\n );\n const effectData = unzipped[`EFFECTS/${path}`];\n if (effectData) {\n const newEffectHash = await sha256hash(effectData.buffer);\n if (existingEffect) {\n const data = await existingEffect.read();\n const existingEffectHash = await sha256hash(data);\n if (newEffectHash === existingEffectHash) {\n return;\n }\n if (!confirm(`Overwrite effect: ${existingEffect.name}?`)) {\n return;\n }\n }\n const effectHandle =\n existingEffect?.handle ??\n (await this.effectsHandle!.getFileHandle(path, {\n create: true,\n }));\n const file = await effectHandle.createWritable();\n await file.write(effectData.buffer);\n await file.close();\n if (!existingEffect) {\n commands.push(\n new AddEffectCommand(\n this,\n new EffectFile(effectHandle, name, path),\n ),\n );\n }\n }\n },\n );\n }\n }),\n );\n return new CompositeCommand('Import Song(s)', commands);\n });\n }\n\n async exportSong(songFile: SongFile) {\n let handle: FileSystemFileHandle;\n let originalSongName = songFile.name;\n try {\n handle = await window.showSaveFilePicker({\n id: 'export-song',\n startIn: 'downloads',\n suggestedName: songFile.name + '.sng',\n types: [\n {\n description: 'BeatBuddy Song',\n accept: {\n 'application/x-beatbuddy-song': ['.sng'],\n },\n },\n ],\n });\n // By replacing the song name here, we are making sure the next time this song is imported, it's using the new name\n // But we need to make sure we change it back at the end to keep the UI consistent\n songFile.name = handle.name.replace(/\\.sng$/, '');\n } catch (err: any) {\n if (err.name === 'AbortError' && /user aborted/i.test(err.message)) {\n return;\n }\n throw err;\n }\n\n try {\n await wait(async () => {\n if (!songFile.song) {\n await songFile.parse();\n }\n const song = songFile.song!;\n const effectFiles: EffectFile[] = song.effects.map(\n (effect) => this.findEffect(effect)!,\n );\n\n const effectsPath: Zippable = {\n 'config.csv': strToU8(buildConfig(effectFiles)),\n };\n const effects = await Promise.all(\n effectFiles.map(\n async (effectFile): Promise<[string, Uint8Array]> => [\n effectFile.path,\n new Uint8Array(await effectFile.read()),\n ],\n ),\n );\n effects.forEach(([path, data]) => {\n effectsPath[path] = data;\n });\n\n const zipped = zipSync(\n {\n SONG: {\n 'config.csv': strToU8(buildConfig([songFile])),\n [songFile.path]: new Uint8Array(song.save()),\n },\n EFFECTS: effectsPath,\n 'version.bcf': strToU8(\n atob(\n 'AAAAAwAAAA4AdgBlAHIAcwBpAG8AbgAAAAEAAAAQAHIAZQB2AGkAcwBpAG8AbgAAAAAAAAAKAGIAdQBpAGwAZAAAFkE=',\n ),\n ),\n },\n {\n level: 0,\n mtime: new Date(),\n },\n );\n\n try {\n const file = await handle.createWritable();\n await file.write(zipped);\n await file.close();\n } catch (err) {\n console.error('Unable to save song', err);\n alert('Unable to export song');\n }\n });\n } catch (err) {\n console.error('Unable to get a file handle', err);\n }\n // Setting this back to original name so when this function returns we can change the name on the UI\n songFile.name = originalSongName;\n return handle;\n }\n\n async exportAllMidiFiles(songFile: SongFile) {\n if (!songFile.song) {\n return;\n }\n // eslint-disable-next-line no-undef\n let directoryHandle: FileSystemDirectoryHandle;\n try {\n directoryHandle = await window.showDirectoryPicker({\n id: 'export-midi-files',\n startIn: 'documents',\n mode: 'readwrite',\n });\n } catch (err: any) {\n if (err.name === 'AbortError' && /user aborted/i.test(err.message)) {\n return;\n }\n throw err;\n }\n\n const now = new Date();\n const hours = now.getHours().toString().padStart(2, '0'); // 24-hour format\n const minutes = now.getMinutes().toString().padStart(2, '0');\n const seconds = now.getSeconds().toString().padStart(2, '0');\n const day = now.getDate().toString().padStart(2, '0');\n const month = (now.getMonth() + 1).toString().padStart(2, '0'); // January is 0!\n const year = now.getFullYear();\n\n let directoryName = `${songFile.name}_beatBuddyFolder_${hours}_${minutes}_${seconds}_${day}-${month}-${year}_MIDI_Export`;\n // Replace any slashes with underscores\n directoryName = directoryName.replace(/\\//g, '_');\n\n try {\n directoryHandle = await createDirectory(directoryHandle, directoryName);\n } catch (err) {\n console.error('Unable to create directory', err);\n alert(\n 'Unable to export MIDI files, please rename the song and try again',\n );\n return;\n }\n\n try {\n for (let i = 0; i < songFile.song.tracks.length; i++) {\n let fileData: ArrayBuffer;\n let fileHandle: FileSystemFileHandle;\n\n fileData = songFile.song.tracks[i].toMidi();\n fileHandle = await directoryHandle.getFileHandle(\n `${songFile.song.tracks[i].name}.mid`,\n {\n create: true,\n },\n );\n const file = await fileHandle.createWritable();\n await file.write(fileData);\n await file.close();\n }\n } catch (err) {\n if (err instanceof DOMException) {\n console.error('DOMException', { name: err.name, message: err.message });\n alert('Unable to save MIDI track\\n' + err.message);\n } else {\n console.error(err);\n alert('Unable to save MIDI track');\n }\n }\n\n return;\n }\n\n async exportFolder(folder: SongFolder) {\n let handle: FileSystemFileHandle;\n try {\n handle = await window.showSaveFilePicker({\n id: 'export-folder',\n startIn: 'downloads',\n suggestedName: folder.name + '.pbf',\n types: [\n {\n description: 'BeatBuddy Folder',\n accept: {\n 'application/x-beatbuddy-folder': ['.pbf'],\n },\n },\n ],\n });\n } catch (err: any) {\n if (err.name === 'AbortError' && /user aborted/i.test(err.message)) {\n return;\n }\n throw err;\n }\n\n try {\n await wait(async () => {\n await promiseBatch(folder.songs, 2, async (songFile) => {\n await songFile.parse();\n });\n\n const songEffects = folder.songs.reduce(\n (map: Map, songFile) => {\n const effects =\n songFile.song?.effects\n .map((effect) => this.findEffect(effect)!)\n .filter(elementExists)\n .filter(unique) ?? [];\n if (effects.length > 0) {\n map.set(songFile, effects);\n }\n return map;\n },\n new Map(),\n );\n\n // Write out the usage.bcf file which is a map of song uuid to array of effect file names\n const usageWriter = new Writer();\n usageWriter.setUint(songEffects.size, false);\n songEffects.forEach((effects, songFile) => {\n const uuid = `{${songFile.song!.uuid!}}`;\n usageWriter.streamString(uuid, false);\n usageWriter.setUint(effects.length, false);\n effects.forEach((effect) => {\n usageWriter.streamString(effect.path, false);\n usageWriter.setUint(1); // unknown\n });\n });\n\n const effectFiles: EffectFile[] = Array.from(\n songEffects.values(),\n ).flatMap((effects) => effects);\n\n const effectsPath: Zippable = {\n 'config.csv': strToU8(buildConfig(effectFiles)),\n 'usage.bcf': new Uint8Array(usageWriter.close()),\n };\n const effects = await Promise.all(\n effectFiles\n .filter(unique)\n .map(\n async (effectFile): Promise<[string, Uint8Array]> => [\n effectFile.path,\n new Uint8Array(await effectFile.read()),\n ],\n ),\n );\n effects.forEach(([path, data]) => {\n effectsPath[path] = data;\n });\n\n const songFiles: SongFile[] = folder.songs;\n const songsPath: Zippable = {\n 'config.csv': strToU8(buildConfig(songFiles)),\n };\n const songs = await Promise.all(\n songFiles.map(\n async (songFile): Promise<[string, Uint8Array]> => [\n songFile.path,\n new Uint8Array(songFile.song!.save()),\n ],\n ),\n );\n songs.forEach(([path, data]) => {\n songsPath[path] = data;\n });\n\n // Write out the info.bcf file containing:\n // folder_name (string) - the name of the folder (string)\n const infoWriter = new Writer();\n infoWriter.setUint(1, false);\n infoWriter.streamString('folder_name', false);\n infoWriter.setUint(10, false); // Unknown\n infoWriter.setByte(0); // Unknown\n infoWriter.streamString(folder.name, false);\n\n const paramsPath: Zippable = {\n 'info.bcf': new Uint8Array(infoWriter.close()),\n };\n\n const zipped = zipSync(\n {\n SONGS: songsPath,\n EFFECTS: effectsPath,\n PARAMS: paramsPath,\n 'version.bcf': strToU8(\n atob(\n 'AAAAAwAAAA4AdgBlAHIAcwBpAG8AbgAAAAEAAAAQAHIAZQB2AGkAcwBpAG8AbgAAAAAAAAAKAGIAdQBpAGwAZAAAFkE=',\n ),\n ),\n },\n {\n level: 0,\n mtime: new Date(),\n },\n );\n\n try {\n const file = await handle.createWritable();\n await file.write(zipped);\n await file.close();\n } catch (err) {\n console.error('Unable to save folder', err);\n alert('Unable to export folder');\n }\n });\n } catch (err) {\n console.error('Unable to get a file handle', err);\n }\n }\n\n async exportDrumset(drumsetFile: DrumsetFile) {\n let handle: FileSystemFileHandle;\n try {\n handle = await window.showSaveFilePicker({\n id: 'export-drumset',\n startIn: 'downloads',\n suggestedName: `${drumsetFile.name}.drm`,\n types: [\n {\n description: 'BB Drumset',\n accept: {\n 'application/x-beatbuddy-drumset': ['.drm'],\n },\n },\n ],\n });\n } catch (err: any) {\n if (err.name === 'AbortError' && /user aborted/i.test(err.message)) {\n return;\n }\n throw err;\n }\n\n await wait(async () => {\n this.progress.reset();\n const savedDrumset = this.createSavedDrumset(drumsetFile, handle);\n await this.progress.trackPromises([savedDrumset]);\n });\n }\n\n async createSavedDrumset(\n drumsetFile: DrumsetFile,\n handle: FileSystemFileHandle,\n ) {\n try {\n if (!drumsetFile.drumset) {\n await drumsetFile.parse();\n }\n const drumset = drumsetFile.drumset!;\n const file = await handle.createWritable();\n await file.write(drumset.save());\n await file.close();\n } catch (err) {\n console.error('Unable to save drumset', err);\n alert('Unable to export drumset');\n }\n }\n\n async toggleTheme(fromStart: boolean) {\n let currentTheme: String;\n if (localStorage.getItem('theme') === null) {\n console.warn(\"theme is null, falling back to dark theme\")\n localStorage.setItem('theme', 'dark');\n document.getElementById('baseClass')!.classList.add('dark');\n return;\n }\n if (fromStart) {\n currentTheme = localStorage.getItem('theme')!.toString();\n } else {\n localStorage.setItem('theme', localStorage.getItem('theme')!.toString() === 'dark' ? 'light' : 'dark');\n currentTheme = localStorage.getItem('theme')!.toString();\n }\n if (currentTheme === 'dark') {\n document.getElementById('baseClass')!.classList.add('dark');\n } else {\n document.getElementById('baseClass')!.classList.remove('dark');\n }\n\n // Dispatch custom event\n const event = new CustomEvent('themeChange', {\n detail: { theme: currentTheme },\n });\n window.dispatchEvent(event);\n }\n\n areSongsValid() {\n let alertMessage = '';\n this.songFolders.forEach((folder) => {\n folder.songs.forEach((songFile) => {\n let validSong = songFile.song?.isValid;\n if (validSong === true || validSong === undefined) {\n // Do nothing, undefined means the song has not been clicked/initialized, so there is nothing wrong with it and it won't be saved\n } else {\n alertMessage += `Song ${songFile.name}: ${validSong}\\n`;\n }\n });\n });\n return alertMessage;\n }\n\n areDumsetsValid() {\n let alertMessage = '';\n this.drumsets.forEach((drumset) => {\n let validDrumset = drumset.drumset?.isValid;\n if (validDrumset === true || validDrumset === undefined) {\n // Do nothing, undefined means the drumset has not been clicked/initialized, so there is nothing wrong with it and it won't be saved\n } else {\n alertMessage += `Drumset ${drumset.name}: ${validDrumset}\\n`;\n }\n });\n return alertMessage;\n }\n\n async save() {\n let alertMessage = '';\n alertMessage += this.areSongsValid();\n alertMessage += this.areDumsetsValid();\n if (alertMessage !== '') {\n alert(alertMessage);\n return;\n }\n await wait(async () => {\n const projectDirectory = this.currentProject;\n if (projectDirectory) {\n this.progress.reset();\n\n const projectFile = this.projectFile!;\n if (projectFile.isDirty) {\n this.progress.addWork();\n if (!projectFile.handle.name.startsWith(projectFile.name)) {\n const newHandle = await projectDirectory.getFileHandle(\n `${projectFile.name}.bbp`,\n { create: true },\n );\n await projectDirectory.removeEntry(projectFile.handle.name);\n projectFile.handle = newHandle;\n }\n await projectFile!.save();\n this.progress.completeWork();\n projectFile.markClean();\n }\n\n try {\n const songsDirectory = await createDirectory(\n projectDirectory,\n 'SONGS',\n );\n const saveFoldersPromise = this.saveFolders(songsDirectory, {\n batchLimit: this.songFolders.length,\n });\n\n const playlistsDirectory = await createDirectory(\n projectDirectory,\n 'PLAYLISTS',\n );\n const savePlaylistsPromise = this.savePlaylists(playlistsDirectory);\n\n const drumsetsDirectory = await createDirectory(\n projectDirectory,\n 'DRUMSETS',\n );\n const saveDrumsetsPromise = this.saveDrumsets(drumsetsDirectory);\n\n const effectsDirectory = await createDirectory(\n projectDirectory,\n 'EFFECTS',\n );\n const saveEffectsPromise = this.saveEffects(effectsDirectory);\n\n await this.progress.trackPromises([\n saveFoldersPromise,\n savePlaylistsPromise,\n saveDrumsetsPromise,\n saveEffectsPromise,\n ]);\n } catch (err) {\n console.error('Unable to save project', err);\n alert('Unable to save project\\n' + err);\n return false;\n }\n\n this.undoManager.resetDirty();\n return true;\n }\n });\n }\n\n sanitizeFilename(filename: String) {\n // Define a regular expression to match the unsupported characters\n const unsupportedChars = /[\\/&]/g;\n\n // Replace all unsupported characters with an underscore\n const sanitizedFilename = filename.replace(unsupportedChars, '_');\n\n return sanitizedFilename;\n }\n\n async exportAllFolders(chosenDir: FileSystemDirectoryHandle) {\n this.songFolders.forEach(async (folder) => {\n this.progress.addWork(folder.songs.length);\n let subDir: FileSystemDirectoryHandle | undefined;\n subDir = await chosenDir.getDirectoryHandle(folder.name, {\n create: true,\n });\n this.exportAllSongs(folder, subDir);\n });\n }\n\n async exportAllSongs(folder: SongFolder, chosenDir: FileSystemDirectoryHandle) {\n folder.songs.forEach(async (songFile) => {\n let handle: FileSystemFileHandle;\n handle = await chosenDir.getFileHandle(this.sanitizeFilename(songFile.name) + '.sng', {\n create: true,\n });\n\n try {\n await wait(async () => {\n if (!songFile.song) {\n await songFile.parse();\n }\n const song = songFile.song!;\n const effectFiles: EffectFile[] = song.effects.map(\n (effect) => this.findEffect(effect)!,\n );\n\n const effectsPath: Zippable = {\n 'config.csv': strToU8(buildConfig(effectFiles)),\n };\n const effects = await Promise.all(\n effectFiles.map(\n async (effectFile): Promise<[string, Uint8Array]> => [\n effectFile.path,\n new Uint8Array(await effectFile.read()),\n ],\n ),\n );\n effects.forEach(([path, data]) => {\n effectsPath[path] = data;\n });\n\n const zipped = zipSync(\n {\n SONG: {\n 'config.csv': strToU8(buildConfig([songFile])),\n [songFile.path]: new Uint8Array(song.save()),\n },\n EFFECTS: effectsPath,\n 'version.bcf': strToU8(\n atob(\n 'AAAAAwAAAA4AdgBlAHIAcwBpAG8AbgAAAAEAAAAQAHIAZQB2AGkAcwBpAG8AbgAAAAAAAAAKAGIAdQBpAGwAZAAAFkE=',\n ),\n ),\n },\n {\n level: 0,\n mtime: new Date(),\n },\n );\n\n try {\n const file = await handle.createWritable();\n await file.write(zipped);\n await file.close();\n this.progress.completeWork();\n } catch (err) {\n console.error('Unable to save song', err);\n alert('Unable to export song');\n this.progress.completeWork();\n }\n });\n } catch (err) {\n console.error('Unable to get a file handle', err);\n this.progress.completeWork();\n }\n });\n }\n\n async exportAllDrumsets(chosenDir: FileSystemDirectoryHandle) {\n this.drumsets.forEach(async (drumsetFile) => {\n let handle: FileSystemFileHandle;\n handle = await chosenDir.getFileHandle(drumsetFile.name + '.DRM', {\n create: true,\n });\n\n await wait(async () => {\n await this.createSavedDrumset(drumsetFile, handle);\n this.progress.completeWork();\n });\n });\n }\n\n async exportAll() {\n this.progress.reset();\n let destDirectory: FileSystemDirectoryHandle | undefined;\n try {\n destDirectory = await window.showDirectoryPicker({\n id: 'export-all',\n startIn: 'desktop',\n mode: 'readwrite',\n });\n } catch (err: any) {\n if (err.name === 'AbortError' && /user aborted/i.test(err.message)) {\n return;\n }\n throw err;\n }\n\n const timestamp = Date.now();\n const date = new Date(timestamp);\n const dateStr = date.toISOString().replace(/:/g, '-');\n\n let exportDir = await destDirectory.getDirectoryHandle('BBMO_export_' + dateStr, {\n create: true,\n });\n\n let songDir = await exportDir.getDirectoryHandle('Songs', {\n create: true,\n });\n await this.exportAllFolders(songDir);\n let drumsetDir = await exportDir.getDirectoryHandle('Drumsets', {\n create: true,\n });\n this.progress.addWork(this.drumsets.length);\n await this.exportAllDrumsets(drumsetDir);\n }\n\n async syncToSDCard() {\n let sdCardDirectory: FileSystemDirectoryHandle | undefined;\n try {\n sdCardDirectory = await window.showDirectoryPicker({\n id: 'sync-project',\n startIn: 'desktop',\n mode: 'readwrite',\n });\n } catch (err: any) {\n if (err.name === 'AbortError' && /user aborted/i.test(err.message)) {\n return;\n }\n throw err;\n }\n\n await wait(async () => {\n if (sdCardDirectory) {\n this.progress.reset();\n try {\n await this.syncToDirectory(sdCardDirectory);\n } catch (err) {\n console.error('Unable to sync project', err);\n alert('Unable to sync project\\n' + err);\n return;\n }\n }\n });\n }\n\n async syncToDirectory(directory: FileSystemDirectoryHandle) {\n await this.syncProjectFile(directory);\n const syncSongsPromise = this.syncSongs(directory);\n const syncPlaylistsPromise = this.syncPlaylists(directory);\n const syncDrumsetsPromise = this.syncDrumsets(directory);\n const syncEffectsPromise = this.syncEffects(directory);\n await this.progress.trackPromises([\n syncSongsPromise,\n syncPlaylistsPromise,\n syncDrumsetsPromise,\n syncEffectsPromise,\n ]);\n await this.removeTemporaryFiles(directory);\n }\n\n async syncToOFS() {\n const root = await navigator.storage.getDirectory();\n await this.syncToDirectory(root);\n }\n\n async syncProjectFile(sdCardDirectory: FileSystemDirectoryHandle) {\n this.progress.addWork();\n // Remove project files\n try {\n const entriesToBeDeleted: FileSystemHandle[] = [];\n for await (const [, entry] of sdCardDirectory.entries()) {\n if (entry.kind === 'file' && /.bbp$/i.test(entry.name)) {\n if (entry.name !== this.projectFile!.path) {\n entriesToBeDeleted.push(entry);\n }\n }\n }\n entriesToBeDeleted.forEach(async (entry) => {\n try {\n await sdCardDirectory.removeEntry(entry.name);\n } catch (err) {\n console.error(`Unable to remove project file ${entry.name}`, err);\n }\n });\n } finally {\n this.progress.completeWork();\n }\n\n this.progress.addWork();\n try {\n const handle = await sdCardDirectory.getFileHandle(\n this.projectFile!.path,\n {\n create: true,\n },\n );\n if (!handle) {\n throw new Error('Unable to create project file');\n }\n await this.projectFile!.save(handle);\n } finally {\n this.progress.completeWork();\n }\n }\n\n async syncSongs(sdCardDirectory: FileSystemDirectoryHandle) {\n const songsDirectory = await createDirectory(sdCardDirectory, 'SONGS');\n return this.saveFolders(songsDirectory, {\n batchLimit: 3,\n checkDirty: false,\n });\n }\n\n async syncPlaylists(sdCardDirectory: FileSystemDirectoryHandle) {\n const playlistsDirectory = await createDirectory(\n sdCardDirectory,\n 'PLAYLISTS',\n );\n return this.savePlaylists(playlistsDirectory, { checkDirty: false });\n }\n\n async syncDrumsets(sdCardDirectory: FileSystemDirectoryHandle) {\n const drumsetsDirectory = await createDirectory(\n sdCardDirectory,\n 'DRUMSETS',\n );\n return this.saveDrumsets(drumsetsDirectory, { checkDirty: false });\n }\n\n async syncEffects(handle: FileSystemDirectoryHandle) {\n const effectsDirectory = await createDirectory(handle, 'EFFECTS');\n return this.saveEffects(effectsDirectory, { checkDirty: false });\n }\n\n async saveFolders(\n songsDirectory: FileSystemDirectoryHandle,\n opts?: { batchLimit?: number; checkDirty?: boolean },\n ) {\n opts = { batchLimit: 3, checkDirty: true, ...opts };\n const batchLimit = opts.batchLimit ?? 3;\n const checkDirty = opts.checkDirty ?? true;\n const someFoldersDirty = this.songFolders.some((f) => f.isDirty);\n let jobs = this.songFolders.reduce(\n (jobs, folder) => jobs + 1 + folder.songs.length,\n 0,\n );\n this.progress.addWork(jobs);\n\n try {\n await promiseBatch(this.songFolders, batchLimit, async (folder) => {\n try {\n await this.saveFolder(songsDirectory, folder, {\n batchLimit,\n checkDirty,\n });\n } finally {\n this.progress.completeWork();\n }\n });\n } catch (err) {\n console.error('Unable to save folders', err);\n throw err;\n }\n\n // Save the folder config\n if (!checkDirty || this.songFoldersDirty || someFoldersDirty) {\n this.progress.addWork();\n await saveConfig(songsDirectory, this.songFolders);\n this.progress.completeWork();\n\n this.progress.addWork();\n // Remove any folders that don't exist in the project\n const foldersToBeDeleted: FileSystemDirectoryHandle[] = [];\n for await (const [, entry] of songsDirectory.entries()) {\n if (entry.kind === 'directory') {\n if (\n !this.songFolders.find(\n (folder) =>\n folder.path.toUpperCase() === entry.name.toUpperCase(),\n )\n ) {\n foldersToBeDeleted.push(entry);\n }\n }\n }\n foldersToBeDeleted.forEach(async (entry, idx) => {\n try {\n await songsDirectory.removeEntry(entry.name, { recursive: true });\n } catch (e) {\n console.error(e);\n console.error(`Unable to remove folder ${entry.name}`, e);\n }\n });\n await this.removeTemporaryFiles(songsDirectory);\n this.progress.completeWork();\n checkDirty && (this.songFoldersDirty = false);\n }\n }\n\n async removeTemporaryFiles(directory: FileSystemDirectoryHandle) {\n const entriesToBeDeleted: FileSystemHandle[] = [];\n for await (const [, entry] of directory.entries()) {\n //Remove temporary files\n if (entry.kind === 'file' && /^\\._|\\.crswap$/i.test(entry.name)) {\n entriesToBeDeleted.push(entry);\n }\n }\n entriesToBeDeleted.forEach(async (entry) => {\n try {\n await directory.removeEntry(entry.name);\n } catch (e) {\n console.error(`Unable to remove file ${entry.name}`, e);\n }\n });\n }\n\n async saveFolder(\n songsDirectory: FileSystemDirectoryHandle,\n folder: SongFolder,\n opts?: { batchLimit?: number; checkDirty?: boolean },\n ) {\n opts = { batchLimit: 3, checkDirty: true, ...opts };\n const batchLimit = opts.batchLimit ?? 3;\n const checkDirty = opts.checkDirty ?? true;\n const someSongsDirty = folder.songs.some((s) => s.isDirty);\n\n const folderDirectory = await createDirectory(songsDirectory, folder.path);\n // NOTE: progress work was added in saveFolders\n await promiseBatch(folder.songs, batchLimit, async (song) => {\n try {\n await this.saveSong(folderDirectory, song, { checkDirty });\n } finally {\n this.progress.completeWork();\n }\n });\n\n // Save the folder config\n if (!checkDirty || folder.isDirty || someSongsDirty) {\n this.progress.addWork();\n await saveConfig(folderDirectory, folder.songs);\n this.progress.completeWork();\n await this.cleanFolder(folderDirectory, folder);\n checkDirty && folder.markClean();\n }\n }\n\n async cleanFolder(\n folderDirectory: FileSystemDirectoryHandle,\n folder: SongFolder,\n ) {\n // Remove any songs that don't exist in the project\n const entriesToBeDeleted: FileSystemHandle[] = [];\n for await (const [, entry] of folderDirectory.entries()) {\n if (entry.kind === 'file' && /.bbs$/i.test(entry.name)) {\n if (!folder.songs.find((song) => song.path === entry.name)) {\n entriesToBeDeleted.push(entry);\n }\n }\n }\n entriesToBeDeleted.forEach(async (entry) => {\n try {\n await folderDirectory.removeEntry(entry.name);\n } catch (e) {\n console.error(`Unable to song file ${entry.name}`, e);\n }\n });\n await this.removeTemporaryFiles(folderDirectory);\n }\n\n async saveSong(\n folder: FileSystemDirectoryHandle,\n songFile: SongFile,\n opts?: { checkDirty?: boolean },\n ) {\n opts = { checkDirty: true, ...opts };\n const checkDirty = opts.checkDirty ?? true;\n if (!checkDirty || songFile.isDirty) {\n const fullPath = `${songFile.folder.path}/${songFile.path}`;\n const saveTo = await folder.getFileHandle(songFile.path, {\n create: true,\n });\n if (!saveTo) {\n throw new Error(`Unable to create song file ${songFile.path}`);\n }\n\n try {\n const handle = saveTo ?? songFile.handle;\n\n if (!(await saveTo?.isSameEntry(songFile.handle))) {\n // Not the same file location so we have to copy\n let sourceCrc = songFile.song?.header?.crc;\n if (!sourceCrc) {\n const file = await songFile.handle.getFile();\n if (file.size > 32) {\n const buffer = await file.slice(0, 32).arrayBuffer();\n sourceCrc = Song.parseHeader(buffer).crc;\n }\n }\n\n let targetCrc;\n const targetFile = await handle.getFile();\n if (targetFile.size > 32) {\n const buffer = await targetFile.slice(0, 32).arrayBuffer();\n targetCrc = Song.parseHeader(buffer).crc;\n }\n\n if (sourceCrc !== targetCrc) {\n await copyFile(songFile.handle, handle);\n }\n return;\n }\n\n if (songFile.song) {\n const songData = songFile.song.save();\n songFile.song.defaultDrumsetName = songFile.song.drumsetName;\n songFile.name = songFile.song.name;\n const hash = await sha256hash(songData);\n if (songFile.hash !== hash) {\n songFile.hash = hash;\n const file = await handle.createWritable();\n await file.write(songData);\n await file.close();\n }\n }\n } catch (err) {\n console.error('Unable to save song', err, this);\n throw err;\n }\n checkDirty && songFile.markClean();\n }\n }\n\n async savePlaylists(\n playlistsDirectory: FileSystemDirectoryHandle,\n opts?: { checkDirty?: boolean },\n ) {\n opts = { checkDirty: true, ...opts };\n const checkDirty = opts.checkDirty ?? true;\n const somePlaylistsDirty = this.playlists.some((p) => p.isDirty);\n this.progress.addWork(this.playlists.length);\n await this.removeDeletedPlaylists(playlistsDirectory);\n await promiseBatch(this.playlists, 2, async (playlist) => {\n try {\n await this.savePlaylist(playlistsDirectory, playlist, { checkDirty });\n } finally {\n this.progress.completeWork();\n }\n });\n\n if (!checkDirty || this.playlistsDirty || somePlaylistsDirty) {\n await saveConfig(playlistsDirectory, this.playlists);\n await this.removeTemporaryFiles(playlistsDirectory);\n checkDirty && (this.playlistsDirty = false);\n }\n }\n async removeDeletedPlaylists(directory: FileSystemDirectoryHandle) {\n const entriesToBeDeleted: FileSystemHandle[] = [];\n const playlistPaths = this.playlists.map(p => p.path);\n for await (const [, entry] of directory.entries()) {\n // csvs of playlists that have been deleted\n if (entry.kind === 'file' && /^\\d+\\.csv$/.test(entry.name)) {\n if (!playlistPaths.includes(entry.name)) {\n entriesToBeDeleted.push(entry);\n }\n }\n }\n entriesToBeDeleted.forEach(async (entry) => {\n try {\n await directory.removeEntry(entry.name);\n } catch (e) {\n console.error(`Unable to remove file ${entry.name}`, e);\n }\n });\n }\n\n async savePlaylist(\n directory: FileSystemDirectoryHandle,\n playlist: Playlist,\n opts?: { checkDirty?: boolean },\n ) {\n opts = { checkDirty: true, ...opts };\n const checkDirty = opts.checkDirty ?? true;\n\n if (!checkDirty || playlist.isDirty) {\n const saveTo = await directory.getFileHandle(playlist.path, {\n create: true,\n });\n\n const handle = saveTo ?? playlist.handle;\n const config = playlist.songs.map((song) => song.path).join('\\n');\n const file = await handle.createWritable();\n await file.write(config);\n await file.close();\n checkDirty && playlist.markClean();\n }\n }\n\n async saveDrumsets(\n drumsetsDirectory: FileSystemDirectoryHandle,\n opts?: { checkDirty?: boolean },\n ) {\n opts = { checkDirty: true, ...opts };\n const checkDirty = opts.checkDirty ?? true;\n const anyDrumsetsDirty = this.drumsets.some((d) => d.isDirty);\n this.progress.addWork(this.drumsets.length);\n await promiseBatch(this.drumsets, 1, async (drumset) => {\n try {\n await this.saveDrumset(drumsetsDirectory, drumset, { checkDirty });\n } finally {\n this.progress.completeWork();\n }\n });\n\n if (!checkDirty || this.drumsetsDirty || anyDrumsetsDirty) {\n await saveConfig(drumsetsDirectory, this.drumsets);\n // Remove any drumsets that don't exist in the project\n const drumsetsToBeDeleted: FileSystemHandle[] = [];\n for await (const [, entry] of drumsetsDirectory.entries()) {\n if (entry.kind === 'file' && /.drm$/i.test(entry.name)) {\n if (!this.drumsets.find((drumset) => drumset.path === entry.name)) {\n drumsetsToBeDeleted.push(entry);\n }\n }\n }\n drumsetsToBeDeleted.forEach(async (entry) => {\n try {\n await drumsetsDirectory.removeEntry(entry.name);\n } catch (e) {\n console.error(`Unable to remove drumset file ${entry.name}`, e);\n }\n });\n await this.removeTemporaryFiles(drumsetsDirectory);\n checkDirty && (this.drumsetsDirty = false);\n }\n }\n\n async saveDrumset(\n drumsetsDirectory: FileSystemDirectoryHandle,\n drumsetFile: DrumsetFile,\n opts?: { checkDirty?: boolean },\n ) {\n opts = { checkDirty: true, ...opts };\n const checkDirty = opts.checkDirty ?? true;\n\n if (!checkDirty || drumsetFile.isDirty) {\n const saveTo = await drumsetsDirectory.getFileHandle(drumsetFile.path, {\n create: true,\n });\n if (!saveTo) {\n throw new Error(`Unable to create drumset file ${drumsetFile.path}`);\n }\n\n try {\n const handle = saveTo ?? drumsetFile.handle;\n\n if (!(await saveTo?.isSameEntry(drumsetFile.handle))) {\n // Not the same file location so we have to copy\n let sourceCrc = drumsetFile.drumset?.header?.crc;\n if (!sourceCrc) {\n const file = await drumsetFile.handle.getFile();\n const buffer = await file.slice(0, 20).arrayBuffer();\n sourceCrc = Drumset.parseHeader(buffer).crc;\n }\n\n let targetCrc;\n const targetFile = await handle.getFile();\n if (targetFile.size > 0) {\n const buffer = await targetFile.slice(0, 20).arrayBuffer();\n targetCrc = Drumset.parseHeader(buffer).crc;\n }\n\n if (sourceCrc !== targetCrc) {\n await copyFile(drumsetFile.handle, handle);\n }\n return;\n }\n\n if (drumsetFile.drumset) {\n const drumsetData = drumsetFile.drumset.save();\n drumsetFile.name = drumsetFile.drumset.name;\n const hash = await sha256hash(drumsetData);\n if (drumsetFile.hash !== hash) {\n drumsetFile.hash = hash;\n const file = await handle.createWritable();\n await file.write(drumsetData);\n await file.close();\n }\n }\n } catch (err) {\n console.error('Unable to save drumset', err, this);\n throw err;\n }\n checkDirty && drumsetFile.markClean();\n }\n }\n\n async saveEffects(\n effectsDirectory: FileSystemDirectoryHandle,\n opts?: { checkDirty?: boolean },\n ) {\n opts = { checkDirty: true, ...opts };\n const checkDirty = opts.checkDirty ?? true;\n this.progress.addWork(this.effects.length);\n await promiseBatch(this.effects, 2, async (effect) => {\n try {\n await this.saveEffect(effectsDirectory, effect, { checkDirty });\n } finally {\n this.progress.completeWork();\n }\n });\n\n if (!checkDirty || this.effectsDirty) {\n await saveConfig(effectsDirectory, this.effects);\n // Remove any effects that don't exist in the project\n const effectsToBeDeleted: FileSystemHandle[] = [];\n for await (const [, entry] of effectsDirectory.entries()) {\n if (entry.kind === 'file' && /.drm$/i.test(entry.name)) {\n if (!this.effects.find((effect) => effect.path === entry.name)) {\n effectsToBeDeleted.push(entry);\n }\n }\n }\n effectsToBeDeleted.forEach(async (entry) => {\n try {\n await effectsDirectory.removeEntry(entry.name);\n } catch (e) {\n console.error(`Unable to remove effect file ${entry.name}`, e);\n }\n });\n await this.removeTemporaryFiles(effectsDirectory);\n checkDirty && (this.effectsDirty = false);\n }\n }\n\n async saveEffect(\n effectsDirectory: FileSystemDirectoryHandle,\n effectFile: EffectFile,\n opts?: { checkDirty?: boolean },\n ) {\n opts = { checkDirty: true, ...opts };\n const checkDirty = opts.checkDirty ?? true;\n\n if (!checkDirty || effectFile.isDirty) {\n const saveTo = await effectsDirectory.getFileHandle(effectFile.path, {\n create: true,\n });\n if (!saveTo) {\n throw new Error(`Unable to create effect file ${effectFile.path}`);\n }\n\n const handle = saveTo ?? effectFile.handle;\n if (!(await saveTo?.isSameEntry(effectFile.handle))) {\n const sourceFile = await effectFile.handle.getFile();\n const sourceContents = await sourceFile.arrayBuffer();\n const sourceHash = await sha256hash(sourceContents);\n\n const targetFile = await handle.getFile();\n let targetHash;\n if (targetFile.size > 0) {\n const targetContents = await targetFile.arrayBuffer();\n targetHash = await sha256hash(targetContents);\n }\n if (sourceHash !== targetHash) {\n await copyFile(effectFile.handle, handle);\n }\n }\n checkDirty && effectFile.markClean();\n }\n }\n}\n\ndeclare module '@ember/service' {\n interface Registry {\n project: ProjectManagerService;\n }\n}\n","import { action } from '@ember/object';\nimport Service, { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport Drumset, { Instrument } from 'editor/models/drumset';\nimport Song, {\n PartType,\n SectionType,\n SongPart,\n SongTrack,\n} from 'editor/models/song';\nimport elementExists from 'editor/utils/element-exists';\nimport playAccent from 'editor/utils/play-accent';\nimport playInstrument from 'editor/utils/play-instrument';\nimport ProjectManagerService, { EffectFile } from './project-manager';\nimport type VirtualPedalService from './virtual-pedal';\n\nexport class SelectedTrack {\n part: SongPart;\n sectionType: SectionType;\n sectionIndex: number = 0;\n track: SongTrack;\n\n constructor(part: SongPart, sectionType: SectionType, index: number) {\n this.part = part;\n this.sectionType = sectionType;\n this.sectionIndex = index;\n this.track = this.part.getTrack(this.sectionType, this.sectionIndex)!;\n }\n\n get isFill() {\n return !(\n this.sectionType === SectionType.MAIN && this.part.type === PartType.PART\n );\n }\n\n get trigPos() {\n if (this.isFill) {\n return this.track.trigPos;\n } else {\n return 0;\n }\n }\n\n get tickCount() {\n if (this.isFill) {\n return this.track.tickCount;\n } else {\n return this.track.barCount * this.track.barLength;\n }\n }\n}\n\nclass ChokeGroup {\n notes: Array = [];\n notesAndNames: Array<[AudioBufferSourceNode, string]> = [];\n\n choke(when: number, instrumentName: string) {\n // Sets the note to stop and then removes the note so the next choke doesn’t update this note’s stop time\n this.notes = this.notes.filter((note) => {\n const result = this.notesAndNames.find(([n]) => n === note);\n if (result && result[1] != instrumentName) {\n // We only want to stop the note if the note isn't the same one that is currently playing\n note.stop(when);\n return false;\n } else {\n return true;\n }\n });\n }\n\n add(note: AudioBufferSourceNode, name: string) {\n this.notes.push(note);\n this.notesAndNames.push([note, name]);\n }\n}\n\nexport default class SongPlayerService extends Service {\n @service declare projectManager: ProjectManagerService;\n @service declare virtualPedal: VirtualPedalService;\n\n audioContext: AudioContext;\n drumsetVolume: GainNode;\n @tracked _isPlaying = false;\n @tracked loop = true;\n @tracked selectedTrack?: SelectedTrack;\n @tracked trackPosition = 0;\n songDestructor?: () => void;\n @tracked _currentSong?: Song;\n @tracked _currentDrumset?: Drumset;\n\n constructor(properties: object | undefined) {\n super(properties);\n this.audioContext = new AudioContext({\n latencyHint: 'interactive',\n sampleRate: 44100,\n });\n this.drumsetVolume = new GainNode(this.audioContext, { gain: 1 });\n this.drumsetVolume.connect(this.audioContext.destination);\n }\n\n set song(song: Song) {\n this.songDestructor?.();\n this._currentSong = song;\n this.virtualPedal.setSong(song);\n this.setDrumset(song.drumset);\n song.on('changeDrumset', (drumsetName) => {\n this.setDrumset(drumsetName);\n this.virtualPedal.setDrumset(song.drumset);\n });\n this.selectedTrack = this.findTrack(song);\n this.audioContext.suspend();\n this._isPlaying = false;\n const addTrackDestructor = song.on(\n 'addTrack',\n (\n part: SongPart,\n sectionType: SectionType,\n sectionIndex: number,\n /*trackIndex: number,*/\n ) => {\n this.selectTrack(part, sectionType, sectionIndex);\n },\n );\n const removeTrackDestructor = song.on(\n 'removeTrack',\n (part: SongPart, sectionType: SectionType, sectionIndex: number) => {\n if (\n this.selectedTrack?.part === part &&\n this.selectedTrack?.sectionType === sectionType &&\n this.selectedTrack?.sectionIndex === sectionIndex\n ) {\n this.findTrack(song);\n }\n },\n );\n this.songDestructor = () => {\n addTrackDestructor();\n removeTrackDestructor();\n };\n this.reset();\n }\n\n get song() {\n return this._currentSong!;\n }\n\n setDrumset(name: string) {\n this.projectManager\n .findDrumset(name)\n .parse()\n .then((drumset) => {\n if (drumset) {\n drumset.prepareAudio(this.audioContext);\n this._currentDrumset = drumset;\n const drumsetGain = drumset.volume / 100;\n this.drumsetVolume.gain.setValueAtTime(\n drumsetGain,\n this.audioContext.currentTime,\n );\n }\n });\n }\n\n get drumset() {\n return this._currentDrumset;\n }\n\n get track() {\n return this.selectedTrack?.track;\n }\n\n get isPlaying() {\n return this._isPlaying;\n }\n\n @action\n stop(stopAudio: number = 0, stopAtTime: number = 0) {\n if (stopAudio === 0) {\n clearTimeout(this.loopTimer);\n }\n this.#stopAtTime = stopAtTime;\n this.playingEvents?.forEach((note) => note.stop(stopAudio));\n this.playingEvents = [];\n }\n\n @action\n findTrack(song: Song): SelectedTrack | undefined {\n let searchParts;\n // If the intro has more than four bars, it is likely a One Press Song\n if ((song.intro?.main?.barCount ?? 0) > 4) {\n searchParts = [song.intro, ...song.parts, song.outro];\n } else if ((song.outro?.main?.barCount ?? 0) > 4) {\n searchParts = [song.outro, ...song.parts, song.intro];\n } else {\n searchParts = [...song.parts, song.intro, song.outro];\n }\n this.selectedTrack = searchParts\n .flatMap((part) => {\n return [\n part.main && new SelectedTrack(part, SectionType.MAIN, 0),\n ...part.fills.map(\n (_fill, index) => new SelectedTrack(part, SectionType.FILL, index),\n ),\n part.transition && new SelectedTrack(part, SectionType.TRANSITION, 0),\n ];\n })\n .find(elementExists);\n this.setupSelectedTrack();\n return this.selectedTrack;\n }\n\n get bpm() {\n return this.song?.bpm ?? 120;\n }\n\n selectTrack(part: SongPart, sectionType: SectionType, index: number) {\n this.selectedTrack = new SelectedTrack(part, sectionType, index);\n this.setupSelectedTrack();\n }\n\n setupSelectedTrack() {\n if (this.selectedTrack) {\n this.loop =\n this.selectedTrack.sectionType === SectionType.MAIN &&\n this.selectedTrack.part.type === PartType.PART;\n this.trackPosition = this.selectedTrack.trigPos;\n this.stop();\n this.reset();\n }\n }\n\n ticksPerSecond(tickToQuarter: number) {\n return (tickToQuarter / 60) * this.bpm;\n }\n\n async playAccent(effect: EffectFile, volume = 100) {\n playAccent(this.audioContext, this.drumsetVolume, effect, volume);\n }\n\n async playInstrument(instrument: Instrument, velocityValue: number) {\n playInstrument(\n this.audioContext,\n this.drumsetVolume,\n instrument,\n 0,\n 0,\n velocityValue,\n );\n }\n\n #chokeGroups = new Array(15).fill(0).map(() => new ChokeGroup());\n getChokeGroup(group: number): ChokeGroup {\n if (group < 0 || group > 15) throw new Error('Invalid choke group');\n return this.#chokeGroups[group]!;\n }\n\n addToChokeGroup(group: number, note: AudioBufferSourceNode, name: string) {\n this.getChokeGroup(group).add(note, name);\n }\n\n playingEvents: AudioBufferSourceNode[] = [];\n loopTimer = 0;\n\n /*\n * Schedules MIDI events to be played\n * @param {number} timeOffset - The time to start playing the song. This is based on the AudioContext#currentTime. If 0 it will use AudioContext#currentTime\n * @param {number} playFromTick - The tick to start playing the song from\n * @returns {void}\n */\n scheduleEvents(\n timeOffset = 0,\n playFromTick = 0,\n playToTick = -1,\n eventStartIndex = -1,\n ) {\n // Bail if playback is not active\n if (!this.isPlaying) {\n return;\n }\n\n // Get the current audio time on which to base all calculations\n\n // Everything is based on the current track\n if (this.selectedTrack && this.track) {\n const track = this.track;\n const tickCount = this.selectedTrack.tickCount;\n const events = this.track.events;\n\n // How many ticks to we have per second\n const ticksPerSecond = this.ticksPerSecond(track.tickToQuarter);\n\n const time = this.audioContext.currentTime;\n\n // If we don’t have a timeOffset, set it to the current time\n if (timeOffset === 0) {\n timeOffset = time;\n this.playingEvents = new Array(this.track.events.length);\n // The start time is the current time minus the time it takes to\n // play from the start to the playFromTick\n this.#startTime = time - playFromTick / ticksPerSecond;\n }\n\n // The time to start playing the next events\n const playStart = timeOffset;\n\n const playFrom = playFromTick;\n // We play to playToTick, or for two bars, or up to the end of the track\n // whichever is soonest\n let playTo = Math.min(\n tickCount,\n playToTick === -1 ? playFromTick + track.barLength * 2 : playToTick,\n );\n // The duration is the time it takes to play from playFrom to playTo\n const duration = (playTo - playFrom) / ticksPerSecond;\n\n // If we’re playing to the end of the track, add the extra ticks (for a fill)\n if (playTo === tickCount) {\n playTo = playTo + track.extraTicks;\n }\n\n let eventEndIndex = events.length;\n for (\n let i = Math.max(eventStartIndex, 0), ii = events.length;\n i < ii;\n i++\n ) {\n if (eventStartIndex < 0 && events[i]!.tick >= playFromTick) {\n eventStartIndex = i;\n }\n if (events[i]!.tick >= playTo) {\n eventEndIndex = i;\n break;\n }\n }\n // If we have no notes to play, then we’re done\n if (eventStartIndex < 0) {\n eventStartIndex = eventEndIndex;\n }\n\n // Set a loop timer to play the next part of the song\n this.loopTimer = setTimeout(\n () => {\n // A flag to indicate if we should repeat from the beginning\n let repeat = false;\n\n // Increase playback position by two bars\n playFromTick = playFrom + track.barLength * 2;\n // If we’ve reached the end of the track, reset and repeat\n if (playFromTick >= tickCount) {\n playFromTick = 0;\n eventEndIndex = 0;\n repeat = true;\n }\n\n // If we’re about to repeat and we’re not looping, stop playback\n if (repeat && !this.loop) {\n this.stop(this.audioContext.currentTime + 4, time + duration);\n } else {\n // Schedule the next part of the song to be played\n this.scheduleEvents(\n playStart + duration,\n playFromTick,\n playToTick,\n eventEndIndex,\n );\n }\n },\n // Set the timeout to the time it takes to play the next part of the song, less 1s\n (playStart + duration - time) * 1000 - 1000,\n );\n\n let event, onWhen, offWhen, instrument, note;\n // Loop through the events to be played\n for (let i = eventStartIndex; i < eventEndIndex; i++) {\n event = events[i]!;\n // If the event is a note on event and it’s within the play range\n onWhen = playStart + (event.tick - playFromTick) / ticksPerSecond;\n offWhen = onWhen + event.length / ticksPerSecond;\n instrument = this.drumset?.instruments[event.note];\n if (instrument) {\n // Stop all instruments in the same choke group\n if (instrument.chokeGroup > 0) {\n const chokeGroup = this.getChokeGroup(instrument.chokeGroup);\n chokeGroup.choke(onWhen, instrument.name);\n }\n note = playInstrument(\n this.audioContext,\n this.drumsetVolume,\n instrument,\n onWhen,\n offWhen,\n event.velocity,\n );\n if (note) {\n // Add the note to the choke group\n if (instrument.chokeGroup > 0) {\n this.addToChokeGroup(instrument.chokeGroup, note, instrument.name);\n }\n this.playingEvents[i] = note;\n }\n }\n }\n }\n }\n\n playFrom(tick: number) {\n if (this._isPlaying) return;\n if (this.audioContext.state === 'suspended') {\n this.audioContext.resume();\n }\n this.virtualPedal.stop();\n this.#stopAtTime = undefined;\n this.ticks = Math.max(tick, this.selectedTrack?.trigPos ?? 0);\n this._isPlaying = true;\n this.scheduleEvents(0, tick);\n requestAnimationFrame(this.tick);\n }\n\n #startTime = 0;\n #stopAtTime?: number;\n @tracked ticks = 0;\n reset(repeat = false) {\n if (repeat && !this.loop && this._isPlaying) {\n this._isPlaying = false;\n }\n this.ticks = this.selectedTrack?.trigPos ?? 0;\n }\n\n @action\n async tick() {\n if (!this._isPlaying) {\n return;\n }\n if (this.selectedTrack && this.track) {\n const time = this.audioContext.currentTime - this.#startTime;\n const ticksOffset = this.selectedTrack.trigPos;\n const ticksPlaying = this.selectedTrack.tickCount;\n const totalTicksPlayed = Math.floor(\n time * this.ticksPerSecond(this.track.tickToQuarter),\n );\n const tickInCurrentLoop = totalTicksPlayed % ticksPlaying;\n this.ticks = ticksOffset + tickInCurrentLoop;\n if (\n this.#stopAtTime !== undefined &&\n this.#stopAtTime <= this.audioContext.currentTime\n ) {\n if (this.#stopAtTime > 0) {\n this.ticks = this.track.totalTicks;\n }\n this.#stopAtTime = undefined;\n this._isPlaying = false;\n return;\n }\n }\n requestAnimationFrame(this.tick);\n }\n}\n\ndeclare module '@ember/service' {\n interface Registry {\n 'song-player': SongPlayerService;\n }\n}\n","import Service, { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport type { DrumsetFile, SongFile } from './project-manager';\nimport type ProjectManagerService from './project-manager';\n\nexport default class StatusService extends Service {\n @service declare projectManager: ProjectManagerService;\n\n @tracked songFile?: SongFile;\n @tracked drumsetFile?: DrumsetFile;\n @tracked message = 'Welcome to BeatBuddy Manager!';\n\n addSongMidiInfo(songFile: SongFile) {\n this.drumsetFile = undefined;\n this.songFile = songFile;\n }\n\n addDrumsetInfo(drumsetFile: DrumsetFile) {\n this.songFile = undefined;\n this.drumsetFile = drumsetFile;\n }\n}\n\ndeclare module '@ember/service' {\n interface Registry {\n status: StatusService;\n }\n}\n","import { action } from '@ember/object';\nimport Service from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport type Command from 'editor/models/command';\nimport { CompositeCommand } from 'editor/models/command';\nimport isEqual from 'lodash.isequal';\n\nexport default class UndoManagerService extends Service {\n undoStack: Command[] = [];\n redoStack: Command[] = [];\n\n @tracked dirtyPoint = [];\n @tracked undoLevel = 0;\n @tracked redoLevel = 0;\n\n constructor(properties?: object) {\n super(properties);\n document.addEventListener('keydown', (event) => {\n // redo\n if (\n // when the shift key is pressed, the key is converted to uppercase i.e. 'z' -> 'Z'\n // so we need to convert them to lowercase before we check here.\n // Honestly might be best to just do this always since shortcuts are case insensitive and caps lock can change the key's case as well\n (event.key.toLowerCase() == 'z' || event.key.toLowerCase() == 'y') &&\n event.shiftKey &&\n (event.ctrlKey || event.metaKey)\n ) {\n this.redo();\n return;\n }\n\n //undo\n if ((event.key.toLowerCase() == 'z' || event.key.toLowerCase() == 'y') && (event.ctrlKey || event.metaKey)) {\n this.undo();\n return;\n }\n });\n }\n\n get isDirty() {\n // this.undoLevel is a hack to check if the undo stack is dirty.\n // it's tracked, so when it changes, we call this\n // we could instead track the undo stack, but since its the array reference that changes\n // we'd have to assign it to a new array each time (undoStack.push wouldn't trigger a change)\n this.undoLevel;\n\n const dirty = isEqual(this.dirtyPoint, this.undoStack);\n return !dirty;\n }\n\n // Resets everything\n reset() {\n this.undoStack = [];\n this.redoStack = [];\n this.undoLevel = 0;\n this.redoLevel = 0;\n this.dirtyPoint = [];\n }\n\n // Resets after a save but still allows undo\n resetDirty() {\n this.dirtyPoint = [...this.undoStack];\n }\n\n get canUndo() {\n return this.undoLevel > 0;\n }\n\n get canRedo() {\n return this.redoLevel > 0;\n }\n\n @action\n undo() {\n const command = this.undoStack.pop();\n if (command) {\n this.undoLevel--;\n command.undo();\n this.redoStack.push(command);\n this.redoLevel++;\n }\n }\n\n @action\n redo() {\n const command = this.redoStack.pop();\n if (command) {\n this.redoLevel--;\n command.perform();\n this.undoStack.push(command);\n this.undoLevel++;\n }\n }\n\n executeCommand(command: Command) {\n this.redoStack = [];\n this.redoLevel = 0;\n const result = command.perform();\n this.undoStack.push(command);\n this.undoLevel++;\n return result;\n }\n\n appendCommand(command: Command, standAloneCommand = true) {\n const lastCommand = this.undoStack.pop();\n if (lastCommand) {\n const compositeCommand = new CompositeCommand(lastCommand.name, [\n lastCommand,\n command,\n ]);\n command.perform();\n this.undoStack.push(compositeCommand);\n } else {\n if (standAloneCommand) {\n this.executeCommand(command);\n }\n }\n }\n}\n\ndeclare module '@ember/service' {\n interface Registry {\n 'undo-manager': UndoManagerService;\n }\n}\n","import { action } from '@ember/object';\nimport Service, { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport type Drumset from 'editor/models/drumset';\nimport type { Instrument } from 'editor/models/drumset';\nimport type { SongTrack } from 'editor/models/song';\nimport constrainValue from 'editor/utils/constrain-value';\nimport List from 'editor/utils/list';\nimport MusicUtils from 'editor/utils/music-utils';\nimport type ProjectManagerService from './project-manager';\nimport type Song from 'editor/models/song';\nimport playInstrument from 'editor/utils/play-instrument';\nimport playAccent from 'editor/utils/play-accent';\nimport type SongPlayerService from './song-player';\n\nexport class ChokeGroup {\n notes = new List();\n\n choke(when: number) {\n // Sets the note to stop and then removes the note so the next choke doesn’t update this note’s stop time\n this.notes.dropWhile((note) => {\n note.stop(when);\n return true;\n });\n }\n\n add(note: AudioBufferSourceNode) {\n this.notes.push(note);\n }\n}\n\ninterface PlayOpts {\n loop?: boolean;\n playFrom?: any;\n startOffset?: any;\n followedBy?: any;\n nextBar?: boolean;\n}\n\ntype QueuedTrack = {\n type: TrackType;\n track: SongTrack;\n loop: boolean;\n playFrom?: number;\n startOffset?: number;\n followedBy?: QueuedTrack;\n};\n\nexport enum TrackType {\n INTRO,\n OUTRO,\n MAIN,\n FILL,\n TRANSITION,\n PAUSED,\n}\n\nexport default class VirtualPedalService extends Service {\n @service declare projectManager: ProjectManagerService;\n @service declare songPlayer: SongPlayerService;\n\n audioContext: AudioContext;\n drumsetVolume: GainNode;\n @tracked isPlaying = false;\n @tracked currentTrack?: SongTrack;\n @tracked currentTrackType?: TrackType;\n @tracked beat = 0;\n @tracked bar = 0;\n @tracked _currentSong?: Song;\n @tracked _currentDrumset?: Drumset;\n trackQueue = new List();\n\n constructor(properties?: object) {\n super(properties);\n this.audioContext = new AudioContext({\n latencyHint: 'interactive',\n sampleRate: 44100,\n });\n this.drumsetVolume = new GainNode(this.audioContext, { gain: 1 });\n this.drumsetVolume.connect(this.audioContext.destination);\n this.projectManager.on('songChange', (songFile) => {\n songFile.parse().then((song) => {\n if (song) this.song = song;\n });\n });\n this.projectManager.currentSong?.parse().then((song) => {\n if (song) this.song = song;\n });\n }\n\n set song(song: Song) {\n this.stop();\n this._currentSong = song;\n this.setDrumset(song.drumset);\n song.on('changeDrumset', (drumsetName) => {\n this.setDrumset(drumsetName);\n });\n this.audioContext.suspend();\n }\n\n get song() {\n return this._currentSong!;\n }\n\n setSong(song: Song) {\n this._currentSong = song;\n }\n\n setDrumset(name: string) {\n this.projectManager\n .findDrumset(name)\n .parse()\n .then((drumset) => {\n if (drumset) {\n drumset.prepareAudio(this.audioContext);\n this._currentDrumset = drumset;\n const drumsetGain = drumset.volume / 100;\n this.drumsetVolume.gain.setValueAtTime(\n drumsetGain,\n this.audioContext.currentTime,\n );\n }\n });\n }\n\n get drumset() {\n return this._currentDrumset;\n }\n\n get label() {\n switch (this.currentTrackType) {\n case TrackType.INTRO:\n return 'Intro fill';\n case TrackType.MAIN:\n case TrackType.TRANSITION:\n case TrackType.PAUSED:\n return `Part ${this.currentPartIndex + 1}/${this.song.parts.length}`;\n case TrackType.FILL:\n return `Fill ${this.currentFillIndex + 1}/${this.currentPart!.fills.length}`;\n case TrackType.OUTRO:\n return 'Outro fill';\n default:\n return '';\n }\n }\n\n get subLabel() {\n switch (this.currentTrackType) {\n case TrackType.INTRO:\n return '';\n case TrackType.MAIN:\n return ``;\n case TrackType.FILL:\n return ``;\n case TrackType.TRANSITION:\n return 'Transition';\n case TrackType.PAUSED:\n return 'Paused';\n case TrackType.OUTRO:\n return '';\n default:\n return '';\n }\n }\n\n get ticksPerSecond() {\n const track = this.currentTrack ?? this.song.tracks[0]!;\n return (track.tickToQuarter / 60) * this.song.tempo;\n }\n\n get secondsPerBeat() {\n if (!this.currentTrack) return 0;\n\n return (\n this.currentTrack.tickToQuarter /\n (this.currentTrack.timeSignatureDenominator / 4) /\n this.ticksPerSecond\n );\n }\n\n get secondsPerSixteenth() {\n if (!this.currentTrack) return 0;\n const ticksToSixteenth = this.currentTrack?.tickToQuarter / 4;\n return ticksToSixteenth / this.ticksPerSecond;\n }\n\n #chokeGroups = new Array(15).fill(0).map(() => new ChokeGroup());\n getChokeGroup(group: number): ChokeGroup {\n if (group < 0 || group > 15) throw new Error('Invalid choke group');\n return this.#chokeGroups[group]!;\n }\n\n addToChokeGroup(group: number, note: AudioBufferSourceNode) {\n this.getChokeGroup(group).add(note);\n }\n\n #fillChokeGroups = new Array(15).fill(0).map(() => new Array());\n getFillChokeGroup(group: number): number[] {\n if (group < 0 || group > 15) throw new Error('Invalid choke group');\n return this.#fillChokeGroups[group]!;\n }\n\n addToFillChokeGroup(group: number, onWhen: number) {\n this.getFillChokeGroup(group).push(onWhen);\n }\n\n clearFillChokeGroups() {\n this.#fillChokeGroups = new Array(15)\n .fill(0)\n .map(() => new Array());\n }\n\n start(partIndex = 0) {\n if (this.isPlaying) return;\n this.currentTrackType = TrackType.INTRO;\n\n clearTimeout(this.loopTimer);\n this.clearQueue();\n\n this.isPlaying = true;\n this.songPlayer.stop();\n\n if (this.audioContext.state === 'suspended') {\n this.audioContext.resume();\n }\n\n if (this.song.intro && this.song.intro.main) {\n this.queue(TrackType.INTRO, this.song.intro.main, {\n loop: false,\n playFrom: 0,\n startOffset: this.song.intro.main.trigPos,\n followedBy: {\n type: TrackType.MAIN,\n track: this.song.parts[partIndex]!.main!,\n loop: true,\n },\n });\n } else {\n this.playTrack(this.song.parts[0]!.main!, TrackType.MAIN, true);\n }\n\n this.tick();\n }\n\n stop() {\n this.isPlaying = false;\n this.clearQueue();\n if (this.tickTimer) {\n cancelAnimationFrame(this.tickTimer);\n }\n if (this.loopTimer) {\n clearTimeout(this.loopTimer);\n }\n if (this.followUpTimer) {\n clearTimeout(this.followUpTimer);\n }\n if (this.trackMarkerTimer) {\n clearTimeout(this.trackMarkerTimer);\n }\n this.currentTrackType = undefined;\n this.currentTrack = undefined;\n this.currentFillIndex = -1;\n this.currentPartIndex = 0;\n this.transitionToPart = 0;\n this.playingEvents.forEach(([noteOn, note]) => {\n if (noteOn >= this.audioContext.currentTime) {\n note.stop();\n }\n });\n this.playingEvents.clear();\n }\n\n /**\n * Adds a track to play after the current track\n */\n queue(type: TrackType, track: SongTrack, playOpts: PlayOpts) {\n const loop = playOpts.loop ?? false;\n const playFrom =\n playOpts.playFrom ?? (playOpts.nextBar === true ? -1 : undefined);\n const startOffset = playOpts.startOffset;\n const followedBy = playOpts.followedBy;\n this.trackQueue.clear();\n this.trackQueue.push({\n type,\n track,\n loop,\n playFrom,\n startOffset,\n followedBy,\n });\n }\n\n clearQueue() {\n this.trackQueue.clear();\n }\n\n tickTimer?: number;\n followUpTimer?: number;\n @action\n tick() {\n if (!this.isPlaying) return;\n\n // Snapshot of current time\n const currentTime = this.audioContext.currentTime;\n\n // If the outro is complete, then stop\n if (\n this.currentTrackType === TrackType.OUTRO &&\n currentTime >= this.trackEnd\n ) {\n this.stop();\n return;\n }\n\n // Set up beat information for the UI\n const track = this.currentTrack;\n let barEnd = 0;\n if (track) {\n const elapsedTime = currentTime - this.trackStart;\n const timePerTick = (this.trackEnd - this.trackStart) / track.totalTicks;\n\n let currentTick = Math.round(elapsedTime / timePerTick);\n if (currentTick === Infinity) {\n currentTick = 0;\n }\n if (currentTick < 0) {\n currentTick = track.totalTicks + currentTick;\n }\n const beatTicks: number = MusicUtils.beatTicks(\n track.tickToQuarter,\n track.timeSignatureDenominator,\n );\n const beat = Math.floor(\n (currentTick / beatTicks) % track.timeSignatureNumerator,\n );\n if (beat != this.beat && !isNaN(beat)) this.beat = beat;\n const bar = Math.floor(currentTick / track.barLength);\n if (bar != this.bar && !isNaN(bar)) this.bar = bar;\n barEnd =\n this.trackStart + ((bar + 1) * track.barLength) / this.ticksPerSecond;\n }\n\n // If we have a queued track and we’re within the last half beat of the current track\n if (this.trackQueue.first) {\n if (\n // The next track is queued to play from the end of the curren track\n (!this.trackQueue.first.playFrom &&\n this.trackEnd - currentTime <= this.secondsPerBeat / 2) ||\n // The next track is queued to play from a specific time\n (typeof this.trackQueue.first.playFrom !== 'undefined' &&\n this.trackQueue.first.playFrom - this.secondsPerBeat / 2 <=\n currentTime)\n ) {\n // Grab the first track from the queue\n let { type, track, loop, playFrom, startOffset, followedBy } =\n this.trackQueue.shift()!;\n playFrom = playFrom ?? this.trackEnd;\n if (playFrom === -1) {\n playFrom = barEnd;\n }\n\n // Clear the loop timer so it doesn’t continue to buffer the currently playing track\n // Clear other timers to avoid issues like https://github.com/SingularSound/BBMO/issues/39\n clearTimeout(this.loopTimer);\n clearTimeout(this.trackMarkerTimer);\n clearTimeout(this.followUpTimer);\n\n // If the incoming track is not a main track, then we need to stop any notes that are scheduled to play in the buffer\n if (type !== TrackType.MAIN) {\n // Stop all notes scheduled after this track is scheduled to start\n const dropped = this.playingEvents.dropAfter(\n ([noteOn]) => noteOn < playFrom!,\n );\n dropped.forEach(([, note]) => note.stop());\n }\n\n // Set and play the new track\n this.playTrack(track, type, loop, playFrom, startOffset ?? 0);\n // A bit of a hack to make sure the above track is buffered first\n clearTimeout(this.followUpTimer);\n this.followUpTimer = setTimeout(() => {\n if (followedBy) {\n this.queue(followedBy.type, followedBy.track, {\n loop: followedBy.loop,\n });\n }\n }, 100);\n }\n }\n this.tickTimer = requestAnimationFrame(this.tick);\n }\n\n trackStart = 0;\n trackEnd = 0;\n playTrack(\n track: SongTrack,\n type: TrackType,\n loop: boolean = false,\n playFrom?: number,\n startOffset?: number,\n ) {\n playFrom = playFrom ?? 0;\n startOffset = startOffset ?? 0;\n this.scheduleEvents(track, type, loop, playFrom, startOffset);\n }\n\n queueFillTypeTrack(\n type: TrackType,\n track: SongTrack,\n loop: boolean,\n playImmediately?: boolean,\n followedBy?: QueuedTrack,\n ) {\n if (!this.currentTrack) return;\n\n const currentTime = this.audioContext.currentTime;\n\n const currentTrack = this.currentTrack;\n let startOffset = type === TrackType.MAIN ? 0 : track.trigPos;\n\n const timePerBar =\n (this.trackEnd - this.trackStart) / currentTrack.barCount;\n const elapsedTime = (currentTime - this.trackStart) % timePerBar;\n const currentTick = Math.round(\n currentTrack.barLength - (timePerBar - elapsedTime) * this.ticksPerSecond,\n );\n\n let ticksToStartOffset = startOffset - currentTick;\n if (ticksToStartOffset < 0) {\n startOffset = startOffset - ticksToStartOffset;\n }\n let playFrom =\n currentTime + (startOffset - currentTick) / this.ticksPerSecond;\n\n if (playImmediately) {\n playFrom = 0;\n startOffset = 0;\n }\n\n this.queue(type, track, { loop, playFrom, startOffset, followedBy });\n }\n\n @tracked currentPartIndex = 0;\n @tracked currentFillIndex = -1;\n @action\n triggerFill() {\n if (this.currentTrackType === TrackType.TRANSITION) {\n this.transitionToPart = this.transitionFromPart;\n return;\n }\n if (this.currentTrackType === TrackType.INTRO) return;\n if (this.currentTrackType === TrackType.FILL) return;\n if (this.currentTrackType === TrackType.OUTRO) return;\n\n const wasPaused = this.currentTrackType === TrackType.PAUSED;\n this.unpause();\n\n // Reset any pending transition\n this.transitionToPart = this.currentPartIndex;\n\n const part = this.currentPart;\n if (part) {\n let fillIndex = this.currentFillIndex;\n if (part.shuffleFills) {\n fillIndex = Math.floor(Math.random() * part.fills.length);\n } else {\n fillIndex++;\n if (fillIndex >= part.fills.length) {\n fillIndex = 0;\n }\n }\n\n const fill = part.fills[fillIndex];\n if (fill) {\n this.playFill(fill, wasPaused);\n }\n this.currentFillIndex = fillIndex;\n }\n }\n\n /**\n * Queue fill settings:\n * - Immediately (last half beat == next measure)\n * - Next half beat\n * - Next Beat\n * - Next Measure\n */\n playFill(fillTrack: SongTrack, immediately = false) {\n if (!this.currentTrack) return;\n this.currentTrackType = TrackType.FILL;\n\n this.queueFillTypeTrack(TrackType.FILL, fillTrack, false, immediately, {\n type: TrackType.MAIN,\n track: this.currentPart!.main!,\n loop: true,\n });\n }\n\n transitionFromPart = 0;\n transitionToPart = 0;\n transitionTrackPlaying = false;\n @action\n triggerStartTransition(partNumber: number) {\n if (this.currentTrackType === TrackType.TRANSITION) return;\n if (this.currentTrackType === TrackType.PAUSED) {\n this.unpause();\n this.stop();\n return;\n }\n\n let partIndex = 0;\n // Next part\n if (partNumber == 127) {\n partIndex = this.currentPartIndex + 1;\n if (partIndex >= this.song.parts.length) {\n partIndex = 0;\n }\n // Previous part\n } else if (partNumber == 126) {\n partIndex = this.currentPartIndex - 1;\n if (partIndex < 0) {\n partIndex = this.song.parts.length - 1;\n }\n } else {\n partIndex = partNumber - 1;\n }\n\n this.transitionFromPart = this.currentPartIndex;\n this.transitionToPart = constrainValue(\n partIndex,\n 0,\n this.song.parts.length - 1,\n );\n const part = this.currentPart;\n this.currentTrackType = TrackType.TRANSITION;\n if (part?.transition) {\n this.transitionTrackPlaying = true;\n this.#startTransition(part.transition);\n }\n }\n\n #startTransition(transitionTrack: SongTrack) {\n this.queueFillTypeTrack(TrackType.TRANSITION, transitionTrack, true);\n }\n\n @action\n triggerEndTransition() {\n if (!this.isPlaying) {\n this.start(this.transitionToPart);\n }\n if (!this.currentTrack) return;\n\n const nextPart = this.song.parts.at(this.transitionToPart);\n if (nextPart?.main) {\n this.currentFillIndex = -1;\n this.queue(TrackType.MAIN, nextPart.main, {\n loop: true,\n nextBar: true,\n });\n }\n this.transitionTrackPlaying = false;\n }\n\n private get currentPart() {\n return this.song.parts.at(this.currentPartIndex);\n }\n\n triggerOutro() {\n if (this.song.outro && this.song.outro.main) {\n this.unpause();\n this.playOutro(this.song.outro.main);\n } else {\n this.stop();\n }\n }\n\n playOutro(outroTrack: SongTrack) {\n this.currentTrackType = TrackType.OUTRO;\n this.queueFillTypeTrack(TrackType.OUTRO, outroTrack, false);\n }\n\n triggerFootSwitchLeft() {\n const part = this.currentPart;\n if (part && part.accentFileName) {\n const effect = this.projectManager.findEffect(part.accentFileName);\n if (effect) {\n playAccent(\n this.audioContext,\n this.drumsetVolume,\n effect,\n part.accentVolume,\n );\n }\n }\n }\n\n triggerFootSwitchRight() {\n clearTimeout(this.loopTimer);\n if (this.currentTrackType === TrackType.PAUSED) {\n this.unpause();\n this.playTrack(this.currentTrack!, TrackType.MAIN, true);\n } else {\n this.pause();\n }\n }\n\n pause() {\n if (this.currentTrack && this.currentTrackType !== TrackType.PAUSED) {\n this.playingEvents.forEach(([, note]) => note.stop());\n this.drumsetVolume.gain.setValueAtTime(0, this.audioContext.currentTime);\n this.currentTrackType = TrackType.PAUSED;\n this.playTrack(this.currentTrack!, TrackType.PAUSED, true);\n }\n }\n\n unpause() {\n if (this.currentTrackType === TrackType.PAUSED) {\n this.playingEvents.forEach(([, note]) => note.stop());\n const drumsetGain = (this.drumset?.volume ?? 100) / 100;\n this.drumsetVolume.gain.setValueAtTime(\n drumsetGain,\n this.audioContext.currentTime,\n );\n this.currentTrackType = TrackType.MAIN;\n }\n }\n\n playingEvents = new List<[number, AudioBufferSourceNode]>();\n loopTimer?: number;\n trackMarkerTimer?: number;\n scheduleEvents(\n track: SongTrack,\n type: TrackType,\n loop: boolean,\n playStart = 0,\n playFromTick = 0,\n playToTick = -1,\n eventStartIndex = -1,\n ) {\n if (!track) {\n throw new Error('No track to play');\n }\n if (!this.isPlaying) return;\n\n // Store this argument because we want to pass it through unmodified when buffering the next part of the track\n const playToTickArg = playToTick;\n\n const events = track.events;\n const time = this.audioContext.currentTime;\n\n if (playStart === 0) {\n // If there is no offset specified, then we start immediately at the current time\n playStart = time;\n }\n\n // How many MIDI events to buffer\n const eventsBuffer = track.barLength * 1;\n\n // What tick will we pay to in this buffer\n playToTick = Math.min(\n track.totalTicks,\n playToTick == -1 ? playFromTick + eventsBuffer : playToTick,\n );\n\n // How long is the buffer (before we allocate extra events if needed)\n const duration = (playToTick - playFromTick) / this.ticksPerSecond;\n\n // If we are playing to the end of the track, then we need to add the extra events (for a fill)\n if (playToTick == track.totalTicks) {\n playToTick += track.extraTicks;\n }\n\n // We’ve started the track from the beginning\n if (this.currentTrack !== track || playFromTick === 0) {\n // Reset track markers\n this.trackMarkerTimer = setTimeout(\n () => {\n if (type === TrackType.MAIN) {\n // Set the main part\n this.currentPartIndex = this.transitionToPart;\n }\n this.currentTrack = track;\n this.currentTrackType = type;\n // We need to calculate track start from track end because the track might start mid-way through\n this.trackEnd =\n playStart + (track.totalTicks - playFromTick) / this.ticksPerSecond;\n this.trackStart =\n this.trackEnd - track.totalTicks / this.ticksPerSecond;\n },\n (playStart - time) * 1000,\n );\n }\n\n // Determine the range of events to play\n let eventEndIndex = events.length;\n for (\n let i = Math.max(eventStartIndex, 0), ii = events.length;\n i < ii;\n i++\n ) {\n const trigPos = type === TrackType.MAIN ? 0 : track.trigPos;\n const tick = trigPos + events[i]!.tick;\n if (eventStartIndex < 0 && tick >= playFromTick) {\n eventStartIndex = i;\n }\n if (tick >= playToTick) {\n eventEndIndex = i;\n break;\n }\n }\n\n // If we have no notes to play, then we’re done\n if (eventStartIndex < 0) {\n eventStartIndex = eventEndIndex;\n }\n\n // Set a timer to revisit this function when the buffer is done\n this.loopTimer = setTimeout(\n () => {\n playFromTick = playFromTick + eventsBuffer;\n if (playFromTick > track.tickCount) {\n playFromTick = 0;\n eventEndIndex = 0;\n }\n\n let shouldLoop = loop;\n // We don’t want to loop if there is a queued track about to play\n if (this.trackQueue.first) {\n shouldLoop = false;\n }\n\n // playFromTick is greater than 0 if we’re buffering the next part of the track\n if (playFromTick > 0 || shouldLoop) {\n this.scheduleEvents(\n track,\n type,\n loop,\n playStart + duration,\n playFromTick,\n playToTickArg,\n eventEndIndex,\n );\n }\n },\n // Set the timeout to buffer the next part of the track in the last buffered beat\n (playStart + duration - time - this.secondsPerBeat) * 1000,\n );\n\n // If we’re buffering beyond the first part of track, then we don’t need the fill choke groups any more\n if (eventStartIndex > 0) {\n this.clearFillChokeGroups();\n }\n\n let event, onWhen, offWhen, instrument, note;\n // Loop through the events to be played\n for (let i = eventStartIndex; i < eventEndIndex; i++) {\n event = events[i]!;\n const trigPos = type === TrackType.MAIN ? 0 : track.trigPos;\n const tick = trigPos + event.tick;\n // Determine when to play and stop the note\n onWhen = playStart + (tick - playFromTick) / this.ticksPerSecond;\n // Will be used for non-percussion instruments\n offWhen = onWhen + event.length / this.ticksPerSecond;\n\n instrument = this.drumset?.instruments[event.note];\n if (instrument) {\n // Stop all instruments in the same choke group\n if (instrument.chokeGroup > 0) {\n const chokeGroup = this.getChokeGroup(instrument.chokeGroup);\n chokeGroup.choke(onWhen);\n }\n\n // Check if this note should be excluded because of a fill choke group\n if (!this.shouldNoteBeExcluded(instrument, onWhen)) {\n note = playInstrument(\n this.audioContext,\n this.drumsetVolume,\n instrument,\n onWhen,\n offWhen,\n event.velocity,\n );\n }\n\n if (note) {\n // Add the note to the choke group\n if (instrument.chokeGroup > 0) {\n this.addToChokeGroup(instrument.chokeGroup, note);\n }\n // Store the note so we can stop it when needed\n this.playingEvents.push([onWhen, note]);\n }\n\n // If we’re dealing with extra ticks for a fill, add them to a fill choke group\n if (tick >= track.totalTicks && instrument.fillChokeGroup > 0) {\n this.addToFillChokeGroup(instrument.fillChokeGroup, onWhen);\n }\n }\n }\n\n // Quick cleanup\n this.playingEvents.dropWhile(\n ([noteOn]) => noteOn < this.audioContext.currentTime,\n );\n }\n\n shouldNoteBeExcluded(instrument: Instrument, onWhen: number) {\n if (instrument.fillChokeGroup === 0) return false;\n\n const fillChokeGroup = this.getFillChokeGroup(instrument.fillChokeGroup);\n let delaySeconds = this.secondsPerSixteenth;\n if (instrument.fillChokeDelay === 0) {\n // 1/4\n delaySeconds = this.secondsPerSixteenth * 4;\n } else if (instrument.fillChokeDelay === 1) {\n // 1/8\n delaySeconds = this.secondsPerSixteenth * 2;\n } else {\n // 1/16\n }\n return fillChokeGroup.some((when) => {\n return onWhen >= when - delaySeconds && onWhen < when + delaySeconds;\n });\n }\n}\n\ndeclare module '@ember/service' {\n interface Registry {\n 'virtual-pedal': VirtualPedalService;\n }\n}\n","export default function base64ToArrayBuffer(base64: string) {\n const binaryString = window.atob(base64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n}\n","export default function bbffFilename(name: string) {\n return `C:/Users/BBFF/${name}`;\n}\n","export default function buildGainTable() {\n const gainTable: number[][] = Array.from(\n { length: 128 },\n () => new Array(128),\n );\n let top_db;\n let req_db;\n let dif_db;\n\n for (let i = 1; i < 128; i++) {\n top_db = -20.0 * Math.log10(127.0 / i);\n for (let j = 1; j <= i; j++) {\n req_db = -20.0 * Math.log10(127.0 / j);\n dif_db = req_db - top_db;\n\n // Convert dB into fractional gain\n gainTable[i]![j] = Math.pow(10.0, dif_db / 20.0);\n }\n }\n return gainTable;\n}\n","export default function constrainValue(\n value: number,\n min: number,\n max: number,\n) {\n return Math.min(Math.max(value, min), max);\n}\n","// This is here for completeness but, while it generates a CRC correctly, it has never matched what the original BBM did.\n\nconst INITIAL = unsigned(~0);\nconst CRC32_TABLE = new Uint32Array([\n 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,\n 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,\n 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,\n 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,\n 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,\n 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,\n 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,\n 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,\n 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,\n 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,\n 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,\n 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,\n 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,\n 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,\n 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,\n 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,\n 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,\n 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,\n 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,\n 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,\n 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,\n 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,\n 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,\n 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,\n 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,\n 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,\n 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,\n 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,\n 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,\n 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,\n 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,\n 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,\n 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,\n 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,\n 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,\n 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,\n 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,\n 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,\n 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,\n 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,\n 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,\n 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,\n 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,\n]);\n\n// These are macros in the original C code\nfunction crc_index(c: number) {\n return c & 0xff;\n}\n\nfunction crc_shifted(c: number) {\n return c >>> 8;\n}\n\n// Force Javascript int to unsigned\nfunction unsigned(n: number) {\n return n >>> 0;\n}\n\nexport default class Crc32 {\n crc: number;\n\n constructor() {\n this.crc = INITIAL;\n }\n\n update(buffer: ArrayBuffer, length: number) {\n let crc = this.crc;\n let dataView = new DataView(buffer);\n let i = 0;\n\n // Process the bytes one by one until word aligned\n for (; length > 0 && length % 4 !== 0; length--) {\n crc =\n CRC32_TABLE[crc_index(crc) ^ dataView.getUint8(i)]! ^ crc_shifted(crc);\n i++;\n }\n\n // While word aligned, process word per word\n while (length >= 4) {\n crc ^= dataView.getUint32(i, true);\n for (let j = 0; j < 4; j++) {\n crc = CRC32_TABLE[crc_index(crc)]! ^ crc_shifted(crc);\n }\n length -= 4;\n i += 4;\n }\n\n // Process remaining bytes that are not word aligned\n while (length--) {\n crc =\n CRC32_TABLE[crc_index(crc) ^ dataView.getUint8(i)]! ^ crc_shifted(crc);\n i++;\n }\n\n this.crc = unsigned(crc);\n return this;\n }\n\n getCRC(final = false) {\n let crc = this.crc;\n if (final) {\n crc ^= INITIAL;\n this.reset();\n }\n\n return unsigned(crc);\n }\n\n peekCRC(final = false) {\n if (final) {\n return unsigned(this.crc ^ INITIAL);\n }\n\n return this.crc;\n }\n\n reset() {\n this.crc = INITIAL;\n }\n}\n","export default function elementExists(\n argument: T | undefined,\n): argument is T {\n return argument !== undefined;\n}\n","export default function fileSize(size: number) {\n const kb = 1024;\n const mb = kb * 1024;\n // Return size in bytes, kilobytes, or megabytes\n if (size >= mb) {\n return `${(size / mb).toFixed(2)} MB`;\n }\n if (size >= kb) {\n return `${(size / kb).toFixed(2)} KB`;\n }\n return `${size} B`;\n}\n","type GmMidiInstrument = {\n id: number;\n note: string;\n name: string;\n};\n\nconst gmDrumMap = new Map();\n\ngmDrumMap.set(35, { id: 35, note: 'B0', name: 'Acoustic Bass Drum' });\ngmDrumMap.set(36, { id: 36, note: 'C1', name: 'Kick Drum' });\ngmDrumMap.set(37, { id: 37, note: 'C#1', name: 'Side Stick' });\ngmDrumMap.set(38, { id: 38, note: 'D1', name: 'Snare' });\ngmDrumMap.set(39, { id: 39, note: 'Eb1', name: 'Hand Clap' });\ngmDrumMap.set(40, { id: 40, note: 'E1', name: 'Electric Snare' });\ngmDrumMap.set(41, { id: 41, note: 'F1', name: 'Low Floor Tom' });\ngmDrumMap.set(42, { id: 42, note: 'F#1', name: 'Hi-Hat Closed' });\ngmDrumMap.set(43, { id: 43, note: 'G1', name: 'High Floor Tom' });\ngmDrumMap.set(44, { id: 44, note: 'Ab1', name: 'Pedal Hi-Hat' });\ngmDrumMap.set(45, { id: 45, note: 'A1', name: 'Low Tom' });\ngmDrumMap.set(46, { id: 46, note: 'Bb1', name: 'Hi-Hat Open' });\ngmDrumMap.set(47, { id: 47, note: 'B1', name: 'Low-Mid Tom' });\ngmDrumMap.set(48, { id: 48, note: 'C2', name: 'Hi Mid Tom' });\ngmDrumMap.set(49, { id: 49, note: 'C#2', name: 'Crash Cymbal 1' });\ngmDrumMap.set(50, { id: 50, note: 'D2', name: 'High Tom' });\ngmDrumMap.set(51, { id: 51, note: 'Eb2', name: 'Ride Cymbal 1' });\ngmDrumMap.set(52, { id: 52, note: 'E2', name: 'Chinese Cymbal' });\ngmDrumMap.set(53, { id: 53, note: 'F2', name: 'Ride Bell' });\ngmDrumMap.set(54, { id: 54, note: 'F#2', name: 'Tambourine' });\ngmDrumMap.set(55, { id: 55, note: 'G2', name: 'Splash Cymbal' });\ngmDrumMap.set(56, { id: 56, note: 'Ab2', name: 'Cowbell' });\ngmDrumMap.set(57, { id: 57, note: 'A2', name: 'Crash Cymbal 2' });\ngmDrumMap.set(58, { id: 58, note: 'Bb2', name: 'Vibraslap' });\ngmDrumMap.set(59, { id: 59, note: 'B2', name: 'Ride Cymbal 2' });\ngmDrumMap.set(60, { id: 60, note: 'C3', name: 'Hi Bongo' });\ngmDrumMap.set(61, { id: 61, note: 'C#3', name: 'Low Bongo' });\ngmDrumMap.set(62, { id: 62, note: 'D3', name: 'Mute Hi Conga' });\ngmDrumMap.set(63, { id: 63, note: 'Eb3', name: 'Open Hi Conga' });\ngmDrumMap.set(64, { id: 64, note: 'E3', name: 'Low Conga' });\ngmDrumMap.set(65, { id: 65, note: 'F3', name: 'High Timbale' });\ngmDrumMap.set(66, { id: 66, note: 'F#3', name: 'Low Timbale' });\ngmDrumMap.set(67, { id: 67, note: 'G3', name: 'High Agogo' });\ngmDrumMap.set(68, { id: 68, note: 'Ab3', name: 'Low Agogo' });\ngmDrumMap.set(69, { id: 69, note: 'A3', name: 'Cabasa' });\ngmDrumMap.set(70, { id: 70, note: 'Bb3', name: 'Maracas' });\ngmDrumMap.set(71, { id: 71, note: 'B3', name: 'Short Whistle' });\ngmDrumMap.set(72, { id: 72, note: 'C4', name: 'Long Whistle' });\ngmDrumMap.set(73, { id: 73, note: 'C#4', name: 'Short Guiro' });\ngmDrumMap.set(74, { id: 74, note: 'D4', name: 'Long Guiro' });\ngmDrumMap.set(75, { id: 75, note: 'Eb4', name: 'Claves' });\ngmDrumMap.set(76, { id: 76, note: 'E4', name: 'Hi Wood Block' });\ngmDrumMap.set(77, { id: 77, note: 'F4', name: 'Low Wood Block' });\ngmDrumMap.set(78, { id: 78, note: 'F#4', name: 'Mute Cuica' });\ngmDrumMap.set(79, { id: 79, note: 'G4', name: 'Open Cuica' });\ngmDrumMap.set(80, { id: 80, note: 'Ab4', name: 'Mute Triangle' });\ngmDrumMap.set(81, { id: 81, note: 'A4', name: 'Open Triangle' });\n\nexport default gmDrumMap;\n","class Node {\n data: T;\n next?: Node;\n\n constructor(data: T) {\n this.data = data;\n }\n}\n\nclass List {\n head?: Node;\n tail?: Node;\n length = 0;\n\n /**\n * adds an element to the end of the list.\n */\n push(data: T) {\n const node = new Node(data);\n if (!this.head) {\n this.head = node;\n this.tail = node;\n } else {\n this.tail!.next = node;\n this.tail = node;\n }\n this.length++;\n }\n\n /**\n * Removes the element from the font of the list and returns it.\n */\n shift(): T | undefined {\n if (!this.head) {\n return undefined;\n }\n const data = this.head.data;\n this.head = this.head.next;\n if (!this.head) {\n this.tail = undefined;\n }\n this.length--;\n return data;\n }\n\n /**\n * Removes the element from the end of the list and returns it.\n */\n pop(): T | undefined {\n if (!this.head) {\n return undefined;\n }\n let current = this.head;\n let prev: Node | undefined;\n while (current.next) {\n prev = current;\n current = current.next;\n }\n if (prev) {\n prev.next = undefined;\n this.tail = prev;\n } else {\n this.head = undefined;\n this.tail = undefined;\n }\n this.length--;\n return current.data;\n }\n\n /**\n * Looks at the first element of the list without removing it.\n */\n get first() {\n return this.head?.data;\n }\n\n /**\n * Looks at the last element of the list without removing it.\n */\n get last() {\n return this.tail?.data;\n }\n\n /**\n * Clears the list.\n */\n clear() {\n this.head = undefined;\n this.tail = undefined;\n this.length = 0;\n }\n\n /**\n * Removes all elements from the front of the list that match the callback.\n * Resets the list head to the first element that does not match the callback.\n */\n dropWhile(callback: (data: T) => boolean) {\n let current = this.head;\n let dropped: T[] = [];\n while (current && callback(current.data)) {\n dropped.push(current.data);\n current = current.next;\n this.length--;\n }\n this.head = current;\n return dropped;\n }\n\n /**\n * Removes all elements from the end of the list after the callback returns false.\n * Returns all dropped elements\n */\n dropAfter(callback: (data: T) => boolean) {\n if (!this.head) {\n return [];\n }\n\n if (!callback(this.head.data)) {\n const data = this.toArray();\n this.clear();\n return data;\n }\n\n let current: Node | undefined = this.head;\n let prev: Node | undefined;\n while (current && callback(current.data)) {\n prev = current;\n current = current.next;\n }\n let dropped: T[] = [];\n if (prev) {\n prev.next = undefined;\n this.tail = prev;\n while (current) {\n dropped.push(current.data);\n current = current.next;\n this.length--;\n }\n }\n return dropped;\n }\n\n /**\n * Iterates through the list and calls the callback for each element.\n */\n forEach(callback: (data: T) => void) {\n let current = this.head;\n while (current) {\n callback(current.data);\n current = current.next;\n }\n }\n\n /**\n * Returns an array of all the elements in the list.\n */\n toArray() {\n const result: T[] = [];\n this.forEach((data) => {\n result.push(data);\n });\n return result;\n }\n}\n\nexport default List;\n","// How many quarterTicks makes up one beat\nexport function beatFactor(timeSignatureDenomiator: number) {\n return timeSignatureDenomiator / 4;\n}\n\nexport function beatTicks(\n tickToQuarter: number,\n timeSignatureDenomiator: number,\n) {\n return tickToQuarter / beatFactor(timeSignatureDenomiator);\n}\n\nexport function beat(\n step: number,\n division: number,\n timeSignatureNumerator: number,\n timeSignatureDenomiator: number,\n) {\n const stepsPerBar =\n timeSignatureNumerator / (timeSignatureDenomiator / division);\n return step * (timeSignatureNumerator / stepsPerBar);\n}\n\nexport function barBeat(\n step: number,\n division: number,\n timeSignatureNumerator: number,\n timeSignatureDenomiator: number,\n) {\n return (\n beat(step, division, timeSignatureNumerator, timeSignatureDenomiator) %\n timeSignatureNumerator\n );\n}\n\nexport function bar(\n step: number,\n division: number,\n timeSignatureNumerator: number,\n timeSignatureDenomiator: number,\n) {\n return Math.floor(\n step / (timeSignatureNumerator / (timeSignatureDenomiator / division)),\n );\n}\n\nexport default {\n beatFactor,\n beatTicks,\n beat,\n barBeat,\n bar,\n};\n","const nameFilter = \"[A-Za-z0-9 _\\\\-()/&+.']\";\nexport default nameFilter;\n","import type { EffectFile } from 'editor/services/project-manager';\n\nexport default async function playAccent(\n audioContext: AudioContext,\n masterGainNode: GainNode,\n effect: EffectFile,\n volume = 100,\n) {\n if (audioContext.state === 'suspended') {\n audioContext.resume();\n }\n const audio = await effect.getAudio(audioContext);\n if (audio) {\n const gainNode = new GainNode(audioContext, { gain: volume });\n gainNode.connect(masterGainNode);\n\n const source = audioContext.createBufferSource();\n source.connect(gainNode);\n source.buffer = audio;\n gainNode.gain.setValueAtTime(volume / 100, audioContext.currentTime);\n source.start();\n }\n}\n","import type { Instrument, Velocity } from 'editor/models/drumset';\nimport constrainValue from './constrain-value';\nimport buildGainTable from './build-gain-table';\n\nconst GAIN_TABLE = buildGainTable();\nlet velocityIndex = -1;\n\nexport default function playInstrument(\n audioContext: BaseAudioContext,\n masterGainNode: GainNode,\n instrument: Instrument,\n onWhen = 0,\n offWhen = 0,\n velocityValue = 127,\n) {\n // Ensure we don’t have a negative value\n onWhen = onWhen < 0 ? 0 : onWhen;\n const [gainNode, velocity, volume] = getGainNodeForVelocityRandom(\n audioContext,\n masterGainNode,\n instrument,\n velocityValue,\n )!;\n if (velocity && gainNode) {\n if (velocity.audio) {\n const source = audioContext.createBufferSource();\n source.connect(gainNode);\n source.buffer = velocity.audio;\n source.start(onWhen);\n if (offWhen > onWhen && instrument.nonPercussion) {\n gainNode.gain.cancelScheduledValues(onWhen);\n gainNode.gain.setValueAtTime(volume, offWhen);\n gainNode.gain.linearRampToValueAtTime(0.01, offWhen + 0.01);\n source.stop(offWhen + 0.015);\n }\n return source;\n } else {\n console.error('No audio for instrument');\n }\n }\n}\n\nexport function getGainNodeForVelocity(\n audioContext: BaseAudioContext,\n masterGainNode: GainNode,\n instrument: Instrument,\n velocityValue: number,\n): readonly [GainNode | undefined, Velocity | undefined, volume: number] {\n velocityValue = constrainValue(velocityValue, 0, 127);\n if (instrument.velocities.length === 0) {\n return [undefined, undefined, 0];\n }\n let highIndex = instrument.velocities.length - 1;\n while (instrument.velocities[highIndex]!.vel > velocityValue) {\n highIndex--;\n }\n\n const groupVelocity = instrument.velocities[highIndex]!.vel;\n let lowIndex = highIndex;\n while (instrument.velocities[lowIndex]!.vel == groupVelocity) {\n lowIndex--;\n if (lowIndex < 0) {\n break;\n }\n }\n lowIndex++;\n if (velocityIndex < lowIndex || velocityIndex > highIndex) {\n velocityIndex = lowIndex;\n }\n const velocity = instrument.velocities[velocityIndex];\n if (velocity) {\n let volume = 0;\n if (highIndex < instrument.velocities.length - 1) {\n volume =\n GAIN_TABLE[instrument.velocities[highIndex + 1]!.vel - 1]![\n velocityValue\n ] ?? 0;\n } else {\n volume = GAIN_TABLE[127]![velocityValue] ?? 0;\n }\n volume *= instrument.volume / 100;\n const gainNode = new GainNode(audioContext, { gain: volume });\n gainNode.connect(masterGainNode);\n velocityIndex++;\n if (velocityIndex > highIndex) {\n velocityIndex = lowIndex;\n }\n return [gainNode, velocity, volume];\n }\n return [undefined, undefined, 0];\n}\n\nexport function getGainNodeForVelocityRandom(\n audioContext: BaseAudioContext,\n masterGainNode: GainNode,\n instrument: Instrument,\n velocityValue: number,\n): readonly [GainNode | undefined, Velocity | undefined, volume: number] {\n velocityValue = constrainValue(velocityValue, 0, 127);\n if (instrument.velocities.length === 0) {\n return [undefined, undefined, 0];\n }\n let highIndex = instrument.velocities.length - 1;\n while (instrument.velocities[highIndex]!.vel > velocityValue) {\n highIndex--;\n }\n\n const groupVelocity = instrument.velocities[highIndex]!.vel;\n let lowIndex = highIndex;\n while (instrument.velocities[lowIndex]!.vel == groupVelocity) {\n lowIndex--;\n if (lowIndex < 0) {\n break;\n }\n }\n lowIndex++;\n // get a random index between lowIndex and including highIndex\n const velocityIndex = Math.floor(\n Math.random() * (highIndex - lowIndex + 1) + lowIndex,\n );\n const velocity = instrument.velocities[velocityIndex];\n if (velocity) {\n let volume = 0;\n if (highIndex < instrument.velocities.length - 1) {\n volume =\n GAIN_TABLE[instrument.velocities[highIndex + 1]!.vel - 1]![\n velocityValue\n ] ?? 0;\n } else {\n volume = GAIN_TABLE[127]![velocityValue] ?? 0;\n }\n volume *= instrument.volume / 100;\n const gainNode = new GainNode(audioContext, { gain: volume });\n gainNode.connect(masterGainNode);\n return [gainNode, velocity, volume];\n }\n return [undefined, undefined, 0];\n}\n\nexport function resetVelocityIndex() {\n velocityIndex = -1;\n}\n","export default async function promiseBatch(\n items: Array,\n limit: number,\n fn: (item: any) => Promise,\n): Promise {\n let results: PromiseSettledResult[] = [];\n for (let start = 0; start < items.length; start += limit) {\n const end = start + limit > items.length ? items.length : start + limit;\n const slicedResults = await Promise.allSettled(\n items.slice(start, end).map(fn),\n );\n results = [...results, ...slicedResults];\n }\n return results.map((result) => {\n if (result.status === 'rejected') {\n throw result.reason;\n } else {\n return result.value;\n }\n });\n}\n","export default class Reader {\n dv: DataView;\n offset: number;\n\n constructor(dv: DataView, offset = 0) {\n this.dv = dv;\n this.offset = offset;\n }\n\n get length() {\n return this.dv.byteLength;\n }\n\n get eof() {\n return this.offset >= this.dv.byteLength;\n }\n\n get remaining() {\n return this.dv.byteLength - this.offset;\n }\n\n seek(offset: number) {\n this.offset = offset;\n return this;\n }\n\n getUint8() {\n return this.dv.getUint8(this.offset++);\n }\n\n getByte() {\n return this.getUint8();\n }\n\n getUint16(littleEndian = true) {\n const value = this.dv.getUint16(this.offset, littleEndian);\n this.offset += 2;\n return value;\n }\n\n getUShort(littleEndian = true) {\n return this.getUint16(littleEndian);\n }\n\n getInt16(littleEndian = true) {\n const value = this.dv.getInt16(this.offset, littleEndian);\n this.offset += 2;\n return value;\n }\n\n getShort(littleEndian = true) {\n return this.getInt16(littleEndian);\n }\n\n getUint32(littleEndian = true) {\n const value = this.dv.getUint32(this.offset, littleEndian);\n this.offset += 4;\n return value;\n }\n\n getUint(littleEndian = true) {\n return this.getUint32(littleEndian);\n }\n\n getInt32(littleEndian = true) {\n const value = this.dv.getInt32(this.offset, littleEndian);\n this.offset += 4;\n return value;\n }\n\n getInt(littleEndian = true) {\n return this.getInt32(littleEndian);\n }\n\n // Get a variable length integer\n getVarInt() {\n let value = 0;\n let byte;\n let count = 0;\n do {\n byte = this.getByte();\n value = (value << 7) + (byte & 0x7f);\n count++;\n } while (byte & 0x80 && count < 4);\n return value;\n }\n\n getBytes(length: number) {\n const value = this.dv.buffer.slice(this.offset, this.offset + length);\n this.offset += length;\n return value;\n }\n\n getString(length: number, nullTerminated = true) {\n const bytes = this.getBytes(length);\n const view = new Uint8Array(bytes);\n if (!nullTerminated) {\n return new TextDecoder('utf-8').decode(view);\n }\n\n const arr: number[] = [];\n for (let i = 0, ii = view.length; i < ii; i++) {\n const char: number = view[i] ?? 0;\n if (char === 0) {\n break;\n }\n arr.push(char);\n }\n return new TextDecoder('utf-8').decode(new Uint8Array(arr));\n }\n\n streamString(littleEndian = true) {\n const length = this.getUint(littleEndian);\n const bytes = [];\n for (let i = 0, ii = length / 2; i < ii; i++) {\n const char = this.getUint16(littleEndian);\n bytes.push(char);\n }\n return new TextDecoder('utf-16').decode(new Uint16Array(bytes));\n }\n}\n","// from https://bost.ocks.org/mike/shuffle/\nexport default function shuffle(array: any[]) {\n var m = array.length,\n t,\n i;\n\n // While there remain elements to shuffle…\n while (m) {\n // Pick a remaining element…\n i = Math.floor(Math.random() * m--);\n\n // And swap it with the current element.\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","export default function unique(value: any, index: number, self: any[]) {\n return self.indexOf(value) === index;\n}\n","export default async function wait(\n callback: () => T | Promise,\n): Promise {\n try {\n document.body.classList.add('wait');\n const result = await new Promise((resolve) => {\n setTimeout(async function () {\n const result = await callback();\n resolve(result);\n }, 0);\n });\n return result;\n } finally {\n document.body.classList.remove('wait');\n }\n}\n","export default class Writer {\n buffer: ArrayBuffer;\n dv: DataView;\n offset: number;\n growBy: number;\n\n constructor(expectedLength = 1024, growBy = 1024) {\n this.buffer = new ArrayBuffer(expectedLength);\n this.dv = new DataView(this.buffer);\n this.offset = 0;\n this.growBy = growBy;\n }\n\n get eof() {\n return this.offset >= this.dv.byteLength;\n }\n\n updateOffset(offset: number) {\n this.offset += offset;\n if (this.offset > this.buffer.byteLength) {\n const newBuffer = new Uint8Array(this.offset + this.growBy);\n newBuffer.set(new Uint8Array(this.buffer.slice(0, this.offset)));\n this.buffer = newBuffer.buffer;\n this.dv = new DataView(this.buffer);\n }\n }\n\n append(buffer: ArrayBuffer) {\n const tmp = new Uint8Array(this.offset + buffer.byteLength);\n tmp.set(new Uint8Array(this.buffer.slice(0, this.offset)), 0);\n tmp.set(new Uint8Array(buffer), this.offset);\n this.buffer = tmp.buffer;\n this.dv = new DataView(this.buffer);\n this.offset = this.buffer.byteLength;\n return this;\n }\n\n setBytes(array: Uint8Array) {\n array.forEach((el) => {\n this.setByte(el);\n });\n }\n\n close() {\n return this.buffer.slice(0, this.offset);\n }\n\n setUint8(value: number) {\n const offset = this.offset;\n this.updateOffset(1);\n this.dv.setUint8(offset, value);\n return this;\n }\n\n setByte(value: number) {\n return this.setUint8(value);\n }\n\n setUint16(value: number, littleEndian = true) {\n const offset = this.offset;\n this.updateOffset(2);\n this.dv.setUint16(offset, value, littleEndian);\n return this;\n }\n\n setUShort(value: number, littleEndian = true) {\n return this.setUint16(value, littleEndian);\n }\n\n setInt16(value: number, littleEndian = true) {\n const offset = this.offset;\n this.updateOffset(2);\n this.dv.setInt16(offset, value, littleEndian);\n return this;\n }\n\n setShort(value: number, littleEndian = true) {\n return this.setInt16(value, littleEndian);\n }\n\n setUint32(value: number, littleEndian = true) {\n const offset = this.offset;\n this.updateOffset(4);\n this.dv.setUint32(offset, value, littleEndian);\n return this;\n }\n\n setUint(value: number, littleEndian = true) {\n return this.setUint32(value, littleEndian);\n }\n\n setInt32(value: number, littleEndian = true) {\n const offset = this.offset;\n this.updateOffset(4);\n this.dv.setInt32(offset, value, littleEndian);\n return this;\n }\n\n setInt(value: number, littleEndian = true) {\n return this.setInt32(value, littleEndian);\n }\n\n // Writes out a variable length integer with a maximum of 4 bytes\n setVarInt(value: number) {\n let buffer = value & 0x7f;\n\n while ((value = value >> 7)) {\n buffer <<= 8;\n buffer |= (value & 0x7f) | 0x80;\n }\n\n this.setByte(buffer & 0xff);\n while (buffer & 0x80) {\n buffer >>= 8;\n this.setByte(buffer & 0xff);\n }\n return this;\n }\n\n // Writes the string out in bytes.\n // If padTo, then the remaining length is filled with 0s. (null terminated is ignored)\n // If nullTerminated, then a null byte is appended to the end.\n setString(value: string, nullTerminated = true, padTo = 0) {\n for (let i = 0, ii = value.length; i < ii; i++) {\n const char = value.charCodeAt(i);\n this.setUint8(char);\n }\n if (padTo && value.length < padTo) {\n for (let i = value.length; i < padTo; i++) {\n this.setUint8(0);\n }\n return this;\n }\n if (nullTerminated) {\n this.setUint8(0);\n }\n return this;\n }\n\n streamString(str: string, littleEndian = true) {\n this.setUint(str.length * 2, littleEndian);\n for (var i = 0, strLen = str.length; i < strLen; i++) {\n this.setInt16(str.charCodeAt(i), littleEndian);\n }\n }\n}\n","var _dec, _class2, _descriptor;\nfunction _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }\nfunction _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'transform-class-properties is enabled and runs after the decorators transform.'); }\n/**\n # Overview\n\n This package provides the `DataAdapter` which the [Ember Inspector](https://github.com/emberjs/ember-inspector)\n uses to subscribe and retrieve information for the `data` tab in the inspector.\n\n This package adds roughly .6 KB when minified and compressed to your application in production; however,\n you can opt out of shipping this addon in production via options in `ember-cli-build.js`\n\n ```js\n let app = new EmberApp(defaults, {\n emberData: {\n includeDataAdapterInProduction: false\n }\n });\n ```\n\n When using `ember-data` as a dependency of your app, the default is to ship the inspector support to production.\n\n When not using `ember-data` as a dependency but instead using EmberData via declaring specific `@ember-data/`\n dependencies the default is to not ship to production.\n\n @module @ember-data/debug\n @main @ember-data/debug\n*/\nimport { A } from '@ember/array';\nimport { assert } from '@ember/debug';\nimport DataAdapter from '@ember/debug/data-adapter';\nimport { addObserver, removeObserver } from '@ember/object/observers';\nimport { inject as service } from '@ember/service';\nimport { capitalize, underscore } from '@ember/string';\nconst StoreTypesMap = new WeakMap();\nfunction typesMapFor(store) {\n let typesMap = StoreTypesMap.get(store);\n if (typesMap === undefined) {\n typesMap = new Map();\n StoreTypesMap.set(store, typesMap);\n }\n return typesMap;\n}\n\n/**\n Implements `@ember/debug/data-adapter` with for EmberData\n integration with the ember-inspector.\n\n @class InspectorDataAdapter\n @extends DataAdapter\n @private\n*/\nlet _class = (_dec = service('store'), (_class2 = class _class2 extends DataAdapter {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"store\", _descriptor, this);\n }\n /**\n Specifies how records can be filtered based on the state of the record\n Records returned will need to have a `filterValues`\n property with a key for every name in the returned array\n @method getFilters\n @private\n @return {Array} List of objects defining filters\n The object should have a `name` and `desc` property\n */\n getFilters() {\n return [{\n name: 'isNew',\n desc: 'New'\n }, {\n name: 'isModified',\n desc: 'Modified'\n }, {\n name: 'isClean',\n desc: 'Clean'\n }];\n }\n _nameToClass(type) {\n return this.store.modelFor(type);\n }\n\n /**\n Fetch the model types and observe them for changes.\n Maintains the list of model types without needing the Model package for detection.\n @method watchModelTypes\n @private\n @param {Function} typesAdded Callback to call to add types.\n Takes an array of objects containing wrapped types (returned from `wrapModelType`).\n @param {Function} typesUpdated Callback to call when a type has changed.\n Takes an array of objects containing wrapped types.\n @return {Function} Method to call to remove all observers\n */\n watchModelTypes(typesAdded, typesUpdated) {\n const {\n store\n } = this;\n const unsub = store.notifications.subscribe('resource', (identifier, notificationType) => {\n if (notificationType === 'added') {\n this.watchTypeIfUnseen(store, discoveredTypes, identifier.type, typesAdded, typesUpdated, _releaseMethods);\n }\n });\n const __getResourceCache = store._instanceCache.getResourceCache;\n const _releaseMethods = [() => {\n store.notifications.unsubscribe(unsub);\n }];\n const discoveredTypes = typesMapFor(store);\n Object.keys(store.identifierCache._cache.resourcesByType).forEach(type => {\n discoveredTypes.set(type, false);\n });\n\n // Add any models that were added during initialization of the app, before the inspector was opened\n discoveredTypes.forEach((_, type) => {\n this.watchTypeIfUnseen(store, discoveredTypes, type, typesAdded, typesUpdated, _releaseMethods);\n });\n let release = () => {\n _releaseMethods.forEach(fn => fn());\n store._instanceCache.getResourceCache = __getResourceCache;\n // reset the list so the models can be added if the inspector is re-opened\n // the entries are set to false instead of removed, since the models still exist in the app\n // we just need the inspector to become aware of them\n discoveredTypes.forEach((value, key) => {\n discoveredTypes.set(key, false);\n });\n this.releaseMethods.removeObject(release);\n };\n this.releaseMethods.pushObject(release);\n return release;\n }\n\n /**\n * Loop over the discovered types and use the callbacks from watchModelTypes to notify\n * the consumer of this adapter about the mdoels.\n *\n * @method watchTypeIfUnseen\n * @param {store} store\n * @param {Map} discoveredTypes\n * @param {String} type\n * @param {Function} typesAdded\n * @param {Function} typesUpdated\n * @param {Array} releaseMethods\n * @private\n */\n watchTypeIfUnseen(store, discoveredTypes, type, typesAdded, typesUpdated, releaseMethods) {\n if (discoveredTypes.get(type) !== true) {\n let klass = store.modelFor(type);\n let wrapped = this.wrapModelType(klass, type);\n releaseMethods.push(this.observeModelType(type, typesUpdated));\n typesAdded([wrapped]);\n discoveredTypes.set(type, true);\n }\n }\n\n /**\n Creates a human readable string used for column headers\n @method columnNameToDesc\n @private\n @param {String} name The attribute name\n @return {String} Human readable string based on the attribute name\n */\n columnNameToDesc(name) {\n return capitalize(underscore(name).replace(/_/g, ' ').trim());\n }\n\n /**\n Get the columns for a given model type\n @method columnsForType\n @private\n @param {Model} typeClass\n @return {Array} An array of columns of the following format:\n name: {String} The name of the column\n desc: {String} Humanized description (what would show in a table column name)\n */\n columnsForType(typeClass) {\n let columns = [{\n name: 'id',\n desc: 'Id'\n }];\n let count = 0;\n let self = this;\n typeClass.attributes.forEach((meta, name) => {\n if (count++ > self.attributeLimit) {\n return false;\n }\n let desc = this.columnNameToDesc(name);\n columns.push({\n name: name,\n desc: desc\n });\n });\n return columns;\n }\n\n /**\n Fetches all loaded records for a given type\n @method getRecords\n @private\n @param {Model} modelClass of the record\n @param {String} modelName of the record\n @return {Array} An array of Model records\n This array will be observed for changes,\n so it should update when new records are added/removed\n */\n getRecords(modelClass, modelName) {\n if (arguments.length < 2) {\n // Legacy Ember.js < 1.13 support\n let containerKey = modelClass._debugContainerKey;\n if (containerKey) {\n let match = containerKey.match(/model:(.*)/);\n if (match !== null) {\n modelName = match[1];\n }\n }\n }\n assert('Cannot find model name. Please upgrade to Ember.js >= 1.13 for Ember Inspector support', !!modelName);\n return this.store.peekAll(modelName);\n }\n\n /**\n Gets the values for each column\n This is the attribute values for a given record\n @method getRecordColumnValues\n @private\n @param {Model} record to get values from\n @return {Object} Keys should match column names defined by the model type\n */\n getRecordColumnValues(record) {\n let count = 0;\n let columnValues = {\n id: record.id\n };\n record.eachAttribute(key => {\n if (count++ > this.attributeLimit) {\n return false;\n }\n columnValues[key] = record[key];\n });\n return columnValues;\n }\n\n /**\n Returns keywords to match when searching records\n @method getRecordKeywords\n @private\n @param {Model} record\n @return {Array} Relevant keywords for search based on the record's attribute values\n */\n getRecordKeywords(record) {\n let keywords = [];\n let keys = A(['id']);\n record.eachAttribute(key => keys.push(key));\n keys.forEach(key => keywords.push(record[key]));\n return keywords;\n }\n\n /**\n Returns the values of filters defined by `getFilters`\n These reflect the state of the record\n @method getRecordFilterValues\n @private\n @param {Model} record\n @return {Object} The record state filter values\n */\n getRecordFilterValues(record) {\n return {\n isNew: record.isNew,\n isModified: record.hasDirtyAttributes && !record.isNew,\n isClean: !record.hasDirtyAttributes\n };\n }\n\n /**\n Returns a color that represents the record's state\n Possible colors: black, blue, green\n @method getRecordColor\n @private\n @param {Model} record\n @return {String} The record color\n */\n getRecordColor(record) {\n let color = 'black';\n if (record.isNew) {\n color = 'green';\n } else if (record.hasDirtyAttributes) {\n color = 'blue';\n }\n return color;\n }\n\n /**\n Observes all relevant properties and re-sends the wrapped record\n when a change occurs\n @method observeRecord\n @private\n @param {Model} record\n @param {Function} recordUpdated Callback used to notify changes\n @return {Function} The function to call to remove all observers\n */\n observeRecord(record, recordUpdated) {\n let releaseMethods = A();\n let keysToObserve = A(['id', 'isNew', 'hasDirtyAttributes']);\n record.eachAttribute(key => keysToObserve.push(key));\n let adapter = this;\n keysToObserve.forEach(function (key) {\n let handler = function () {\n recordUpdated(adapter.wrapRecord(record));\n };\n addObserver(record, key, handler);\n releaseMethods.push(function () {\n removeObserver(record, key, handler);\n });\n });\n let release = function () {\n releaseMethods.forEach(fn => fn());\n };\n return release;\n }\n}, (_descriptor = _applyDecoratedDescriptor(_class2.prototype, \"store\", [_dec], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n})), _class2));\nexport { _class as default };","import { deprecate, assert, warn, inspect } from '@ember/debug';\nimport { peekCache } from '@ember-data/store/-private';\nimport { macroCondition, getOwnConfig } from '@embroider/macros';\nfunction coerceId(id) {\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_NON_STRICT_ID)) {\n let normalized;\n if (id === null || id === undefined || id === '') {\n normalized = null;\n } else {\n normalized = String(id);\n }\n deprecate(`The resource id '<${typeof id}> ${String(id)} ' is not normalized. Update your application code to use '${JSON.stringify(normalized)}' instead.`, normalized === id, {\n id: 'ember-data:deprecate-non-strict-id',\n until: '6.0',\n for: 'ember-data',\n since: {\n available: '5.3',\n enabled: '5.3'\n }\n });\n return normalized;\n }\n assert(`Resource IDs must be a non-empty string or null. Received '${String(id)}'.`, id === null || typeof id === 'string' && id.length > 0);\n return id;\n}\nfunction getStore(wrapper) {\n assert(`expected a private _store property`, '_store' in wrapper);\n return wrapper._store;\n}\nfunction expandingGet(cache, key1, key2) {\n const mainCache = cache[key1] = cache[key1] || Object.create(null);\n return mainCache[key2];\n}\nfunction expandingSet(cache, key1, key2, value) {\n const mainCache = cache[key1] = cache[key1] || Object.create(null);\n mainCache[key2] = value;\n}\nfunction assertValidRelationshipPayload(graph, op) {\n const relationship = graph.get(op.record, op.field);\n assert(`Cannot update an implicit relationship`, isHasMany(relationship) || isBelongsTo(relationship));\n const payload = op.value;\n const {\n definition,\n identifier,\n state\n } = relationship;\n const {\n type\n } = identifier;\n const {\n field\n } = op;\n const {\n isAsync,\n kind\n } = definition;\n if (payload.links) {\n warn(`You pushed a record of type '${type}' with a relationship '${field}' configured as 'async: false'. You've included a link but no primary data, this may be an error in your payload. EmberData will treat this relationship as known-to-be-empty.`, isAsync || !!payload.data || state.hasReceivedData, {\n id: 'ds.store.push-link-for-sync-relationship'\n });\n } else if (payload.data) {\n if (kind === 'belongsTo') {\n assert(`A ${type} record was pushed into the store with the value of ${field} being ${inspect(payload.data)}, but ${field} is a belongsTo relationship so the value must not be an array. You should probably check your data payload or serializer.`, !Array.isArray(payload.data));\n assertRelationshipData(getStore(graph.store), identifier, payload.data, definition);\n } else if (kind === 'hasMany') {\n assert(`A ${type} record was pushed into the store with the value of ${field} being '${inspect(payload.data)}', but ${field} is a hasMany relationship so the value must be an array. You should probably check your data payload or serializer.`, Array.isArray(payload.data));\n if (Array.isArray(payload.data)) {\n for (let i = 0; i < payload.data.length; i++) {\n assertRelationshipData(getStore(graph.store), identifier, payload.data[i], definition);\n }\n }\n }\n }\n}\nfunction isNew(identifier) {\n if (!identifier.id) {\n return true;\n }\n const cache = peekCache(identifier);\n return Boolean(cache?.isNew(identifier));\n}\nfunction isBelongsTo(relationship) {\n return relationship.definition.kind === 'belongsTo';\n}\nfunction isImplicit(relationship) {\n return relationship.definition.isImplicit;\n}\nfunction isHasMany(relationship) {\n return relationship.definition.kind === 'hasMany';\n}\nfunction forAllRelatedIdentifiers(rel, cb) {\n if (isBelongsTo(rel)) {\n if (rel.remoteState) {\n cb(rel.remoteState);\n }\n if (rel.localState && rel.localState !== rel.remoteState) {\n cb(rel.localState);\n }\n } else if (isHasMany(rel)) {\n // TODO\n // rel.remoteMembers.forEach(cb);\n // might be simpler if performance is not a concern\n for (let i = 0; i < rel.remoteState.length; i++) {\n const inverseIdentifier = rel.remoteState[i];\n cb(inverseIdentifier);\n }\n rel.additions?.forEach(cb);\n } else {\n rel.localMembers.forEach(cb);\n rel.remoteMembers.forEach(inverseIdentifier => {\n if (!rel.localMembers.has(inverseIdentifier)) {\n cb(inverseIdentifier);\n }\n });\n }\n}\n\n/*\n Removes the given identifier from BOTH remote AND local state.\n\n This method is useful when either a deletion or a rollback on a new record\n needs to entirely purge itself from an inverse relationship.\n */\nfunction removeIdentifierCompletelyFromRelationship(graph, relationship, value, silenceNotifications) {\n if (isBelongsTo(relationship)) {\n if (relationship.remoteState === value) {\n relationship.remoteState = null;\n }\n if (relationship.localState === value) {\n relationship.localState = null;\n // This allows dematerialized inverses to be rematerialized\n // we shouldn't be notifying here though, figure out where\n // a notification was missed elsewhere.\n if (!silenceNotifications) {\n notifyChange(graph, relationship.identifier, relationship.definition.key);\n }\n }\n } else if (isHasMany(relationship)) {\n relationship.remoteMembers.delete(value);\n relationship.additions?.delete(value);\n const wasInRemovals = relationship.removals?.delete(value);\n const canonicalIndex = relationship.remoteState.indexOf(value);\n if (canonicalIndex !== -1) {\n relationship.remoteState.splice(canonicalIndex, 1);\n }\n if (!wasInRemovals) {\n const currentIndex = relationship.localState?.indexOf(value);\n if (currentIndex !== -1 && currentIndex !== undefined) {\n relationship.localState.splice(currentIndex, 1);\n // This allows dematerialized inverses to be rematerialized\n // we shouldn't be notifying here though, figure out where\n // a notification was missed elsewhere.\n if (!silenceNotifications) {\n notifyChange(graph, relationship.identifier, relationship.definition.key);\n }\n }\n }\n } else {\n relationship.remoteMembers.delete(value);\n relationship.localMembers.delete(value);\n }\n}\n\n// TODO add silencing at the graph level\nfunction notifyChange(graph, identifier, key) {\n if (identifier === graph._removing) {\n if (macroCondition(getOwnConfig().debug.LOG_GRAPH)) {\n // eslint-disable-next-line no-console\n console.log(`Graph: ignoring relationship change for removed identifier ${String(identifier)} ${key}`);\n }\n return;\n }\n if (macroCondition(getOwnConfig().debug.LOG_GRAPH)) {\n // eslint-disable-next-line no-console\n console.log(`Graph: notifying relationship change for ${String(identifier)} ${key}`);\n }\n graph.store.notifyChange(identifier, 'relationships', key);\n}\nfunction assertRelationshipData(store, identifier, data, meta) {\n assert(`A ${identifier.type} record was pushed into the store with the value of ${meta.key} being '${JSON.stringify(data)}', but ${meta.key} is a belongsTo relationship so the value must not be an array. You should probably check your data payload or serializer.`, !Array.isArray(data));\n assert(`Encountered a relationship identifier without a type for the ${meta.kind} relationship '${meta.key}' on <${identifier.type}:${String(identifier.id)}>, expected an identifier with type '${meta.type}' but found\\n\\n'${JSON.stringify(data, null, 2)}'\\n\\nPlease check your serializer and make sure it is serializing the relationship payload into a JSON API format.`, data === null || 'type' in data && typeof data.type === 'string' && data.type.length);\n assert(`Encountered a relationship identifier without an id for the ${meta.kind} relationship '${meta.key}' on <${identifier.type}:${String(identifier.id)}>, expected an identifier but found\\n\\n'${JSON.stringify(data, null, 2)}'\\n\\nPlease check your serializer and make sure it is serializing the relationship payload into a JSON API format.`, data === null || !!coerceId(data.id));\n if (data?.type === meta.type) {\n assert(`Missing Schema: Encountered a relationship identifier { type: '${data.type}', id: '${String(data.id)}' } for the '${identifier.type}.${meta.key}' ${meta.kind} relationship on <${identifier.type}:${String(identifier.id)}>, but no schema exists for that type.`, store.getSchemaDefinitionService().doesTypeExist(data.type));\n } else {\n assert(`Missing Schema: Encountered a relationship identifier with type '${data.type}' for the ${meta.kind} relationship '${meta.key}' on <${identifier.type}:${String(identifier.id)}>, Expected an identifier with type '${meta.type}'. No schema was found for '${data.type}'.`, data === null || !data.type || store.getSchemaDefinitionService().doesTypeExist(data.type));\n }\n}\n\n/*\n Assert that `addedRecord` has a valid type so it can be added to the\n relationship of the `record`.\n\n The assert basically checks if the `addedRecord` can be added to the\n relationship (specified via `relationshipMeta`) of the `record`.\n\n This utility should only be used internally, as both record parameters must\n be stable record identifiers and the `relationshipMeta` needs to be the meta\n information about the relationship, retrieved via\n `record.relationshipFor(key)`.\n*/\nlet assertPolymorphicType;\nlet assertInheritedSchema;\nif (macroCondition(getOwnConfig().env.DEBUG)) {\n function validateSchema(definition, meta) {\n const errors = new Map();\n if (definition.inverseKey !== meta.name) {\n errors.set('name', ` <---- should be '${definition.inverseKey}'`);\n }\n if (definition.inverseType !== meta.type) {\n errors.set('type', ` <---- should be '${definition.inverseType}'`);\n }\n if (definition.inverseKind !== meta.kind) {\n errors.set('type', ` <---- should be '${definition.inverseKind}'`);\n }\n if (definition.inverseIsAsync !== meta.options.async) {\n errors.set('async', ` <---- should be ${definition.inverseIsAsync}`);\n }\n if (definition.inverseIsPolymorphic && definition.inverseIsPolymorphic !== meta.options.polymorphic) {\n errors.set('polymorphic', ` <---- should be ${definition.inverseIsPolymorphic}`);\n }\n if (definition.key !== meta.options.inverse) {\n errors.set('inverse', ` <---- should be '${definition.key}'`);\n }\n if (definition.type !== meta.options.as) {\n errors.set('as', ` <---- should be '${definition.type}'`);\n }\n return errors;\n }\n function expectedSchema(definition) {\n return printSchema({\n name: definition.inverseKey,\n type: definition.inverseType,\n kind: definition.inverseKind,\n options: {\n as: definition.type,\n async: definition.inverseIsAsync,\n polymorphic: definition.inverseIsPolymorphic || false,\n inverse: definition.key\n }\n });\n }\n function printSchema(config, errors) {\n return `\n\n\\`\\`\\`\n{\n ${config.name}: {\n name: '${config.name}',${errors?.get('name') || ''}\n type: '${config.type}',${errors?.get('type') || ''}\n kind: '${config.kind}',${errors?.get('kind') || ''}\n options: {\n as: '${config.options.as}',${errors?.get('as') || ''}\n async: ${config.options.async},${errors?.get('async') || ''}\n polymorphic: ${config.options.polymorphic},${errors?.get('polymorphic') || ''}\n inverse: '${config.options.inverse}'${errors?.get('inverse') || ''}\n }\n }\n}\n\\`\\`\\`\n\n`;\n }\n function metaFrom(definition) {\n return {\n name: definition.key,\n type: definition.type,\n kind: definition.kind,\n options: {\n async: definition.isAsync,\n polymorphic: definition.isPolymorphic,\n inverse: definition.inverseKey\n }\n };\n }\n function inverseMetaFrom(definition) {\n return {\n name: definition.inverseKey,\n type: definition.inverseType,\n kind: definition.inverseKind,\n options: {\n as: definition.isPolymorphic ? definition.type : undefined,\n async: definition.inverseIsAsync,\n polymorphic: definition.inverseIsPolymorphic,\n inverse: definition.key\n }\n };\n }\n function inverseDefinition(definition) {\n return {\n key: definition.inverseKey,\n type: definition.inverseType,\n kind: definition.inverseKind,\n isAsync: definition.inverseIsAsync,\n isPolymorphic: true,\n isCollection: definition.inverseIsCollection,\n isImplicit: definition.inverseIsImplicit,\n inverseKey: definition.key,\n inverseType: definition.type,\n inverseKind: definition.kind,\n inverseIsAsync: definition.isAsync,\n inverseIsPolymorphic: definition.isPolymorphic,\n inverseIsImplicit: definition.isImplicit,\n inverseIsCollection: definition.isCollection,\n resetOnRemoteUpdate: definition.resetOnRemoteUpdate\n };\n }\n function definitionWithPolymorphic(definition) {\n return Object.assign({}, definition, {\n inverseIsPolymorphic: true\n });\n }\n assertInheritedSchema = function assertInheritedSchema(definition, type) {\n let meta1 = metaFrom(definition);\n let meta2 = inverseMetaFrom(definition);\n let errors1 = validateSchema(inverseDefinition(definition), meta1);\n let errors2 = validateSchema(definitionWithPolymorphic(definition), meta2);\n if (errors2.size === 0 && errors1.size > 0) {\n throw new Error(`The schema for the relationship '${type}.${definition.key}' is not configured to satisfy '${definition.inverseType}' and thus cannot utilize the '${definition.inverseType}.${definition.key}' relationship to connect with '${definition.type}.${definition.inverseKey}'\\n\\nIf using this relationship in a polymorphic manner is desired, the relationships schema definition for '${type}' should include:${printSchema(meta1, errors1)}`);\n } else if (errors1.size > 0) {\n throw new Error(`The schema for the relationship '${type}.${definition.key}' is not configured to satisfy '${definition.inverseType}' and thus cannot utilize the '${definition.inverseType}.${definition.key}' relationship to connect with '${definition.type}.${definition.inverseKey}'\\n\\nIf using this relationship in a polymorphic manner is desired, the relationships schema definition for '${type}' should include:${printSchema(meta1, errors1)} and the relationships schema definition for '${definition.type}' should include:${printSchema(meta2, errors2)}`);\n } else if (errors2.size > 0) {\n throw new Error(`The schema for the relationship '${type}.${definition.key}' satisfies '${definition.inverseType}' but cannot utilize the '${definition.inverseType}.${definition.key}' relationship to connect with '${definition.type}.${definition.inverseKey}' because that relationship is not polymorphic.\\n\\nIf using this relationship in a polymorphic manner is desired, the relationships schema definition for '${definition.type}' should include:${printSchema(meta2, errors2)}`);\n }\n };\n assertPolymorphicType = function assertPolymorphicType(parentIdentifier, parentDefinition, addedIdentifier, store) {\n if (parentDefinition.inverseIsImplicit) {\n return;\n }\n if (parentDefinition.isPolymorphic) {\n let meta = store.getSchemaDefinitionService().relationshipsDefinitionFor(addedIdentifier)[parentDefinition.inverseKey];\n assert(`No '${parentDefinition.inverseKey}' field exists on '${addedIdentifier.type}'. To use this type in the polymorphic relationship '${parentDefinition.inverseType}.${parentDefinition.key}' the relationships schema definition for ${addedIdentifier.type} should include:${expectedSchema(parentDefinition)}`, meta);\n assert(`You should not specify both options.as and options.inverse as null on ${addedIdentifier.type}.${parentDefinition.inverseKey}, as if there is no inverse field there is no abstract type to conform to. You may have intended for this relationship to be polymorphic, or you may have mistakenly set inverse to null.`, !(meta.options.inverse === null && meta?.options.as?.length));\n let errors = validateSchema(parentDefinition, meta);\n assert(`The schema for the relationship '${parentDefinition.inverseKey}' on '${addedIdentifier.type}' type does not correctly implement '${parentDefinition.type}' and thus cannot be assigned to the '${parentDefinition.key}' relationship in '${parentIdentifier.type}'. If using this record in this polymorphic relationship is desired, correct the errors in the schema shown below:${printSchema(meta, errors)}`, errors.size === 0);\n } else if (addedIdentifier.type !== parentDefinition.type) {\n // if we are not polymorphic\n // then the addedIdentifier.type must be the same as the parentDefinition.type\n let meta = store.getSchemaDefinitionService().relationshipsDefinitionFor(addedIdentifier)[parentDefinition.inverseKey];\n if (meta?.options.as === parentDefinition.type) {\n // inverse is likely polymorphic but missing the polymorphic flag\n let meta = store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type: parentDefinition.inverseType\n })[parentDefinition.key];\n let errors = validateSchema(definitionWithPolymorphic(inverseDefinition(parentDefinition)), meta);\n assert(`The '<${addedIdentifier.type}>.${parentDefinition.inverseKey}' relationship cannot be used polymorphically because '<${parentDefinition.inverseType}>.${parentDefinition.key} is not a polymorphic relationship. To use this relationship in a polymorphic manner, fix the following schema issues on the relationships schema for '${parentDefinition.inverseType}':${printSchema(meta, errors)}`);\n } else {\n assert(`The '${addedIdentifier.type}' type does not implement '${parentDefinition.type}' and thus cannot be assigned to the '${parentDefinition.key}' relationship in '${parentIdentifier.type}'. If this relationship should be polymorphic, mark ${parentDefinition.inverseType}.${parentDefinition.key} as \\`polymorphic: true\\` and ${addedIdentifier.type}.${parentDefinition.inverseKey} as implementing it via \\`as: '${parentDefinition.type}'\\`.`);\n }\n }\n };\n}\n\n/*\n case many:1\n ========\n In a bi-directional graph with Many:1 edges, adding a value\n results in up-to 3 discrete value transitions, while removing\n a value is only 2 transitions.\n\n For adding C to A\n If: A <<-> B, C <->> D is the initial state,\n and: B <->> A <<-> C, D is the final state\n\n then we would undergo the following transitions.\n\n add C to A\n remove C from D\n add A to C\n\n For removing B from A\n If: A <<-> B, C <->> D is the initial state,\n and: A, B, C <->> D is the final state\n\n then we would undergo the following transitions.\n\n remove B from A\n remove A from B\n\n case many:many\n ===========\n In a bi-directional graph with Many:Many edges, adding or\n removing a value requires only 2 value transitions.\n\n For Adding\n If: A<<->>B, C<<->>D is the initial state (double arrows representing the many side)\n And: D<<->>C<<->>A<<->>B is the final state\n\n Then we would undergo two transitions.\n\n add C to A.\n add A to C\n\n For Removing\n If: A<<->>B, C<<->>D is the initial state (double arrows representing the many side)\n And: A, B, C<<->>D is the final state\n\n Then we would undergo two transitions.\n\n remove B from A\n remove A from B\n\n case many:?\n ========\n In a uni-directional graph with Many:? edges (modeled in EmberData with `inverse:null`) with\n artificial (implicit) inverses, replacing a value results in 2 discrete value transitions.\n This is because a Many:? relationship is effectively Many:Many.\n */\nfunction replaceRelatedRecords(graph, op, isRemote) {\n if (isRemote) {\n replaceRelatedRecordsRemote(graph, op, isRemote);\n } else {\n replaceRelatedRecordsLocal(graph, op, isRemote);\n }\n}\nfunction replaceRelatedRecordsLocal(graph, op, isRemote) {\n const identifiers = op.value;\n const relationship = graph.get(op.record, op.field);\n assert(`expected hasMany relationship`, isHasMany(relationship));\n relationship.state.hasReceivedData = true;\n const {\n additions,\n removals\n } = relationship;\n const {\n inverseKey,\n type\n } = relationship.definition;\n const {\n record\n } = op;\n const wasDirty = relationship.isDirty;\n relationship.isDirty = false;\n const onAdd = identifier => {\n // Since we are diffing against the remote state, we check\n // if our previous local state did not contain this identifier\n const removalsHas = removals?.has(identifier);\n if (removalsHas || !additions?.has(identifier)) {\n if (type !== identifier.type) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertPolymorphicType(relationship.identifier, relationship.definition, identifier, graph.store);\n }\n graph.registerPolymorphicType(type, identifier.type);\n }\n relationship.isDirty = true;\n addToInverse(graph, identifier, inverseKey, op.record, isRemote);\n if (removalsHas) {\n removals.delete(identifier);\n }\n }\n };\n const onRemove = identifier => {\n // Since we are diffing against the remote state, we check\n // if our previous local state had contained this identifier\n const additionsHas = additions?.has(identifier);\n if (additionsHas || !removals?.has(identifier)) {\n relationship.isDirty = true;\n removeFromInverse(graph, identifier, inverseKey, record, isRemote);\n if (additionsHas) {\n additions.delete(identifier);\n }\n }\n };\n const diff = diffCollection(identifiers, relationship, onAdd, onRemove);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n relationship.isDirty || diff.changed;\n\n // any additions no longer in the local state\n // need to be removed from the inverse\n if (additions && additions.size > 0) {\n additions.forEach(identifier => {\n if (!diff.add.has(identifier)) {\n onRemove(identifier);\n }\n });\n }\n\n // any removals no longer in the local state\n // need to be added back to the inverse\n if (removals && removals.size > 0) {\n removals.forEach(identifier => {\n if (!diff.del.has(identifier)) {\n onAdd(identifier);\n }\n });\n }\n relationship.additions = diff.add;\n relationship.removals = diff.del;\n relationship.localState = diff.finalState;\n relationship.isDirty = wasDirty;\n if (!wasDirty /*&& becameDirty // TODO to guard like this we need to detect reorder when diffing local */) {\n notifyChange(graph, op.record, op.field);\n }\n}\nfunction replaceRelatedRecordsRemote(graph, op, isRemote) {\n const identifiers = op.value;\n const relationship = graph.get(op.record, op.field);\n assert(`You can only '${op.op}' on a hasMany relationship. ${op.record.type}.${op.field} is a ${relationship.definition.kind}`, isHasMany(relationship));\n if (isRemote) {\n graph._addToTransaction(relationship);\n }\n relationship.state.hasReceivedData = true;\n\n // cache existing state\n const {\n definition\n } = relationship;\n const {\n type\n } = relationship.definition;\n const diff = diffCollection(identifiers, relationship, identifier => {\n if (type !== identifier.type) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertPolymorphicType(relationship.identifier, relationship.definition, identifier, graph.store);\n }\n graph.registerPolymorphicType(type, identifier.type);\n }\n // commit additions\n // TODO build this into the diff?\n // because we are not dirty if this was a committed local addition\n if (relationship.additions?.has(identifier)) {\n relationship.additions.delete(identifier);\n } else {\n relationship.isDirty = true;\n }\n addToInverse(graph, identifier, definition.inverseKey, op.record, isRemote);\n }, identifier => {\n // commit removals\n // TODO build this into the diff?\n // because we are not dirty if this was a committed local addition\n if (relationship.removals?.has(identifier)) {\n relationship.removals.delete(identifier);\n } else {\n relationship.isDirty = true;\n }\n removeFromInverse(graph, identifier, definition.inverseKey, op.record, isRemote);\n });\n\n // replace existing state\n relationship.remoteMembers = diff.finalSet;\n relationship.remoteState = diff.finalState;\n\n // changed also indicates a change in order\n if (diff.changed) {\n relationship.isDirty = true;\n }\n\n // TODO unsure if we need this but it\n // may allow us to more efficiently patch\n // the associated ManyArray\n relationship._diff = diff;\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE)) {\n // only do this for legacy hasMany, not collection\n // and provide a way to incrementally migrate\n if (relationship.definition.kind === 'hasMany' && relationship.definition.resetOnRemoteUpdate !== false) {\n const deprecationInfo = {\n removals: [],\n additions: [],\n triggered: false\n };\n if (relationship.removals) {\n relationship.isDirty = true;\n relationship.removals.forEach(identifier => {\n deprecationInfo.triggered = true;\n deprecationInfo.removals.push(identifier);\n // reverse the removal\n // if we are still in removals at this point then\n // we were not \"committed\" which means we are present\n // in the remoteMembers. So we \"add back\" on the inverse.\n addToInverse(graph, identifier, definition.inverseKey, op.record, isRemote);\n });\n relationship.removals = null;\n }\n if (relationship.additions) {\n relationship.additions.forEach(identifier => {\n // reverse the addition\n // if we are still in additions at this point then\n // we were not \"committed\" which means we are not present\n // in the remoteMembers. So we \"remove\" from the inverse.\n // however we only do this if we are not a \"new\" record.\n if (!isNew(identifier)) {\n deprecationInfo.triggered = true;\n deprecationInfo.additions.push(identifier);\n relationship.isDirty = true;\n relationship.additions.delete(identifier);\n removeFromInverse(graph, identifier, definition.inverseKey, op.record, isRemote);\n }\n });\n if (relationship.additions.size === 0) {\n relationship.additions = null;\n }\n }\n if (deprecationInfo.triggered) {\n deprecate(`EmberData is changing the default semantics of updates to the remote state of relationships.\\n\\nThe following local state was cleared from the <${relationship.identifier.type}>.${relationship.definition.key} hasMany relationship but will not be once this deprecation is resolved by opting into the new behavior:\\n\\n\\tAdded: [${deprecationInfo.additions.map(i => i.lid).join(', ')}]\\n\\tRemoved: [${deprecationInfo.removals.map(i => i.lid).join(', ')}]`, false, {\n id: 'ember-data:deprecate-relationship-remote-update-clearing-local-state',\n for: 'ember-data',\n since: {\n enabled: '5.3',\n available: '5.3'\n },\n until: '6.0',\n url: 'https://deprecations.emberjs.com/v5.x#ember-data-deprecate-relationship-remote-update-clearing-local-state'\n });\n }\n }\n }\n if (relationship.isDirty) {\n flushCanonical(graph, relationship);\n }\n}\nfunction addToInverse(graph, identifier, key, value, isRemote) {\n const relationship = graph.get(identifier, key);\n const {\n type\n } = relationship.definition;\n if (type !== value.type) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertPolymorphicType(relationship.identifier, relationship.definition, value, graph.store);\n }\n graph.registerPolymorphicType(type, value.type);\n }\n if (isBelongsTo(relationship)) {\n relationship.state.hasReceivedData = true;\n relationship.state.isEmpty = false;\n if (isRemote) {\n graph._addToTransaction(relationship);\n if (relationship.remoteState !== null) {\n removeFromInverse(graph, relationship.remoteState, relationship.definition.inverseKey, identifier, isRemote);\n }\n relationship.remoteState = value;\n }\n if (relationship.localState !== value) {\n if (!isRemote && relationship.localState) {\n removeFromInverse(graph, relationship.localState, relationship.definition.inverseKey, identifier, isRemote);\n }\n relationship.localState = value;\n notifyChange(graph, identifier, key);\n }\n } else if (isHasMany(relationship)) {\n if (isRemote) {\n // TODO this needs to alert stuffs\n // And patch state better\n // This is almost definitely wrong\n // WARNING WARNING WARNING\n\n if (!relationship.remoteMembers.has(value)) {\n graph._addToTransaction(relationship);\n relationship.remoteState.push(value);\n relationship.remoteMembers.add(value);\n if (relationship.additions?.has(value)) {\n relationship.additions.delete(value);\n } else {\n relationship.isDirty = true;\n relationship.state.hasReceivedData = true;\n flushCanonical(graph, relationship);\n }\n }\n } else {\n if (_addLocal(graph, identifier, relationship, value, null)) {\n notifyChange(graph, identifier, key);\n }\n }\n } else {\n if (isRemote) {\n if (!relationship.remoteMembers.has(value)) {\n relationship.remoteMembers.add(value);\n relationship.localMembers.add(value);\n }\n } else {\n if (!relationship.localMembers.has(value)) {\n relationship.localMembers.add(value);\n }\n }\n }\n}\nfunction notifyInverseOfPotentialMaterialization(graph, identifier, key, value, isRemote) {\n const relationship = graph.get(identifier, key);\n if (isHasMany(relationship) && isRemote && relationship.remoteMembers.has(value)) {\n notifyChange(graph, identifier, key);\n }\n}\nfunction removeFromInverse(graph, identifier, key, value, isRemote) {\n const relationship = graph.get(identifier, key);\n if (isBelongsTo(relationship)) {\n relationship.state.isEmpty = true;\n if (isRemote) {\n graph._addToTransaction(relationship);\n relationship.remoteState = null;\n }\n if (relationship.localState === value) {\n relationship.localState = null;\n notifyChange(graph, identifier, key);\n }\n } else if (isHasMany(relationship)) {\n if (isRemote) {\n graph._addToTransaction(relationship);\n if (_removeRemote(relationship, value)) {\n notifyChange(graph, identifier, key);\n }\n } else {\n if (_removeLocal(relationship, value)) {\n notifyChange(graph, identifier, key);\n }\n }\n } else {\n if (isRemote) {\n relationship.remoteMembers.delete(value);\n relationship.localMembers.delete(value);\n } else {\n if (value && relationship.localMembers.has(value)) {\n relationship.localMembers.delete(value);\n }\n }\n }\n}\nfunction flushCanonical(graph, rel) {\n graph._scheduleLocalSync(rel);\n}\nfunction replaceRelatedRecord(graph, op, isRemote = false) {\n const relationship = graph.get(op.record, op.field);\n assert(`You can only '${op.op}' on a belongsTo relationship. ${op.record.type}.${op.field} is a ${relationship.definition.kind}`, isBelongsTo(relationship));\n if (isRemote) {\n graph._addToTransaction(relationship);\n }\n const {\n definition,\n state\n } = relationship;\n const prop = isRemote ? 'remoteState' : 'localState';\n const existingState = relationship[prop];\n\n /*\n case 1:1\n ========\n In a bi-directional graph with 1:1 edges, replacing a value\n results in up-to 4 discrete value transitions.\n If: A <-> B, C <-> D is the initial state,\n and: A <-> C, B, D is the final state\n then we would undergo the following 4 transitions.\n remove A from B\n add C to A\n remove C from D\n add A to C\n case 1:many\n ===========\n In a bi-directional graph with 1:Many edges, replacing a value\n results in up-to 3 discrete value transitions.\n If: A<->>B<<->D, C<<->D is the initial state (double arrows representing the many side)\n And: A<->>C<<->D, B<<->D is the final state\n Then we would undergo three transitions.\n remove A from B\n add C to A.\n add A to C\n case 1:?\n ========\n In a uni-directional graph with 1:? edges (modeled in EmberData with `inverse:null`) with\n artificial (implicit) inverses, replacing a value results in up-to 3 discrete value transitions.\n This is because a 1:? relationship is effectively 1:many.\n If: A->B, C->B is the initial state\n And: A->C, C->B is the final state\n Then we would undergo three transitions.\n Remove A from B\n Add C to A\n Add A to C\n */\n\n // nothing for us to do\n if (op.value === existingState) {\n // if we were empty before but now know we are empty this needs to be true\n state.hasReceivedData = true;\n // if this is a remote update we still sync\n if (isRemote) {\n const {\n localState\n } = relationship;\n // don't sync if localState is a new record and our remoteState is null\n if (localState && isNew(localState) && !existingState) {\n return;\n }\n if (existingState && localState === existingState) {\n notifyInverseOfPotentialMaterialization(graph, existingState, definition.inverseKey, op.record, isRemote);\n } else if (macroCondition(getOwnConfig().deprecations.DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE)) {\n // if localState does not match existingState then we know\n // we have a local mutation that has not been persisted yet\n if (localState !== op.value && relationship.definition.resetOnRemoteUpdate !== false) {\n relationship.localState = existingState;\n deprecate(`EmberData is changing the default semantics of updates to the remote state of relationships.\\n\\nThe following local state was cleared from the <${relationship.identifier.type}>.${relationship.definition.key} belongsTo relationship but will not be once this deprecation is resolved:\\n\\n\\t${localState ? 'Added: ' + localState.lid + '\\n\\t' : ''}${existingState ? 'Removed: ' + existingState.lid : ''}`, false, {\n id: 'ember-data:deprecate-relationship-remote-update-clearing-local-state',\n for: 'ember-data',\n since: {\n enabled: '5.3',\n available: '5.3'\n },\n until: '6.0',\n url: 'https://deprecations.emberjs.com/v5.x#ember-data-deprecate-relationship-remote-update-clearing-local-state'\n });\n notifyChange(graph, relationship.identifier, relationship.definition.key);\n }\n }\n }\n return;\n }\n\n // remove this value from the inverse if required\n if (existingState) {\n removeFromInverse(graph, existingState, definition.inverseKey, op.record, isRemote);\n }\n\n // update value to the new value\n relationship[prop] = op.value;\n state.hasReceivedData = true;\n state.isEmpty = op.value === null;\n state.isStale = false;\n state.hasFailedLoadAttempt = false;\n if (op.value) {\n if (definition.type !== op.value.type) {\n // assert(\n // `The '<${definition.inverseType}>.${op.field}' relationship expects only '${definition.type}' records since it is not polymorphic. Received a Record of type '${op.value.type}'`,\n // definition.isPolymorphic\n // );\n\n // TODO this should now handle the deprecation warning if isPolymorphic is not set\n // but the record does turn out to be polymorphic\n // this should still assert if the user is relying on legacy inheritance/mixins to\n // provide polymorphic behavior and has not yet added the polymorphic flags\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertPolymorphicType(relationship.identifier, definition, op.value, graph.store);\n }\n graph.registerPolymorphicType(definition.type, op.value.type);\n }\n addToInverse(graph, op.value, definition.inverseKey, op.record, isRemote);\n }\n if (isRemote) {\n const {\n localState,\n remoteState\n } = relationship;\n if (localState && isNew(localState) && !remoteState) {\n return;\n }\n // when localState does not match the new remoteState and\n // localState === existingState then we had no local mutation\n // and we can safely sync the new remoteState to local\n if (localState !== remoteState && localState === existingState) {\n relationship.localState = remoteState;\n notifyChange(graph, relationship.identifier, relationship.definition.key);\n // But when localState does not match the new remoteState and\n // and localState !== existingState then we know we have a local mutation\n // that has not been persisted yet.\n } else if (macroCondition(getOwnConfig().deprecations.DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE)) {\n if (localState !== remoteState && localState !== existingState && relationship.definition.resetOnRemoteUpdate !== false) {\n relationship.localState = existingState;\n deprecate(`EmberData is changing the default semantics of updates to the remote state of relationships.\\n\\nThe following local state was cleared from the <${relationship.identifier.type}>.${relationship.definition.key} belongsTo relationship but will not be once this deprecation is resolved:\\n\\n\\t${localState ? 'Added: ' + localState.lid + '\\n\\t' : ''}${existingState ? 'Removed: ' + existingState.lid : ''}`, false, {\n id: 'ember-data:deprecate-relationship-remote-update-clearing-local-state',\n for: 'ember-data',\n since: {\n enabled: '5.3',\n available: '5.3'\n },\n until: '6.0',\n url: 'https://deprecations.emberjs.com/v5.x#ember-data-deprecate-relationship-remote-update-clearing-local-state'\n });\n notifyChange(graph, relationship.identifier, relationship.definition.key);\n }\n }\n } else {\n notifyChange(graph, relationship.identifier, relationship.definition.key);\n }\n}\nfunction _deprecatedCompare(newState, newMembers, prevState, prevSet, onAdd, onDel) {\n const newLength = newState.length;\n const prevLength = prevState.length;\n const iterationLength = Math.max(newLength, prevLength);\n let changed = newMembers.size !== prevSet.size;\n const added = new Set();\n const removed = new Set();\n const duplicates = new Map();\n const finalSet = new Set();\n const finalState = [];\n for (let i = 0, j = 0; i < iterationLength; i++) {\n let adv = false;\n let member;\n\n // accumulate anything added\n if (i < newLength) {\n member = newState[i];\n if (!finalSet.has(member)) {\n finalState[j] = member;\n finalSet.add(member);\n adv = true;\n if (!prevSet.has(member)) {\n changed = true;\n added.add(member);\n onAdd(member);\n }\n } else {\n let list = duplicates.get(member);\n if (list === undefined) {\n list = [];\n duplicates.set(member, list);\n }\n list.push(i);\n }\n }\n\n // accumulate anything removed\n if (i < prevLength) {\n const prevMember = prevState[i];\n\n // detect reordering, adjusting index for duplicates\n // j is always less than i and so if i < prevLength, j < prevLength\n if (member !== prevState[j]) {\n changed = true;\n }\n if (!newMembers.has(prevMember)) {\n changed = true;\n removed.add(prevMember);\n onDel(prevMember);\n }\n } else if (adv && j < prevLength && member !== prevState[j]) {\n changed = true;\n }\n if (adv) {\n j++;\n }\n }\n const diff = {\n add: added,\n del: removed,\n finalState,\n finalSet,\n changed\n };\n return {\n diff,\n duplicates\n };\n}\nfunction _compare(finalState, finalSet, prevState, prevSet, onAdd, onDel) {\n const finalLength = finalState.length;\n const prevLength = prevState.length;\n const iterationLength = Math.max(finalLength, prevLength);\n const equalLength = finalLength === prevLength;\n let changed = finalSet.size !== prevSet.size;\n const added = new Set();\n const removed = new Set();\n for (let i = 0; i < iterationLength; i++) {\n let member;\n\n // accumulate anything added\n if (i < finalLength) {\n member = finalState[i];\n if (!prevSet.has(member)) {\n changed = true;\n added.add(member);\n onAdd(member);\n }\n }\n\n // accumulate anything removed\n if (i < prevLength) {\n const prevMember = prevState[i];\n\n // detect reordering\n if (equalLength && member !== prevMember) {\n changed = true;\n }\n if (!finalSet.has(prevMember)) {\n changed = true;\n removed.add(prevMember);\n onDel(prevMember);\n }\n }\n }\n return {\n add: added,\n del: removed,\n finalState,\n finalSet,\n changed\n };\n}\nfunction diffCollection(finalState, relationship, onAdd, onDel) {\n const finalSet = new Set(finalState);\n const {\n remoteState,\n remoteMembers\n } = relationship;\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_NON_UNIQUE_PAYLOADS)) {\n if (finalState.length !== finalSet.size) {\n const {\n diff,\n duplicates\n } = _deprecatedCompare(finalState, finalSet, remoteState, remoteMembers, onAdd, onDel);\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n deprecate(`Expected all entries in the relationship ${relationship.definition.type}:${relationship.definition.key} to be unique, see log for a list of duplicate entry indeces`, false, {\n id: 'ember-data:deprecate-non-unique-relationship-entries',\n for: 'ember-data',\n until: '6.0',\n since: {\n available: '5.3',\n enabled: '5.3'\n }\n });\n // eslint-disable-next-line no-console\n console.log(duplicates);\n }\n return diff;\n }\n } else {\n assert(`Expected all entries in the relationship to be unique, found duplicates`, finalState.length === finalSet.size);\n }\n return _compare(finalState, finalSet, remoteState, remoteMembers, onAdd, onDel);\n}\nfunction computeLocalState(storage) {\n if (!storage.isDirty) {\n assert(`Expected localState to be present`, Array.isArray(storage.localState));\n return storage.localState;\n }\n const state = storage.remoteState.slice();\n storage.removals?.forEach(v => {\n const index = state.indexOf(v);\n state.splice(index, 1);\n });\n storage.additions?.forEach(v => {\n state.push(v);\n });\n storage.localState = state;\n storage.isDirty = false;\n return state;\n}\nfunction _addLocal(graph, record, relationship, value, index) {\n const {\n remoteMembers,\n removals\n } = relationship;\n let additions = relationship.additions;\n const hasPresence = remoteMembers.has(value) || additions?.has(value);\n if (hasPresence && !removals?.has(value)) {\n assert(`Attempted to add the resource '${value.lid}' to the collection <${relationship.identifier.type}>.${relationship.definition.key} it was already in`, hasPresence && !removals?.has(value));\n return false;\n }\n if (removals?.has(value)) {\n removals.delete(value);\n } else {\n if (!additions) {\n additions = relationship.additions = new Set();\n }\n relationship.state.hasReceivedData = true;\n additions.add(value);\n const {\n type\n } = relationship.definition;\n if (type !== value.type) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertPolymorphicType(record, relationship.definition, value, graph.store);\n }\n graph.registerPolymorphicType(value.type, type);\n }\n }\n\n // if we have existing localState\n // and we have an index\n // apply the change, as this is more efficient\n // than recomputing localState and\n // it allows us to preserve local ordering\n // to a small extend. Local ordering should not\n // be relied upon as any remote change will blow it away\n if (relationship.localState) {\n if (index !== null) {\n relationship.localState.splice(index, 0, value);\n } else {\n relationship.localState.push(value);\n }\n }\n assert(`Expected relationship to be dirty when adding a local mutation`, relationship.localState || relationship.isDirty);\n return true;\n}\nfunction _removeLocal(relationship, value) {\n assert(`expected an identifier to remove from the collection relationship`, value);\n const {\n remoteMembers,\n additions\n } = relationship;\n let removals = relationship.removals;\n const hasPresence = remoteMembers.has(value) || additions?.has(value);\n if (!hasPresence || removals?.has(value)) {\n assert(`Attempted to remove the resource '${value.lid}' from the collection <${relationship.identifier.type}>.${relationship.definition.key} but it was not present`, !hasPresence || removals?.has(value));\n return false;\n }\n if (additions?.has(value)) {\n additions.delete(value);\n } else {\n if (!removals) {\n removals = relationship.removals = new Set();\n }\n removals.add(value);\n }\n\n // if we have existing localState\n // apply the change, as this is more efficient\n // than recomputing localState and\n // it allows us to preserve local ordering\n // to a small extend. Local ordering should not\n // be relied upon as any remote change will blow it away\n if (relationship.localState) {\n const index = relationship.localState.indexOf(value);\n assert(`Cannot remove a resource that is not present`, index !== -1);\n relationship.localState.splice(index, 1);\n }\n assert(`Expected relationship to be dirty when performing a local mutation`, relationship.localState || relationship.isDirty);\n return true;\n}\nfunction _removeRemote(relationship, value) {\n assert(`expected an identifier to remove from the collection relationship`, value);\n const {\n remoteMembers,\n additions,\n removals,\n remoteState\n } = relationship;\n assert(`Cannot remove a resource that is not present`, remoteMembers.has(value));\n if (!remoteMembers.has(value)) {\n return false;\n }\n\n // remove from remote state\n remoteMembers.delete(value);\n let index = remoteState.indexOf(value);\n assert(`Cannot remove a resource that is not present`, index !== -1);\n remoteState.splice(index, 1);\n\n // remove from removals if present\n if (removals?.has(value)) {\n removals.delete(value);\n\n // nothing more to do this was our state already\n return false;\n }\n assert(`Remote state indicated removal of a resource that was present only as a local mutation`, !additions?.has(value));\n\n // if we have existing localState\n // and we have an index\n // apply the change, as this is more efficient\n // than recomputing localState and\n // it allows us to preserve local ordering\n // to a small extend. Local ordering should not\n // be relied upon as any remote change will blow it away\n if (relationship.localState) {\n index = relationship.localState.indexOf(value);\n assert(`Cannot remove a resource that is not present`, index !== -1);\n relationship.localState.splice(index, 1);\n }\n assert(`Expected relationship to be dirty when performing a local mutation`, relationship.localState || relationship.isDirty);\n return true;\n}\nfunction rollbackRelationship(graph, identifier, field, relationship) {\n if (isBelongsTo(relationship)) {\n replaceRelatedRecord(graph, {\n op: 'replaceRelatedRecord',\n record: identifier,\n field,\n value: relationship.remoteState\n }, false);\n } else {\n replaceRelatedRecords(graph, {\n op: 'replaceRelatedRecords',\n record: identifier,\n field,\n value: relationship.remoteState.slice()\n }, false);\n }\n}\n\n/**\n *\n * Given RHS (Right Hand Side)\n *\n * ```ts\n * class User extends Model {\n * @hasMany('animal', { async: false, inverse: 'owner' }) pets;\n * }\n * ```\n *\n * Given LHS (Left Hand Side)\n *\n * ```ts\n * class Animal extends Model {\n * @belongsTo('user', { async: false, inverse: 'pets' }) owner;\n * }\n * ```\n *\n * The UpgradedMeta for the RHS would be:\n *\n * ```ts\n * {\n * kind: 'hasMany',\n * key: 'pets',\n * type: 'animal',\n * isAsync: false,\n * isImplicit: false,\n * isCollection: true,\n * isPolymorphic: false,\n * inverseKind: 'belongsTo',\n * inverseKey: 'owner',\n * inverseType: 'user',\n * inverseIsAsync: false,\n * inverseIsImplicit: false,\n * inverseIsCollection: false,\n * inverseIsPolymorphic: false,\n * }\n * ```\n *\n * The UpgradeMeta for the LHS would be:\n *\n * ```ts\n * {\n * kind: 'belongsTo',\n * key: 'owner',\n * type: 'user',\n * isAsync: false,\n * isImplicit: false,\n * isCollection: false,\n * isPolymorphic: false,\n * inverseKind: 'hasMany',\n * inverseKey: 'pets',\n * inverseType: 'animal',\n * inverseIsAsync: false,\n * inverseIsImplicit: false,\n * inverseIsCollection: true,\n * inverseIsPolymorphic: false,\n * }\n * ```\n *\n *\n * @class UpgradedMeta\n * @internal\n */\nconst BOOL_LATER = null;\nconst STR_LATER = '';\nconst IMPLICIT_KEY_RAND = Date.now();\nfunction implicitKeyFor(type, key) {\n return `implicit-${type}:${key}${IMPLICIT_KEY_RAND}`;\n}\nfunction syncMeta(definition, inverseDefinition) {\n definition.inverseKind = inverseDefinition.kind;\n definition.inverseKey = inverseDefinition.key;\n definition.inverseType = inverseDefinition.type;\n definition.inverseIsAsync = inverseDefinition.isAsync;\n definition.inverseIsCollection = inverseDefinition.isCollection;\n definition.inverseIsPolymorphic = inverseDefinition.isPolymorphic;\n definition.inverseIsImplicit = inverseDefinition.isImplicit;\n const resetOnRemoteUpdate = definition.resetOnRemoteUpdate === false || inverseDefinition.resetOnRemoteUpdate === false ? false : true;\n definition.resetOnRemoteUpdate = resetOnRemoteUpdate;\n inverseDefinition.resetOnRemoteUpdate = resetOnRemoteUpdate;\n}\nfunction upgradeMeta(meta) {\n const niceMeta = {};\n const options = meta.options;\n niceMeta.kind = meta.kind;\n niceMeta.key = meta.name;\n niceMeta.type = meta.type;\n assert(`Expected relationship definition to specify async`, typeof options?.async === 'boolean');\n niceMeta.isAsync = options.async;\n niceMeta.isImplicit = false;\n niceMeta.isCollection = meta.kind === 'hasMany';\n niceMeta.isPolymorphic = options && !!options.polymorphic;\n niceMeta.inverseKey = options && options.inverse || STR_LATER;\n niceMeta.inverseType = STR_LATER;\n niceMeta.inverseIsAsync = BOOL_LATER;\n niceMeta.inverseIsImplicit = options && options.inverse === null || BOOL_LATER;\n niceMeta.inverseIsCollection = BOOL_LATER;\n niceMeta.resetOnRemoteUpdate = options && options.resetOnRemoteUpdate === false ? false : true;\n return niceMeta;\n}\nfunction assertConfiguration(info, type, key) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n const isSelfReferential = info.isSelfReferential;\n if (isSelfReferential) {\n return true;\n }\n const _isRHS = key === info.rhs_relationshipName && (type === info.rhs_baseModelName ||\n // base or non-polymorphic\n // if the other side is polymorphic then we need to scan our modelNames\n info.lhs_isPolymorphic && info.rhs_modelNames.includes(type)); // polymorphic\n const _isLHS = key === info.lhs_relationshipName && (type === info.lhs_baseModelName ||\n // base or non-polymorphic\n // if the other side is polymorphic then we need to scan our modelNames\n info.rhs_isPolymorphic && info.lhs_modelNames.includes(type)); // polymorphic;\n\n if (!_isRHS && !_isLHS) {\n /*\n this occurs when we are likely polymorphic but not configured to be polymorphic\n most often due to extending a class that has a relationship definition on it.\n e.g.\n ```ts\n class Pet extends Model {\n @belongsTo('human', { async: false, inverse: 'pet' }) owner;\n }\n class Human extends Model {\n @belongsTo('pet', { async: false, inverse: 'owner' }) pet;\n }\n class Farmer extends Human {}\n ```\n In the above case, the following would trigger this error:\n ```ts\n let pet = store.createRecord('pet');\n let farmer = store.createRecord('farmer');\n farmer.pet = pet; // error\n ```\n The correct way to fix this is to specify the polymorphic option on Pet\n and to specify the abstract type 'human' on the Human base class.\n ```ts\n class Pet extends Model {\n @belongsTo('human', { async: false, inverse: 'pet', polymorphic: true }) owner;\n }\n class Human extends Model {\n @belongsTo('pet', { async: false, inverse: 'owner', as: 'human' }) pet;\n }\n class Farmer extends Human {}\n ```\n Alternatively both Human and Farmer could declare the relationship, because relationship\n definitions are \"structural\".\n ```ts\n class Pet extends Model {\n @belongsTo('human', { async: false, inverse: 'pet', polymorphic: true }) owner;\n }\n class Human extends Model {\n @belongsTo('pet', { async: false, inverse: 'owner', as: 'human' }) pet;\n }\n class Farmer extends Model {\n @belongsTo('pet', { async: false, inverse: 'owner', as: 'human' }) pet;\n }\n ```\n */\n if (key === info.lhs_relationshipName && info.lhs_modelNames.includes(type)) {\n // parentIdentifier, parentDefinition, addedIdentifier, store\n assertInheritedSchema(info.lhs_definition, type);\n } else if (key === info.rhs_relationshipName && info.rhs_modelNames.includes(type)) {\n assertInheritedSchema(info.lhs_definition, type);\n }\n // OPEN AN ISSUE :: we would like to improve our errors but need to understand what corner case got us here\n throw new Error(`PLEASE OPEN AN ISSUE :: Found a relationship that is neither the LHS nor RHS of the same edge. This is not supported. Please report this to the EmberData team.`);\n }\n if (_isRHS && _isLHS) {\n // not sure how we get here but it's probably the result of some form of inheritance\n // without having specified polymorphism correctly leading to it not being self-referential\n // OPEN AN ISSUE :: we would like to improve our errors but need to understand what corner case got us here\n throw new Error(`PLEASE OPEN AN ISSUE :: Found a relationship that is both the LHS and RHS of the same edge but is not self-referential. This is not supported. Please report this to the EmberData team.`);\n }\n }\n}\nfunction isLHS(info, type, key) {\n const isSelfReferential = info.isSelfReferential;\n const isRelationship = key === info.lhs_relationshipName;\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertConfiguration(info, type, key);\n }\n if (isRelationship === true) {\n return isSelfReferential === true ||\n // itself\n type === info.lhs_baseModelName ||\n // base or non-polymorphic\n // if the other side is polymorphic then we need to scan our modelNames\n info.rhs_isPolymorphic && info.lhs_modelNames.includes(type) // polymorphic\n ;\n }\n return false;\n}\nfunction upgradeDefinition(graph, identifier, propertyName, isImplicit = false) {\n const cache = graph._definitionCache;\n const storeWrapper = graph.store;\n const polymorphicLookup = graph._potentialPolymorphicTypes;\n const {\n type\n } = identifier;\n let cached = /*#__NOINLINE__*/expandingGet(cache, type, propertyName);\n\n // CASE: We have a cached resolution (null if no relationship exists)\n if (cached !== undefined) {\n return cached;\n }\n assert(`Expected to find relationship definition in the cache for the implicit relationship ${propertyName}`, !isImplicit);\n const relationships = storeWrapper.getSchemaDefinitionService().relationshipsDefinitionFor(identifier);\n assert(`Expected to have a relationship definition for ${type} but none was found.`, relationships);\n const meta = relationships[propertyName];\n if (!meta) {\n // TODO potentially we should just be permissive here since this is an implicit relationship\n // and not require the lookup table to be populated\n if (polymorphicLookup[type]) {\n const altTypes = Object.keys(polymorphicLookup[type]);\n for (let i = 0; i < altTypes.length; i++) {\n const _cached = expandingGet(cache, altTypes[i], propertyName);\n if (_cached) {\n /*#__NOINLINE__*/expandingSet(cache, type, propertyName, _cached);\n _cached.rhs_modelNames.push(type);\n return _cached;\n }\n }\n }\n\n // CASE: We don't have a relationship at all\n // we should only hit this in prod\n assert(`Expected a relationship schema for '${type}.${propertyName}', but no relationship schema was found.`, meta);\n cache[type][propertyName] = null;\n return null;\n }\n const definition = /*#__NOINLINE__*/upgradeMeta(meta);\n let inverseDefinition;\n let inverseKey;\n const inverseType = definition.type;\n\n // CASE: Inverse is explicitly null\n if (definition.inverseKey === null) {\n // TODO probably dont need this assertion if polymorphic\n assert(`Expected the inverse model to exist`, getStore(storeWrapper).modelFor(inverseType));\n inverseDefinition = null;\n } else {\n inverseKey = /*#__NOINLINE__*/inverseForRelationship(getStore(storeWrapper), identifier, propertyName);\n\n // CASE: If we are polymorphic, and we declared an inverse that is non-null\n // we must assume that the lack of inverseKey means that there is no\n // concrete type as the baseType, so we must construct and artificial\n // placeholder\n if (!inverseKey && definition.isPolymorphic && definition.inverseKey) {\n inverseDefinition = {\n kind: 'belongsTo',\n // this must be updated when we find the first belongsTo or hasMany definition that matches\n key: definition.inverseKey,\n type: type,\n isAsync: false,\n // this must be updated when we find the first belongsTo or hasMany definition that matches\n isImplicit: false,\n isCollection: false,\n // this must be updated when we find the first belongsTo or hasMany definition that matches\n isPolymorphic: false\n }; // the rest of the fields are populated by syncMeta\n\n // CASE: Inverse resolves to null\n } else if (!inverseKey) {\n inverseDefinition = null;\n } else {\n // CASE: We have an explicit inverse or were able to resolve one\n const inverseDefinitions = storeWrapper.getSchemaDefinitionService().relationshipsDefinitionFor({\n type: inverseType\n });\n assert(`Expected to have a relationship definition for ${inverseType} but none was found.`, inverseDefinitions);\n const metaFromInverse = inverseDefinitions[inverseKey];\n assert(`Expected a relationship schema for '${inverseType}.${inverseKey}' to match the inverse of '${type}.${propertyName}', but no relationship schema was found.`, metaFromInverse);\n inverseDefinition = upgradeMeta(metaFromInverse);\n }\n }\n\n // CASE: We have no inverse\n if (!inverseDefinition) {\n // polish off meta\n inverseKey = /*#__NOINLINE__*/implicitKeyFor(type, propertyName);\n inverseDefinition = {\n kind: 'implicit',\n key: inverseKey,\n type: type,\n isAsync: false,\n isImplicit: true,\n isCollection: true,\n // with implicits any number of records could point at us\n isPolymorphic: false\n }; // the rest of the fields are populated by syncMeta\n\n syncMeta(definition, inverseDefinition);\n syncMeta(inverseDefinition, definition);\n const info = {\n lhs_key: `${type}:${propertyName}`,\n lhs_modelNames: [type],\n lhs_baseModelName: type,\n lhs_relationshipName: propertyName,\n lhs_definition: definition,\n lhs_isPolymorphic: definition.isPolymorphic,\n rhs_key: inverseDefinition.key,\n rhs_modelNames: [inverseType],\n rhs_baseModelName: inverseType,\n rhs_relationshipName: inverseDefinition.key,\n rhs_definition: inverseDefinition,\n rhs_isPolymorphic: false,\n hasInverse: false,\n isSelfReferential: type === inverseType,\n // this could be wrong if we are self-referential but also polymorphic\n isReflexive: false // we can't be reflexive if we don't define an inverse\n };\n expandingSet(cache, inverseType, inverseKey, info);\n expandingSet(cache, type, propertyName, info);\n return info;\n }\n\n // CASE: We do have an inverse\n const baseType = inverseDefinition.type;\n\n // TODO we want to assert this but this breaks all of our shoddily written tests\n /*\n if (DEBUG) {\n let inverseDoubleCheck = inverseFor(inverseRelationshipName, store);\n assert(`The ${inverseBaseModelName}:${inverseRelationshipName} relationship declares 'inverse: null', but it was resolved as the inverse for ${baseModelName}:${relationshipName}.`, inverseDoubleCheck);\n }\n */\n // CASE: We may have already discovered the inverse for the baseModelName\n // CASE: We have already discovered the inverse\n assert(`We should have determined an inverseKey by now, open an issue if this is hit`, typeof inverseKey === 'string' && inverseKey.length > 0);\n cached = expandingGet(cache, baseType, propertyName) || expandingGet(cache, inverseType, inverseKey);\n if (cached) {\n // TODO this assert can be removed if the above assert is enabled\n assert(`The ${inverseType}:${inverseKey} relationship declares 'inverse: null', but it was resolved as the inverse for ${type}:${propertyName}.`, cached.hasInverse !== false);\n const _isLHS = cached.lhs_baseModelName === baseType;\n const modelNames = _isLHS ? cached.lhs_modelNames : cached.rhs_modelNames;\n // make this lookup easier in the future by caching the key\n modelNames.push(type);\n expandingSet(cache, type, propertyName, cached);\n return cached;\n }\n\n // this is our first time so polish off the metas\n syncMeta(definition, inverseDefinition);\n syncMeta(inverseDefinition, definition);\n const lhs_modelNames = [type];\n if (type !== baseType) {\n lhs_modelNames.push(baseType);\n }\n const isSelfReferential = baseType === inverseType;\n const info = {\n lhs_key: `${baseType}:${propertyName}`,\n lhs_modelNames,\n lhs_baseModelName: baseType,\n lhs_relationshipName: propertyName,\n lhs_definition: definition,\n lhs_isPolymorphic: definition.isPolymorphic,\n rhs_key: `${inverseType}:${inverseKey}`,\n rhs_modelNames: [inverseType],\n rhs_baseModelName: inverseType,\n rhs_relationshipName: inverseKey,\n rhs_definition: inverseDefinition,\n rhs_isPolymorphic: inverseDefinition.isPolymorphic,\n hasInverse: true,\n isSelfReferential,\n isReflexive: isSelfReferential && propertyName === inverseKey\n };\n\n // Create entries for the baseModelName as well as modelName to speed up\n // inverse lookups\n expandingSet(cache, baseType, propertyName, info);\n expandingSet(cache, type, propertyName, info);\n\n // Greedily populate the inverse\n expandingSet(cache, inverseType, inverseKey, info);\n return info;\n}\nfunction inverseForRelationship(store, identifier, key) {\n const definition = store.getSchemaDefinitionService().relationshipsDefinitionFor(identifier)[key];\n if (!definition) {\n return null;\n }\n assert(`Expected the relationship defintion to specify the inverse type or null.`, definition.options?.inverse === null || typeof definition.options?.inverse === 'string' && definition.options.inverse.length > 0);\n return definition.options.inverse;\n}\nfunction createState() {\n return {\n hasReceivedData: false,\n isEmpty: true,\n isStale: false,\n hasFailedLoadAttempt: false,\n shouldForceReload: false,\n hasDematerializedInverse: false\n };\n}\nfunction createCollectionEdge(definition, identifier) {\n return {\n definition,\n identifier,\n state: createState(),\n remoteMembers: new Set(),\n remoteState: [],\n additions: null,\n removals: null,\n meta: null,\n links: null,\n localState: null,\n isDirty: true,\n transactionRef: 0,\n _diff: undefined\n };\n}\nfunction legacyGetCollectionRelationshipData(source) {\n const payload = {};\n if (source.state.hasReceivedData) {\n payload.data = computeLocalState(source);\n }\n if (source.links) {\n payload.links = source.links;\n }\n if (source.meta) {\n payload.meta = source.meta;\n }\n return payload;\n}\nfunction createImplicitEdge(definition, identifier) {\n return {\n definition,\n identifier,\n localMembers: new Set(),\n remoteMembers: new Set()\n };\n}\n\n/*\n * @module @ember-data/graph\n *\n * Stores the data for one side of a \"single\" resource relationship.\n *\n * @class ResourceEdge\n * @internal\n */\n\nfunction createResourceEdge(definition, identifier) {\n return {\n definition,\n identifier,\n state: createState(),\n transactionRef: 0,\n localState: null,\n remoteState: null,\n meta: null,\n links: null\n };\n}\nfunction legacyGetResourceRelationshipData(source) {\n let data;\n const payload = {};\n if (source.localState) {\n data = source.localState;\n }\n if (source.localState === null && source.state.hasReceivedData) {\n data = null;\n }\n if (source.links) {\n payload.links = source.links;\n }\n if (data !== undefined) {\n payload.data = data;\n }\n if (source.meta) {\n payload.meta = source.meta;\n }\n return payload;\n}\nfunction addToRelatedRecords(graph, op, isRemote) {\n assert(`Graph does not yet support updating the remote state of a relationship via the ${op.op} operation`, !isRemote);\n const {\n record,\n value,\n index\n } = op;\n const relationship = graph.get(record, op.field);\n assert(`You can only '${op.op}' on a hasMany relationship. ${record.type}.${op.field} is a ${relationship.definition.kind}`, isHasMany(relationship));\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n addRelatedRecord(graph, relationship, record, value[i], index !== undefined ? index + i : index, isRemote);\n }\n } else {\n addRelatedRecord(graph, relationship, record, value, index, isRemote);\n }\n notifyChange(graph, relationship.identifier, relationship.definition.key);\n}\nfunction addRelatedRecord(graph, relationship, record, value, index, isRemote) {\n assert(`expected an identifier to add to the collection relationship`, value);\n if (_addLocal(graph, record, relationship, value, index ?? null)) {\n addToInverse(graph, value, relationship.definition.inverseKey, record, isRemote);\n }\n}\nfunction mergeIdentifier(graph, op, relationships) {\n Object.keys(relationships).forEach(key => {\n const rel = relationships[key];\n if (!rel) {\n return;\n }\n mergeIdentifierForRelationship(graph, op, rel);\n });\n}\nfunction mergeIdentifierForRelationship(graph, op, rel) {\n rel.identifier = op.value;\n forAllRelatedIdentifiers(rel, identifier => {\n const inverse = graph.get(identifier, rel.definition.inverseKey);\n mergeInRelationship(graph, inverse, op);\n });\n}\nfunction mergeInRelationship(graph, rel, op) {\n if (isBelongsTo(rel)) {\n mergeBelongsTo(graph, rel, op);\n } else if (isHasMany(rel)) {\n mergeHasMany(graph, rel, op);\n } else {\n mergeImplicit(graph, rel, op);\n }\n}\nfunction mergeBelongsTo(graph, rel, op) {\n if (rel.remoteState === op.record) {\n rel.remoteState = op.value;\n }\n if (rel.localState === op.record) {\n rel.localState = op.record;\n notifyChange(graph, rel.identifier, rel.definition.key);\n }\n}\nfunction mergeHasMany(graph, rel, op) {\n if (rel.remoteMembers.has(op.record)) {\n rel.remoteMembers.delete(op.record);\n rel.remoteMembers.add(op.value);\n const index = rel.remoteState.indexOf(op.record);\n rel.remoteState.splice(index, 1, op.value);\n rel.isDirty = true;\n }\n if (rel.additions?.has(op.record)) {\n rel.additions.delete(op.record);\n rel.additions.add(op.value);\n rel.isDirty = true;\n }\n if (rel.removals?.has(op.record)) {\n rel.removals.delete(op.record);\n rel.removals.add(op.value);\n rel.isDirty = true;\n }\n if (rel.isDirty) {\n notifyChange(graph, rel.identifier, rel.definition.key);\n }\n}\nfunction mergeImplicit(graph, rel, op) {\n if (rel.remoteMembers.has(op.record)) {\n rel.remoteMembers.delete(op.record);\n rel.remoteMembers.add(op.value);\n }\n if (rel.localMembers.has(op.record)) {\n rel.localMembers.delete(op.record);\n rel.localMembers.add(op.value);\n }\n}\nfunction removeFromRelatedRecords(graph, op, isRemote) {\n assert(`Graph does not yet support updating the remote state of a relationship via the ${op.op} operation`, !isRemote);\n const {\n record,\n value\n } = op;\n const relationship = graph.get(record, op.field);\n assert(`You can only '${op.op}' on a hasMany relationship. ${record.type}.${op.field} is a ${relationship.definition.kind}`, isHasMany(relationship));\n // TODO we should potentially thread the index information through here\n // when available as it may make it faster to remove from the local state\n // when trying to patch more efficiently without blowing away the entire\n // local state array\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n removeRelatedRecord(graph, relationship, record, value[i], isRemote);\n }\n } else {\n removeRelatedRecord(graph, relationship, record, value, isRemote);\n }\n notifyChange(graph, relationship.identifier, relationship.definition.key);\n}\nfunction removeRelatedRecord(graph, relationship, record, value, isRemote) {\n assert(`expected an identifier to remove from the collection relationship`, value);\n if (_removeLocal(relationship, value)) {\n removeFromInverse(graph, value, relationship.definition.inverseKey, record, isRemote);\n }\n}\n\n/*\n This method normalizes a link to an \"links object\". If the passed link is\n already an object it's returned without any modifications.\n\n See http://jsonapi.org/format/#document-links for more information.\n*/\nfunction _normalizeLink(link) {\n switch (typeof link) {\n case 'object':\n return link;\n case 'string':\n return {\n href: link\n };\n }\n}\n\n/*\n Updates the \"canonical\" or \"remote\" state of a relationship, replacing any existing\n state and blowing away any local changes (excepting new records).\n*/\nfunction updateRelationshipOperation(graph, op) {\n const relationship = graph.get(op.record, op.field);\n assert(`Cannot update an implicit relationship`, isHasMany(relationship) || isBelongsTo(relationship));\n const {\n definition,\n state,\n identifier\n } = relationship;\n const {\n isCollection\n } = definition;\n const payload = op.value;\n let hasRelationshipDataProperty = false;\n let hasUpdatedLink = false;\n if (payload.meta) {\n relationship.meta = payload.meta;\n }\n if (payload.data !== undefined) {\n hasRelationshipDataProperty = true;\n if (isCollection) {\n // TODO deprecate this case. We\n // have tests saying we support it.\n if (payload.data === null) {\n payload.data = [];\n }\n assert(`Expected an array`, Array.isArray(payload.data));\n const cache = graph.store.identifierCache;\n graph.update({\n op: 'replaceRelatedRecords',\n record: identifier,\n field: op.field,\n value: upgradeIdentifiers(payload.data, cache)\n }, true);\n } else {\n graph.update({\n op: 'replaceRelatedRecord',\n record: identifier,\n field: op.field,\n value: payload.data ? graph.store.identifierCache.upgradeIdentifier(payload.data) : null\n }, true);\n }\n } else if (definition.isAsync === false && !state.hasReceivedData) {\n hasRelationshipDataProperty = true;\n if (isCollection) {\n graph.update({\n op: 'replaceRelatedRecords',\n record: identifier,\n field: op.field,\n value: []\n }, true);\n } else {\n graph.update({\n op: 'replaceRelatedRecord',\n record: identifier,\n field: op.field,\n value: null\n }, true);\n }\n }\n if (payload.links) {\n const originalLinks = relationship.links;\n relationship.links = payload.links;\n if (payload.links.related) {\n const relatedLink = _normalizeLink(payload.links.related);\n const currentLink = originalLinks && originalLinks.related ? _normalizeLink(originalLinks.related) : null;\n const currentLinkHref = currentLink ? currentLink.href : null;\n if (relatedLink && relatedLink.href && relatedLink.href !== currentLinkHref) {\n warn(`You pushed a record of type '${identifier.type}' with a relationship '${definition.key}' configured as 'async: false'. You've included a link but no primary data, this may be an error in your payload. EmberData will treat this relationship as known-to-be-empty.`, definition.isAsync || state.hasReceivedData, {\n id: 'ds.store.push-link-for-sync-relationship'\n });\n assert(`You have pushed a record of type '${identifier.type}' with '${definition.key}' as a link, but the value of that link is not a string.`, typeof relatedLink.href === 'string' || relatedLink.href === null);\n hasUpdatedLink = true;\n }\n }\n }\n\n /*\n Data being pushed into the relationship might contain only data or links,\n or a combination of both.\n IF contains only data\n IF contains both links and data\n state.isEmpty -> true if is empty array (has-many) or is null (belongs-to)\n state.hasReceivedData -> true\n hasDematerializedInverse -> false\n state.isStale -> false\n allInverseRecordsAreLoaded -> run-check-to-determine\n IF contains only links\n state.isStale -> true\n */\n relationship.state.hasFailedLoadAttempt = false;\n if (hasRelationshipDataProperty) {\n const relationshipIsEmpty = payload.data === null || Array.isArray(payload.data) && payload.data.length === 0;\n\n // we don't need to notify here as the update op we pushed in above will notify once\n // membership is in the correct state.\n relationship.state.hasReceivedData = true;\n relationship.state.isStale = false;\n relationship.state.hasDematerializedInverse = false;\n relationship.state.isEmpty = relationshipIsEmpty;\n } else if (hasUpdatedLink) {\n // only notify stale if we have not previously received membership data.\n // within this same transaction\n // this prevents refetching when only one side of the relationship in the\n // payload contains the info while the other side contains just a link\n // this only works when the side with just a link is a belongsTo, as we\n // don't know if a hasMany has full information or not.\n // see #7049 for context.\n if (isCollection || !relationship.state.hasReceivedData || isStaleTransaction(relationship.transactionRef, graph._transaction)) {\n relationship.state.isStale = true;\n notifyChange(graph, relationship.identifier, relationship.definition.key);\n } else {\n relationship.state.isStale = false;\n }\n }\n}\nfunction isStaleTransaction(relationshipTransactionId, graphTransactionId) {\n return relationshipTransactionId === 0 ||\n // relationship has never notified\n graphTransactionId === null ||\n // we are not in a transaction\n relationshipTransactionId < graphTransactionId // we are not part of the current transaction\n ;\n}\nfunction upgradeIdentifiers(arr, cache) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = cache.upgradeIdentifier(arr[i]);\n }\n return arr;\n}\nconst Graphs = new Map();\nlet transactionRef = 0;\n/*\n * Graph acts as the cache for relationship data. It allows for\n * us to ask about and update relationships for a given Identifier\n * without requiring other objects for that Identifier to be\n * instantiated (such as `RecordData` or a `Record`)\n *\n * This also allows for us to make more substantive changes to relationships\n * with increasingly minor alterations to other portions of the internals\n * over time.\n *\n * The graph is made up of nodes and edges. Each unique identifier gets\n * its own node, which is a dictionary with a list of that node's edges\n * (or connections) to other nodes. In `Model` terms, a node represents a\n * record instance, with each key (an edge) in the dictionary correlating\n * to either a `hasMany` or `belongsTo` field on that record instance.\n *\n * The value for each key, or `edge` is the identifier(s) the node relates\n * to in the graph from that key.\n */\nclass Graph {\n constructor(store) {\n this._definitionCache = Object.create(null);\n this._metaCache = Object.create(null);\n this._potentialPolymorphicTypes = Object.create(null);\n this.identifiers = new Map();\n this.store = store;\n this.isDestroyed = false;\n this._willSyncRemote = false;\n this._willSyncLocal = false;\n this._pushedUpdates = {\n belongsTo: undefined,\n hasMany: undefined,\n deletions: []\n };\n this._updatedRelationships = new Set();\n this._transaction = null;\n this._removing = null;\n this.silenceNotifications = false;\n }\n has(identifier, propertyName) {\n const relationships = this.identifiers.get(identifier);\n if (!relationships) {\n return false;\n }\n return relationships[propertyName] !== undefined;\n }\n getDefinition(identifier, propertyName) {\n let defs = this._metaCache[identifier.type];\n let meta = defs?.[propertyName];\n if (!meta) {\n const info = /*#__NOINLINE__*/upgradeDefinition(this, identifier, propertyName);\n assert(`Could not determine relationship information for ${identifier.type}.${propertyName}`, info !== null);\n\n // if (info.rhs_definition?.kind === 'implicit') {\n // we should possibly also do this\n // but it would result in being extremely permissive for other relationships by accident\n // this.registerPolymorphicType(info.rhs_baseModelName, identifier.type);\n // }\n\n meta = /*#__NOINLINE__*/isLHS(info, identifier.type, propertyName) ? info.lhs_definition : info.rhs_definition;\n defs = this._metaCache[identifier.type] = defs || {};\n defs[propertyName] = meta;\n }\n return meta;\n }\n get(identifier, propertyName) {\n assert(`expected propertyName`, propertyName);\n let relationships = this.identifiers.get(identifier);\n if (!relationships) {\n relationships = Object.create(null);\n this.identifiers.set(identifier, relationships);\n }\n let relationship = relationships[propertyName];\n if (!relationship) {\n const meta = this.getDefinition(identifier, propertyName);\n if (meta.kind === 'belongsTo') {\n relationship = relationships[propertyName] = createResourceEdge(meta, identifier);\n } else if (meta.kind === 'hasMany') {\n relationship = relationships[propertyName] = createCollectionEdge(meta, identifier);\n } else {\n assert(`Expected kind to be implicit`, meta.kind === 'implicit' && meta.isImplicit === true);\n relationship = relationships[propertyName] = createImplicitEdge(meta, identifier);\n }\n }\n return relationship;\n }\n getData(identifier, propertyName) {\n const relationship = this.get(identifier, propertyName);\n assert(`Cannot getData() on an implicit relationship`, !isImplicit(relationship));\n if (isBelongsTo(relationship)) {\n return legacyGetResourceRelationshipData(relationship);\n }\n return legacyGetCollectionRelationshipData(relationship);\n }\n\n /*\n * Allows for the graph to dynamically discover polymorphic connections\n * without needing to walk prototype chains.\n *\n * Used by edges when an added `type` does not match the expected `type`\n * for that edge.\n *\n * Currently we assert before calling this. For a public API we will want\n * to call out to the schema manager to ask if we should consider these\n * types as equivalent for a given relationship.\n */\n registerPolymorphicType(type1, type2) {\n const typeCache = this._potentialPolymorphicTypes;\n let t1 = typeCache[type1];\n if (!t1) {\n t1 = typeCache[type1] = Object.create(null);\n }\n t1[type2] = true;\n let t2 = typeCache[type2];\n if (!t2) {\n t2 = typeCache[type2] = Object.create(null);\n }\n t2[type1] = true;\n }\n\n /*\n TODO move this comment somewhere else\n implicit relationships are relationships which have not been declared but the inverse side exists on\n another record somewhere\n For example if there was:\n ```app/models/comment.js\n import Model, { attr } from '@ember-data/model';\n export default class Comment extends Model {\n @attr text;\n }\n ```\n and there is also:\n ```app/models/post.js\n import Model, { attr, hasMany } from '@ember-data/model';\n export default class Post extends Model {\n @attr title;\n @hasMany('comment', { async: true, inverse: null }) comments;\n }\n ```\n Then we would have a implicit 'post' relationship for the comment record in order\n to be do things like remove the comment from the post if the comment were to be deleted.\n */\n\n isReleasable(identifier) {\n const relationships = this.identifiers.get(identifier);\n if (!relationships) {\n if (macroCondition(getOwnConfig().debug.LOG_GRAPH)) {\n // eslint-disable-next-line no-console\n console.log(`graph: RELEASABLE ${String(identifier)}`);\n }\n return true;\n }\n const keys = Object.keys(relationships);\n for (let i = 0; i < keys.length; i++) {\n const relationship = relationships[keys[i]];\n // account for previously unloaded relationships\n // typically from a prior deletion of a record that pointed to this one implicitly\n if (relationship === undefined) {\n continue;\n }\n assert(`Expected a relationship`, relationship);\n if (relationship.definition.inverseIsAsync && !isNew(identifier)) {\n if (macroCondition(getOwnConfig().debug.LOG_GRAPH)) {\n // eslint-disable-next-line no-console\n console.log(`graph: <> RELEASABLE ${String(identifier)}`);\n }\n return false;\n }\n }\n if (macroCondition(getOwnConfig().debug.LOG_GRAPH)) {\n // eslint-disable-next-line no-console\n console.log(`graph: RELEASABLE ${String(identifier)}`);\n }\n return true;\n }\n unload(identifier, silenceNotifications) {\n if (macroCondition(getOwnConfig().debug.LOG_GRAPH)) {\n // eslint-disable-next-line no-console\n console.log(`graph: unload ${String(identifier)}`);\n }\n const relationships = this.identifiers.get(identifier);\n if (relationships) {\n // cleans up the graph but retains some nodes\n // to allow for rematerialization\n Object.keys(relationships).forEach(key => {\n const rel = relationships[key];\n if (!rel) {\n return;\n }\n /*#__NOINLINE__*/\n destroyRelationship(this, rel, silenceNotifications);\n if ( /*#__NOINLINE__*/isImplicit(rel)) {\n // @ts-expect-error\n relationships[key] = undefined;\n }\n });\n }\n }\n _isDirty(identifier, field) {\n const relationships = this.identifiers.get(identifier);\n if (!relationships) {\n return false;\n }\n const relationship = relationships[field];\n if (!relationship) {\n return false;\n }\n if (isBelongsTo(relationship)) {\n return relationship.localState !== relationship.remoteState;\n } else if (isHasMany(relationship)) {\n const hasAdditions = relationship.additions !== null && relationship.additions.size > 0;\n const hasRemovals = relationship.removals !== null && relationship.removals.size > 0;\n return hasAdditions || hasRemovals || isReordered(relationship);\n }\n return false;\n }\n getChanged(identifier) {\n const relationships = this.identifiers.get(identifier);\n const changed = new Map();\n if (!relationships) {\n return changed;\n }\n const keys = Object.keys(relationships);\n for (let i = 0; i < keys.length; i++) {\n const field = keys[i];\n const relationship = relationships[field];\n if (!relationship) {\n continue;\n }\n if (isBelongsTo(relationship)) {\n if (relationship.localState !== relationship.remoteState) {\n changed.set(field, {\n kind: 'resource',\n remoteState: relationship.remoteState,\n localState: relationship.localState\n });\n }\n } else if (isHasMany(relationship)) {\n const hasAdditions = relationship.additions !== null && relationship.additions.size > 0;\n const hasRemovals = relationship.removals !== null && relationship.removals.size > 0;\n const reordered = isReordered(relationship);\n if (hasAdditions || hasRemovals || reordered) {\n changed.set(field, {\n kind: 'collection',\n additions: new Set(relationship.additions) || new Set(),\n removals: new Set(relationship.removals) || new Set(),\n remoteState: relationship.remoteState,\n localState: legacyGetCollectionRelationshipData(relationship).data || [],\n reordered\n });\n }\n }\n }\n return changed;\n }\n hasChanged(identifier) {\n const relationships = this.identifiers.get(identifier);\n if (!relationships) {\n return false;\n }\n const keys = Object.keys(relationships);\n for (let i = 0; i < keys.length; i++) {\n if (this._isDirty(identifier, keys[i])) {\n return true;\n }\n }\n return false;\n }\n rollback(identifier) {\n const relationships = this.identifiers.get(identifier);\n const changed = [];\n if (!relationships) {\n return changed;\n }\n const keys = Object.keys(relationships);\n for (let i = 0; i < keys.length; i++) {\n const field = keys[i];\n const relationship = relationships[field];\n if (!relationship) {\n continue;\n }\n if (this._isDirty(identifier, field)) {\n rollbackRelationship(this, identifier, field, relationship);\n changed.push(field);\n }\n }\n return changed;\n }\n remove(identifier) {\n if (macroCondition(getOwnConfig().debug.LOG_GRAPH)) {\n // eslint-disable-next-line no-console\n console.log(`graph: remove ${String(identifier)}`);\n }\n assert(`Cannot remove ${String(identifier)} while still removing ${String(this._removing)}`, !this._removing);\n this._removing = identifier;\n this.unload(identifier);\n this.identifiers.delete(identifier);\n this._removing = null;\n }\n\n /*\n * Remote state changes\n */\n push(op) {\n if (macroCondition(getOwnConfig().debug.LOG_GRAPH)) {\n // eslint-disable-next-line no-console\n console.log(`graph: push ${String(op.record)}`, op);\n }\n if (op.op === 'deleteRecord') {\n this._pushedUpdates.deletions.push(op);\n } else {\n const definition = this.getDefinition(op.record, op.field);\n assert(`Cannot push a remote update for an implicit relationship`, definition.kind !== 'implicit');\n addPending(this._pushedUpdates, definition, op);\n }\n if (!this._willSyncRemote) {\n this._willSyncRemote = true;\n getStore(this.store)._schedule('coalesce', () => this._flushRemoteQueue());\n }\n }\n\n /*\n * Local state changes\n */\n\n update(op, isRemote = false) {\n assert(`Cannot update an implicit relationship`, op.op === 'deleteRecord' || op.op === 'mergeIdentifiers' || !isImplicit(this.get(op.record, op.field)));\n if (macroCondition(getOwnConfig().debug.LOG_GRAPH)) {\n // eslint-disable-next-line no-console\n console.log(`graph: update (${isRemote ? 'remote' : 'local'}) ${String(op.record)}`, op);\n }\n switch (op.op) {\n case 'mergeIdentifiers':\n {\n const relationships = this.identifiers.get(op.record);\n if (relationships) {\n /*#__NOINLINE__*/mergeIdentifier(this, op, relationships);\n }\n break;\n }\n case 'updateRelationship':\n assert(`Can only perform the operation updateRelationship on remote state`, isRemote);\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n // in debug, assert payload validity eagerly\n // TODO add deprecations/assertion here for duplicates\n assertValidRelationshipPayload(this, op);\n }\n /*#__NOINLINE__*/\n updateRelationshipOperation(this, op);\n break;\n case 'deleteRecord':\n {\n assert(`Can only perform the operation deleteRelationship on remote state`, isRemote);\n const identifier = op.record;\n const relationships = this.identifiers.get(identifier);\n if (relationships) {\n Object.keys(relationships).forEach(key => {\n const rel = relationships[key];\n if (!rel) {\n return;\n }\n // works together with the has check\n // @ts-expect-error\n relationships[key] = undefined;\n /*#__NOINLINE__*/\n removeCompletelyFromInverse(this, rel);\n });\n this.identifiers.delete(identifier);\n }\n break;\n }\n case 'replaceRelatedRecord':\n /*#__NOINLINE__*/replaceRelatedRecord(this, op, isRemote);\n break;\n case 'addToRelatedRecords':\n // we will lift this restriction once the cache is allowed to make remote updates directly\n assert(`Can only perform the operation addToRelatedRecords on local state`, !isRemote);\n /*#__NOINLINE__*/\n addToRelatedRecords(this, op, isRemote);\n break;\n case 'removeFromRelatedRecords':\n // we will lift this restriction once the cache is allowed to make remote updates directly\n assert(`Can only perform the operation removeFromRelatedRecords on local state`, !isRemote);\n /*#__NOINLINE__*/\n removeFromRelatedRecords(this, op, isRemote);\n break;\n case 'replaceRelatedRecords':\n /*#__NOINLINE__*/replaceRelatedRecords(this, op, isRemote);\n break;\n default:\n assert(`No local relationship update operation exists for '${op.op}'`);\n }\n }\n _scheduleLocalSync(relationship) {\n this._updatedRelationships.add(relationship);\n if (!this._willSyncLocal) {\n this._willSyncLocal = true;\n getStore(this.store)._schedule('sync', () => this._flushLocalQueue());\n }\n }\n _flushRemoteQueue() {\n if (!this._willSyncRemote) {\n return;\n }\n if (macroCondition(getOwnConfig().debug.LOG_GRAPH)) {\n // eslint-disable-next-line no-console\n console.groupCollapsed(`Graph: Initialized Transaction`);\n }\n this._transaction = ++transactionRef;\n this._willSyncRemote = false;\n const updates = this._pushedUpdates;\n const {\n deletions,\n hasMany,\n belongsTo\n } = updates;\n updates.deletions = [];\n updates.hasMany = undefined;\n updates.belongsTo = undefined;\n for (let i = 0; i < deletions.length; i++) {\n this.update(deletions[i], true);\n }\n if (hasMany) {\n flushPending(this, hasMany);\n }\n if (belongsTo) {\n flushPending(this, belongsTo);\n }\n this._transaction = null;\n if (macroCondition(getOwnConfig().debug.LOG_GRAPH)) {\n // eslint-disable-next-line no-console\n console.log(`Graph: transaction finalized`);\n // eslint-disable-next-line no-console\n console.groupEnd();\n }\n }\n _addToTransaction(relationship) {\n assert(`expected a transaction`, this._transaction !== null);\n if (macroCondition(getOwnConfig().debug.LOG_GRAPH)) {\n // eslint-disable-next-line no-console\n console.log(`Graph: ${String(relationship.identifier)} ${relationship.definition.key} added to transaction`);\n }\n relationship.transactionRef = this._transaction;\n }\n _flushLocalQueue() {\n if (!this._willSyncLocal) {\n return;\n }\n if (this.silenceNotifications) {\n this.silenceNotifications = false;\n this._updatedRelationships = new Set();\n return;\n }\n this._willSyncLocal = false;\n const updated = this._updatedRelationships;\n this._updatedRelationships = new Set();\n updated.forEach(rel => notifyChange(this, rel.identifier, rel.definition.key));\n }\n destroy() {\n Graphs.delete(this.store);\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n Graphs.delete(getStore(this.store));\n if (Graphs.size) {\n Graphs.forEach((_, key) => {\n assert(`Memory Leak Detected, likely the test or app instance previous to this was not torn down properly`,\n // @ts-expect-error\n !key.isDestroyed && !key.isDestroying);\n });\n }\n }\n this.identifiers.clear();\n this.store = null;\n this.isDestroyed = true;\n }\n}\nfunction flushPending(graph, ops) {\n ops.forEach(type => {\n type.forEach(opList => {\n flushPendingList(graph, opList);\n });\n });\n}\nfunction flushPendingList(graph, opList) {\n for (let i = 0; i < opList.length; i++) {\n graph.update(opList[i], true);\n }\n}\n\n// Handle dematerialization for relationship `rel`. In all cases, notify the\n// relationship of the dematerialization: this is done so the relationship can\n// notify its inverse which needs to update state\n//\n// If the inverse is sync, unloading this record is treated as a client-side\n// delete, so we remove the inverse records from this relationship to\n// disconnect the graph. Because it's not async, we don't need to keep around\n// the identifier as an id-wrapper for references\nfunction destroyRelationship(graph, rel, silenceNotifications) {\n if (isImplicit(rel)) {\n if (graph.isReleasable(rel.identifier)) {\n /*#__NOINLINE__*/removeCompletelyFromInverse(graph, rel);\n }\n return;\n }\n const {\n identifier\n } = rel;\n const {\n inverseKey\n } = rel.definition;\n if (!rel.definition.inverseIsImplicit) {\n /*#__NOINLINE__*/forAllRelatedIdentifiers(rel, inverseIdentifer => /*#__NOINLINE__*/notifyInverseOfDematerialization(graph, inverseIdentifer, inverseKey, identifier, silenceNotifications));\n }\n if (!rel.definition.inverseIsImplicit && !rel.definition.inverseIsAsync) {\n rel.state.isStale = true;\n /*#__NOINLINE__*/\n clearRelationship(rel);\n\n // necessary to clear relationships in the ui from dematerialized records\n // hasMany is managed by Model which calls `retreiveLatest` after\n // dematerializing the resource-cache instance.\n // but sync belongsTo requires this since they don't have a proxy to update.\n // so we have to notify so it will \"update\" to null.\n // we should discuss whether we still care about this, probably fine to just\n // leave the ui relationship populated since the record is destroyed and\n // internally we've fully cleaned up.\n if (!rel.definition.isAsync && !silenceNotifications) {\n /*#__NOINLINE__*/notifyChange(graph, rel.identifier, rel.definition.key);\n }\n }\n}\nfunction notifyInverseOfDematerialization(graph, inverseIdentifier, inverseKey, identifier, silenceNotifications) {\n if (!graph.has(inverseIdentifier, inverseKey)) {\n return;\n }\n const relationship = graph.get(inverseIdentifier, inverseKey);\n assert(`expected no implicit`, !isImplicit(relationship));\n\n // For remote members, it is possible that inverseRecordData has already been associated to\n // to another record. For such cases, do not dematerialize the inverseRecordData\n if (!isBelongsTo(relationship) || !relationship.localState || identifier === relationship.localState) {\n /*#__NOINLINE__*/removeDematerializedInverse(graph, relationship, identifier, silenceNotifications);\n }\n}\nfunction clearRelationship(relationship) {\n if (isBelongsTo(relationship)) {\n relationship.localState = null;\n relationship.remoteState = null;\n relationship.state.hasReceivedData = false;\n relationship.state.isEmpty = true;\n } else {\n relationship.remoteMembers.clear();\n relationship.remoteState = [];\n relationship.additions = null;\n relationship.removals = null;\n relationship.localState = null;\n }\n}\nfunction removeDematerializedInverse(graph, relationship, inverseIdentifier, silenceNotifications) {\n if (isBelongsTo(relationship)) {\n const localInverse = relationship.localState;\n if (!relationship.definition.isAsync || localInverse && isNew(localInverse)) {\n // unloading inverse of a sync relationship is treated as a client-side\n // delete, so actually remove the models don't merely invalidate the cp\n // cache.\n // if the record being unloaded only exists on the client, we similarly\n // treat it as a client side delete\n if (relationship.localState === localInverse && localInverse !== null) {\n relationship.localState = null;\n }\n if (relationship.remoteState === localInverse && localInverse !== null) {\n relationship.remoteState = null;\n relationship.state.hasReceivedData = true;\n relationship.state.isEmpty = true;\n if (relationship.localState && !isNew(relationship.localState)) {\n relationship.localState = null;\n }\n }\n } else {\n relationship.state.hasDematerializedInverse = true;\n }\n if (!silenceNotifications) {\n notifyChange(graph, relationship.identifier, relationship.definition.key);\n }\n } else {\n if (!relationship.definition.isAsync || inverseIdentifier && isNew(inverseIdentifier)) {\n // unloading inverse of a sync relationship is treated as a client-side\n // delete, so actually remove the models don't merely invalidate the cp\n // cache.\n // if the record being unloaded only exists on the client, we similarly\n // treat it as a client side delete\n /*#__NOINLINE__*/\n removeIdentifierCompletelyFromRelationship(graph, relationship, inverseIdentifier);\n } else {\n relationship.state.hasDematerializedInverse = true;\n }\n if (!silenceNotifications) {\n notifyChange(graph, relationship.identifier, relationship.definition.key);\n }\n }\n}\nfunction removeCompletelyFromInverse(graph, relationship) {\n const {\n identifier\n } = relationship;\n const {\n inverseKey\n } = relationship.definition;\n forAllRelatedIdentifiers(relationship, inverseIdentifier => {\n if (graph.has(inverseIdentifier, inverseKey)) {\n removeIdentifierCompletelyFromRelationship(graph, graph.get(inverseIdentifier, inverseKey), identifier);\n }\n });\n if (isBelongsTo(relationship)) {\n if (!relationship.definition.isAsync) {\n clearRelationship(relationship);\n }\n relationship.localState = null;\n } else if (isHasMany(relationship)) {\n if (!relationship.definition.isAsync) {\n clearRelationship(relationship);\n notifyChange(graph, relationship.identifier, relationship.definition.key);\n }\n } else {\n relationship.remoteMembers.clear();\n relationship.localMembers.clear();\n }\n}\nfunction addPending(cache, definition, op) {\n const lc = cache[definition.kind] = cache[definition.kind] || new Map();\n let lc2 = lc.get(definition.inverseType);\n if (!lc2) {\n lc2 = new Map();\n lc.set(definition.inverseType, lc2);\n }\n let arr = lc2.get(op.field);\n if (!arr) {\n arr = [];\n lc2.set(op.field, arr);\n }\n arr.push(op);\n}\nfunction isReordered(relationship) {\n // if we are dirty we are never re-ordered because accessing\n // the state would flush away any reordering.\n if (relationship.isDirty) {\n return false;\n }\n const {\n remoteState,\n localState,\n additions,\n removals\n } = relationship;\n assert(`Expected localSate`, localState);\n for (let i = 0, j = 0; i < remoteState.length; i++) {\n const member = remoteState[i];\n const localMember = localState[j];\n if (member !== localMember) {\n if (removals && removals.has(member)) {\n // dont increment j because we want to skip this\n continue;\n }\n if (additions && additions.has(localMember)) {\n // increment j to skip this localMember\n // decrement i to repeat this remoteMember\n j++;\n i--;\n continue;\n }\n return true;\n }\n\n // if we made it here, increment j\n j++;\n }\n return false;\n}\nfunction isStore(maybeStore) {\n return maybeStore._instanceCache !== undefined;\n}\nfunction getWrapper(store) {\n return isStore(store) ? store._instanceCache._storeWrapper : store;\n}\nfunction peekGraph(store) {\n return Graphs.get(getWrapper(store));\n}\nfunction graphFor(store) {\n const wrapper = getWrapper(store);\n let graph = Graphs.get(wrapper);\n if (!graph) {\n graph = new Graph(wrapper);\n Graphs.set(wrapper, graph);\n getStore(wrapper)._graph = graph;\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (getStore(wrapper).isDestroying) {\n throw new Error(`Memory Leak Detected During Teardown`);\n }\n }\n }\n return graph;\n}\nexport { graphFor, isBelongsTo, peekGraph };","import { SOURCE, coerceId } from '@ember-data/store/-private';\nimport { assert, warn } from '@ember/debug';\nimport { macroCondition, getOwnConfig, importSync } from '@embroider/macros';\nimport { createDeferred } from '@ember-data/request';\n\n/**\n @module @ember-data/legacy-compat\n*/\n\n/**\n SnapshotRecordArray is not directly instantiable.\n Instances are provided to consuming application's\n adapters for certain requests.\n\n @class SnapshotRecordArray\n @public\n*/\nclass SnapshotRecordArray {\n /**\n SnapshotRecordArray is not directly instantiable.\n Instances are provided to consuming application's\n adapters and serializers for certain requests.\n @method constructor\n @private\n @constructor\n @param {Store} store\n @param {string} type\n @param options\n */\n constructor(store, type, options = {}) {\n this.__store = store;\n /**\n An array of snapshots\n @private\n @property _snapshots\n @type {Array}\n */\n this._snapshots = null;\n\n /**\n The modelName of the underlying records for the snapshots in the array, as a Model\n @property modelName\n @public\n @type {Model}\n */\n this.modelName = type;\n\n /**\n A hash of adapter options passed into the store method for this request.\n Example\n ```app/adapters/post.js\n import MyCustomAdapter from './custom-adapter';\n export default class PostAdapter extends MyCustomAdapter {\n findAll(store, type, sinceToken, snapshotRecordArray) {\n if (snapshotRecordArray.adapterOptions.subscribe) {\n // ...\n }\n // ...\n }\n }\n ```\n @property adapterOptions\n @public\n @type {Object}\n */\n this.adapterOptions = options.adapterOptions;\n\n /**\n The relationships to include for this request.\n Example\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n export default class ApplicationAdapter extends Adapter {\n findAll(store, type, snapshotRecordArray) {\n let url = `/${type.modelName}?include=${encodeURIComponent(snapshotRecordArray.include)}`;\n return fetch(url).then((response) => response.json())\n }\n }\n ```\n @property include\n @public\n @type {String|Array}\n */\n this.include = options.include;\n }\n\n /**\n An array of records\n @property _recordArray\n @private\n @type {Array}\n */\n get _recordArray() {\n return this.__store.peekAll(this.modelName);\n }\n\n /**\n Number of records in the array\n Example\n ```app/adapters/post.js\n import JSONAPIAdapter from '@ember-data/adapter/json-api';\n export default class PostAdapter extends JSONAPIAdapter {\n shouldReloadAll(store, snapshotRecordArray) {\n return !snapshotRecordArray.length;\n }\n });\n ```\n @property length\n @public\n @type {Number}\n */\n get length() {\n return this._recordArray.length;\n }\n\n /**\n Get snapshots of the underlying record array\n Example\n ```app/adapters/post.js\n import JSONAPIAdapter from '@ember-data/adapter/json-api';\n export default class PostAdapter extends JSONAPIAdapter {\n shouldReloadAll(store, snapshotArray) {\n let snapshots = snapshotArray.snapshots();\n return snapshots.any(function(ticketSnapshot) {\n let timeDiff = moment().diff(ticketSnapshot.attr('lastAccessedAt'), 'minutes');\n if (timeDiff > 20) {\n return true;\n } else {\n return false;\n }\n });\n }\n }\n ```\n @method snapshots\n @public\n @return {Array} Array of snapshots\n */\n snapshots() {\n if (this._snapshots !== null) {\n return this._snapshots;\n }\n upgradeStore(this.__store);\n const {\n _fetchManager\n } = this.__store;\n this._snapshots = this._recordArray[SOURCE].map(identifier => _fetchManager.createSnapshot(identifier));\n return this._snapshots;\n }\n}\nfunction assertIdentifierHasId(identifier) {\n assert(`Attempted to schedule a fetch for a record without an id.`, identifier && identifier.id !== null);\n}\nfunction iterateData(data, fn) {\n if (Array.isArray(data)) {\n return data.map(fn);\n } else {\n return fn(data);\n }\n}\nfunction payloadIsNotBlank(adapterPayload) {\n if (Array.isArray(adapterPayload)) {\n return true;\n } else {\n return Object.keys(adapterPayload || {}).length !== 0;\n }\n}\n\n/**\n This is a helper method that validates a JSON API top-level document\n\n The format of a document is described here:\n http://jsonapi.org/format/#document-top-level\n\n @internal\n*/\nfunction validateDocumentStructure(doc) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n const errors = [];\n if (!doc || typeof doc !== 'object') {\n errors.push('Top level of a JSON API document must be an object');\n } else {\n if (!('data' in doc) && !('errors' in doc) && !('meta' in doc)) {\n errors.push('One or more of the following keys must be present: \"data\", \"errors\", \"meta\".');\n } else {\n if ('data' in doc && 'errors' in doc) {\n errors.push('Top level keys \"errors\" and \"data\" cannot both be present in a JSON API document');\n }\n }\n if ('data' in doc) {\n if (!(doc.data === null || Array.isArray(doc.data) || typeof doc.data === 'object')) {\n errors.push('data must be null, an object, or an array');\n }\n }\n if ('meta' in doc) {\n if (typeof doc.meta !== 'object') {\n errors.push('meta must be an object');\n }\n }\n if ('errors' in doc) {\n if (!Array.isArray(doc.errors)) {\n errors.push('errors must be an array');\n }\n }\n if ('links' in doc) {\n if (typeof doc.links !== 'object') {\n errors.push('links must be an object');\n }\n }\n if ('jsonapi' in doc) {\n if (typeof doc.jsonapi !== 'object') {\n errors.push('jsonapi must be an object');\n }\n }\n if ('included' in doc) {\n if (typeof doc.included !== 'object') {\n errors.push('included must be an array');\n }\n }\n }\n assert(`Response must be normalized to a valid JSON API document:\\n\\t* ${errors.join('\\n\\t* ')}`, errors.length === 0);\n }\n}\nfunction normalizeResponseHelper(serializer, store, modelClass, payload, id, requestType) {\n const normalizedResponse = serializer ? serializer.normalizeResponse(store, modelClass, payload, id, requestType) : payload;\n validateDocumentStructure(normalizedResponse);\n return normalizedResponse;\n}\n\n/**\n @module @ember-data/store\n*/\n/**\n Snapshot is not directly instantiable.\n Instances are provided to a consuming application's\n adapters and serializers for certain requests.\n\n Snapshots are only available when using `@ember-data/legacy-compat`\n for legacy compatibility with adapters and serializers.\n\n @class Snapshot\n @public\n*/\nclass Snapshot {\n /**\n * @method constructor\n * @constructor\n * @private\n * @param options\n * @param identifier\n * @param _store\n */\n constructor(options, identifier, store) {\n this._store = store;\n this.__attributes = null;\n this._belongsToRelationships = Object.create(null);\n this._belongsToIds = Object.create(null);\n this._hasManyRelationships = Object.create(null);\n this._hasManyIds = Object.create(null);\n const hasRecord = !!store._instanceCache.peek(identifier);\n this.modelName = identifier.type;\n\n /**\n The unique RecordIdentifier associated with this Snapshot.\n @property identifier\n @public\n @type {StableRecordIdentifier}\n */\n this.identifier = identifier;\n\n /*\n If the we do not yet have a record, then we are\n likely a snapshot being provided to a find request, so we\n populate __attributes lazily. Else, to preserve the \"moment\n in time\" in which a snapshot is created, we greedily grab\n the values.\n */\n if (hasRecord) {\n this._attributes;\n }\n\n /**\n The id of the snapshot's underlying record\n Example\n ```javascript\n // store.push('post', { id: 1, author: 'Tomster', title: 'Ember.js rocks' });\n postSnapshot.id; // => '1'\n ```\n @property id\n @type {String}\n @public\n */\n this.id = identifier.id;\n\n /**\n A hash of adapter options\n @property adapterOptions\n @type {Object}\n @public\n */\n this.adapterOptions = options.adapterOptions;\n\n /**\n If `include` was passed to the options hash for the request, the value\n would be available here.\n @property include\n @type {String|Array}\n @public\n */\n this.include = options.include;\n\n /**\n The name of the type of the underlying record for this snapshot, as a string.\n @property modelName\n @type {String}\n @public\n */\n this.modelName = identifier.type;\n if (hasRecord) {\n const cache = this._store.cache;\n this._changedAttributes = cache.changedAttrs(identifier);\n }\n }\n\n /**\n The underlying record for this snapshot. Can be used to access methods and\n properties defined on the record.\n Example\n ```javascript\n let json = snapshot.record.toJSON();\n ```\n @property record\n @type {Model}\n @public\n */\n get record() {\n const record = this._store.peekRecord(this.identifier);\n assert(`Record ${this.identifier.type} ${this.identifier.id} (${this.identifier.lid}) is not yet loaded and thus cannot be accessed from the Snapshot during serialization`, record !== null);\n return record;\n }\n get _attributes() {\n if (this.__attributes !== null) {\n return this.__attributes;\n }\n const attributes = this.__attributes = Object.create(null);\n const {\n identifier\n } = this;\n const attrs = Object.keys(this._store.getSchemaDefinitionService().attributesDefinitionFor(identifier));\n const cache = this._store.cache;\n attrs.forEach(keyName => {\n attributes[keyName] = cache.getAttr(identifier, keyName);\n });\n return attributes;\n }\n get isNew() {\n const cache = this._store.cache;\n return cache?.isNew(this.identifier) || false;\n }\n\n /**\n Returns the value of an attribute.\n Example\n ```javascript\n // store.push('post', { id: 1, author: 'Tomster', title: 'Ember.js rocks' });\n postSnapshot.attr('author'); // => 'Tomster'\n postSnapshot.attr('title'); // => 'Ember.js rocks'\n ```\n Note: Values are loaded eagerly and cached when the snapshot is created.\n @method attr\n @param {String} keyName\n @return {Object} The attribute value or undefined\n @public\n */\n attr(keyName) {\n if (keyName in this._attributes) {\n return this._attributes[keyName];\n }\n assert(`Model '${this.identifier.lid}' has no attribute named '${keyName}' defined.`, false);\n }\n\n /**\n Returns all attributes and their corresponding values.\n Example\n ```javascript\n // store.push('post', { id: 1, author: 'Tomster', title: 'Ember.js rocks' });\n postSnapshot.attributes(); // => { author: 'Tomster', title: 'Ember.js rocks' }\n ```\n @method attributes\n @return {Object} All attributes of the current snapshot\n @public\n */\n attributes() {\n return {\n ...this._attributes\n };\n }\n\n /**\n Returns all changed attributes and their old and new values.\n Example\n ```javascript\n // store.push('post', { id: 1, author: 'Tomster', title: 'Ember.js rocks' });\n postModel.set('title', 'Ember.js rocks!');\n postSnapshot.changedAttributes(); // => { title: ['Ember.js rocks', 'Ember.js rocks!'] }\n ```\n @method changedAttributes\n @return {Object} All changed attributes of the current snapshot\n @public\n */\n changedAttributes() {\n const changedAttributes = Object.create(null);\n if (!this._changedAttributes) {\n return changedAttributes;\n }\n const changedAttributeKeys = Object.keys(this._changedAttributes);\n for (let i = 0, length = changedAttributeKeys.length; i < length; i++) {\n const key = changedAttributeKeys[i];\n changedAttributes[key] = this._changedAttributes[key].slice();\n }\n return changedAttributes;\n }\n\n /**\n Returns the current value of a belongsTo relationship.\n `belongsTo` takes an optional hash of options as a second parameter,\n currently supported options are:\n - `id`: set to `true` if you only want the ID of the related record to be\n returned.\n Example\n ```javascript\n // store.push('post', { id: 1, title: 'Hello World' });\n // store.createRecord('comment', { body: 'Lorem ipsum', post: post });\n commentSnapshot.belongsTo('post'); // => Snapshot\n commentSnapshot.belongsTo('post', { id: true }); // => '1'\n // store.push('comment', { id: 1, body: 'Lorem ipsum' });\n commentSnapshot.belongsTo('post'); // => undefined\n ```\n Calling `belongsTo` will return a new Snapshot as long as there's any known\n data for the relationship available, such as an ID. If the relationship is\n known but unset, `belongsTo` will return `null`. If the contents of the\n relationship is unknown `belongsTo` will return `undefined`.\n Note: Relationships are loaded lazily and cached upon first access.\n @method belongsTo\n @param {String} keyName\n @param {Object} [options]\n @public\n @return {(Snapshot|String|null|undefined)} A snapshot or ID of a known\n relationship or null if the relationship is known but unset. undefined\n will be returned if the contents of the relationship is unknown.\n */\n belongsTo(keyName, options) {\n const returnModeIsId = !!(options && options.id);\n let result;\n const store = this._store;\n if (returnModeIsId === true && keyName in this._belongsToIds) {\n return this._belongsToIds[keyName];\n }\n if (returnModeIsId === false && keyName in this._belongsToRelationships) {\n return this._belongsToRelationships[keyName];\n }\n const relationshipMeta = store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type: this.modelName\n })[keyName];\n assert(`Model '${this.identifier.lid}' has no belongsTo relationship named '${keyName}' defined.`, relationshipMeta && relationshipMeta.kind === 'belongsTo');\n\n // TODO @runspired it seems this code branch would not work with CUSTOM_MODEL_CLASSes\n // this check is not a regression in behavior because relationships don't currently\n // function without access to intimate API contracts between RecordData and Model.\n // This is a requirement we should fix as soon as the relationship layer does not require\n // this intimate API usage.\n if (macroCondition(!getOwnConfig().packages.HAS_JSON_API_PACKAGE)) {\n assert(`snapshot.belongsTo only supported when using the package @ember-data/json-api`);\n }\n const graphFor = importSync('@ember-data/graph/-private').graphFor;\n const {\n identifier\n } = this;\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n const relationship = graphFor(this._store).get(identifier, keyName);\n assert(`You looked up the ${keyName} belongsTo relationship for { type: ${identifier.type}, id: ${identifier.id || ''}, lid: ${identifier.lid} but no such relationship was found.`, relationship);\n assert(`You looked up the ${keyName} belongsTo relationship for { type: ${identifier.type}, id: ${identifier.id || ''}, lid: ${identifier.lid} but that relationship is a hasMany.`, relationship.definition.kind === 'belongsTo');\n }\n const value = graphFor(this._store).getData(identifier, keyName);\n const data = value && value.data;\n const inverseIdentifier = data ? store.identifierCache.getOrCreateRecordIdentifier(data) : null;\n if (value && value.data !== undefined) {\n const cache = store.cache;\n if (inverseIdentifier && !cache.isDeleted(inverseIdentifier)) {\n if (returnModeIsId) {\n result = inverseIdentifier.id;\n } else {\n result = store._fetchManager.createSnapshot(inverseIdentifier);\n }\n } else {\n result = null;\n }\n }\n if (returnModeIsId) {\n this._belongsToIds[keyName] = result;\n } else {\n this._belongsToRelationships[keyName] = result;\n }\n return result;\n }\n\n /**\n Returns the current value of a hasMany relationship.\n `hasMany` takes an optional hash of options as a second parameter,\n currently supported options are:\n - `ids`: set to `true` if you only want the IDs of the related records to be\n returned.\n Example\n ```javascript\n // store.push('post', { id: 1, title: 'Hello World', comments: [2, 3] });\n postSnapshot.hasMany('comments'); // => [Snapshot, Snapshot]\n postSnapshot.hasMany('comments', { ids: true }); // => ['2', '3']\n // store.push('post', { id: 1, title: 'Hello World' });\n postSnapshot.hasMany('comments'); // => undefined\n ```\n Note: Relationships are loaded lazily and cached upon first access.\n @method hasMany\n @param {String} keyName\n @param {Object} [options]\n @public\n @return {(Array|undefined)} An array of snapshots or IDs of a known\n relationship or an empty array if the relationship is known but unset.\n undefined will be returned if the contents of the relationship is unknown.\n */\n hasMany(keyName, options) {\n const returnModeIsIds = !!(options && options.ids);\n let results;\n const cachedIds = this._hasManyIds[keyName];\n const cachedSnapshots = this._hasManyRelationships[keyName];\n if (returnModeIsIds === true && keyName in this._hasManyIds) {\n return cachedIds;\n }\n if (returnModeIsIds === false && keyName in this._hasManyRelationships) {\n return cachedSnapshots;\n }\n const store = this._store;\n const relationshipMeta = store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type: this.modelName\n })[keyName];\n assert(`Model '${this.identifier.lid}' has no hasMany relationship named '${keyName}' defined.`, relationshipMeta && relationshipMeta.kind === 'hasMany');\n\n // TODO @runspired it seems this code branch would not work with CUSTOM_MODEL_CLASSes\n // this check is not a regression in behavior because relationships don't currently\n // function without access to intimate API contracts between RecordData and Model.\n // This is a requirement we should fix as soon as the relationship layer does not require\n // this intimate API usage.\n if (macroCondition(!getOwnConfig().packages.HAS_JSON_API_PACKAGE)) {\n assert(`snapshot.hasMany only supported when using the package @ember-data/json-api`);\n }\n const graphFor = importSync('@ember-data/graph/-private').graphFor;\n const {\n identifier\n } = this;\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n const relationship = graphFor(this._store).get(identifier, keyName);\n assert(`You looked up the ${keyName} hasMany relationship for { type: ${identifier.type}, id: ${identifier.id || ''}, lid: ${identifier.lid} but no such relationship was found.`, relationship);\n assert(`You looked up the ${keyName} hasMany relationship for { type: ${identifier.type}, id: ${identifier.id || ''}, lid: ${identifier.lid} but that relationship is a belongsTo.`, relationship.definition.kind === 'hasMany');\n }\n const value = graphFor(this._store).getData(identifier, keyName);\n if (value.data) {\n results = [];\n value.data.forEach(member => {\n const inverseIdentifier = store.identifierCache.getOrCreateRecordIdentifier(member);\n const cache = store.cache;\n if (!cache.isDeleted(inverseIdentifier)) {\n if (returnModeIsIds) {\n results.push(inverseIdentifier.id);\n } else {\n results.push(store._fetchManager.createSnapshot(inverseIdentifier));\n }\n }\n });\n }\n\n // we assign even if `undefined` so that we don't reprocess the relationship\n // on next access. This works with the `keyName in` checks above.\n if (returnModeIsIds) {\n this._hasManyIds[keyName] = results;\n } else {\n this._hasManyRelationships[keyName] = results;\n }\n return results;\n }\n\n /**\n Iterates through all the attributes of the model, calling the passed\n function on each attribute.\n Example\n ```javascript\n snapshot.eachAttribute(function(name, meta) {\n // ...\n });\n ```\n @method eachAttribute\n @param {Function} callback the callback to execute\n @param {Object} [binding] the value to which the callback's `this` should be bound\n @public\n */\n eachAttribute(callback, binding) {\n const attrDefs = this._store.getSchemaDefinitionService().attributesDefinitionFor(this.identifier);\n Object.keys(attrDefs).forEach(key => {\n callback.call(binding, key, attrDefs[key]);\n });\n }\n\n /**\n Iterates through all the relationships of the model, calling the passed\n function on each relationship.\n Example\n ```javascript\n snapshot.eachRelationship(function(name, relationship) {\n // ...\n });\n ```\n @method eachRelationship\n @param {Function} callback the callback to execute\n @param {Object} [binding] the value to which the callback's `this` should be bound\n @public\n */\n eachRelationship(callback, binding) {\n const relationshipDefs = this._store.getSchemaDefinitionService().relationshipsDefinitionFor(this.identifier);\n Object.keys(relationshipDefs).forEach(key => {\n callback.call(binding, key, relationshipDefs[key]);\n });\n }\n\n /**\n Serializes the snapshot using the serializer for the model.\n Example\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n export default Adapter.extend({\n createRecord(store, type, snapshot) {\n let data = snapshot.serialize({ includeId: true });\n let url = `/${type.modelName}`;\n return fetch(url, {\n method: 'POST',\n body: data,\n }).then((response) => response.json())\n }\n });\n ```\n @method serialize\n @param {Object} options\n @return {Object} an object whose values are primitive JSON values only\n @public\n */\n serialize(options) {\n upgradeStore(this._store);\n const serializer = this._store.serializerFor(this.modelName);\n assert(`Cannot serialize record, no serializer found`, serializer);\n return serializer.serialize(this, options);\n }\n}\nconst SaveOp = Symbol('SaveOp');\nclass FetchManager {\n // fetches pending in the runloop, waiting to be coalesced\n\n constructor(store) {\n this._store = store;\n // used to keep track of all the find requests that need to be coalesced\n this._pendingFetch = new Map();\n this.requestCache = store.getRequestStateService();\n this.isDestroyed = false;\n }\n createSnapshot(identifier, options = {}) {\n return new Snapshot(options, identifier, this._store);\n }\n\n /**\n This method is called by `record.save`, and gets passed a\n resolver for the promise that `record.save` returns.\n It schedules saving to happen at the end of the run loop.\n @internal\n */\n scheduleSave(identifier, options) {\n const resolver = createDeferred();\n const query = {\n op: 'saveRecord',\n recordIdentifier: identifier,\n options\n };\n const queryRequest = {\n data: [query]\n };\n const snapshot = this.createSnapshot(identifier, options);\n const pendingSaveItem = {\n snapshot: snapshot,\n resolver: resolver,\n identifier,\n options,\n queryRequest\n };\n const monitored = this.requestCache._enqueue(resolver.promise, pendingSaveItem.queryRequest);\n _flushPendingSave(this._store, pendingSaveItem);\n return monitored;\n }\n scheduleFetch(identifier, options, request) {\n const query = {\n op: 'findRecord',\n recordIdentifier: identifier,\n options\n };\n const queryRequest = {\n data: [query]\n };\n const pendingFetch = this.getPendingFetch(identifier, options);\n if (pendingFetch) {\n return pendingFetch;\n }\n const modelName = identifier.type;\n const resolver = createDeferred();\n const pendingFetchItem = {\n identifier,\n resolver,\n options,\n queryRequest\n };\n const resolverPromise = resolver.promise;\n const store = this._store;\n const isInitialLoad = !store._instanceCache.recordIsLoaded(identifier); // we don't use isLoading directly because we are the request\n\n const monitored = this.requestCache._enqueue(resolverPromise, pendingFetchItem.queryRequest);\n let promise = monitored.then(payload => {\n // ensure that regardless of id returned we assign to the correct record\n if (payload.data && !Array.isArray(payload.data)) {\n payload.data.lid = identifier.lid;\n }\n\n // additional data received in the payload\n // may result in the merging of identifiers (and thus records)\n const potentiallyNewIm = store._push(payload, options.reload);\n if (potentiallyNewIm && !Array.isArray(potentiallyNewIm)) {\n return potentiallyNewIm;\n }\n return identifier;\n }, error => {\n assert(`Async Leak Detected: Expected the store to not be destroyed`, !store.isDestroyed);\n const cache = store.cache;\n if (!cache || cache.isEmpty(identifier) || isInitialLoad) {\n let isReleasable = true;\n if (macroCondition(getOwnConfig().packages.HAS_GRAPH_PACKAGE)) {\n if (!cache) {\n const graphFor = importSync('@ember-data/graph/-private').graphFor;\n const graph = graphFor(store);\n isReleasable = graph.isReleasable(identifier);\n if (!isReleasable) {\n graph.unload(identifier, true);\n }\n }\n }\n if (cache || isReleasable) {\n store._enableAsyncFlush = true;\n store._instanceCache.unloadRecord(identifier);\n store._enableAsyncFlush = null;\n }\n }\n throw error;\n });\n if (this._pendingFetch.size === 0) {\n void new Promise(resolve => setTimeout(resolve, 0)).then(() => {\n this.flushAllPendingFetches();\n });\n }\n const fetchesByType = this._pendingFetch;\n let fetchesById = fetchesByType.get(modelName);\n if (!fetchesById) {\n fetchesById = new Map();\n fetchesByType.set(modelName, fetchesById);\n }\n let requestsForIdentifier = fetchesById.get(identifier);\n if (!requestsForIdentifier) {\n requestsForIdentifier = [];\n fetchesById.set(identifier, requestsForIdentifier);\n }\n requestsForIdentifier.push(pendingFetchItem);\n if (macroCondition(getOwnConfig().env.TESTING)) {\n if (!request.disableTestWaiter) {\n const {\n waitForPromise\n } = importSync('@ember/test-waiters');\n promise = waitForPromise(promise);\n }\n }\n pendingFetchItem.promise = promise;\n return promise;\n }\n getPendingFetch(identifier, options) {\n const pendingFetches = this._pendingFetch.get(identifier.type)?.get(identifier);\n\n // We already have a pending fetch for this\n if (pendingFetches) {\n const matchingPendingFetch = pendingFetches.find(fetch => isSameRequest(options, fetch.options));\n if (matchingPendingFetch) {\n return matchingPendingFetch.promise;\n }\n }\n }\n flushAllPendingFetches() {\n if (this.isDestroyed) {\n return;\n }\n const store = this._store;\n this._pendingFetch.forEach((fetchItem, type) => _flushPendingFetchForType(store, fetchItem, type));\n this._pendingFetch.clear();\n }\n fetchDataIfNeededForIdentifier(identifier, options = {}, request) {\n // pre-loading will change the isEmpty value\n const isEmpty = _isEmpty(this._store._instanceCache, identifier);\n const isLoading = _isLoading(this._store._instanceCache, identifier);\n let promise;\n if (isEmpty) {\n assertIdentifierHasId(identifier);\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n promise = this.scheduleFetch(identifier, Object.assign({}, options, {\n reload: true\n }), request);\n } else {\n options.reload = true;\n promise = this.scheduleFetch(identifier, options, request);\n }\n } else if (isLoading) {\n promise = this.getPendingFetch(identifier, options);\n assert(`Expected to find a pending request for a record in the loading state, but found none`, promise);\n } else {\n promise = Promise.resolve(identifier);\n }\n return promise;\n }\n destroy() {\n this.isDestroyed = true;\n }\n}\nfunction _isEmpty(instanceCache, identifier) {\n const cache = instanceCache.cache;\n if (!cache) {\n return true;\n }\n const isNew = cache.isNew(identifier);\n const isDeleted = cache.isDeleted(identifier);\n const isEmpty = cache.isEmpty(identifier);\n return (!isNew || isDeleted) && isEmpty;\n}\nfunction _isLoading(cache, identifier) {\n const req = cache.store.getRequestStateService();\n // const fulfilled = req.getLastRequestForRecord(identifier);\n const isLoaded = cache.recordIsLoaded(identifier);\n return !isLoaded &&\n // fulfilled === null &&\n req.getPendingRequestsForRecord(identifier).some(r => r.type === 'query');\n}\nfunction includesSatisfies(current, existing) {\n // if we have no includes we are good\n if (!current?.length) {\n return true;\n }\n\n // if we are here we have includes,\n // and if existing has no includes then we will need a new request\n if (!existing?.length) {\n return false;\n }\n const arrCurrent = (Array.isArray(current) ? current : current.split(',')).sort();\n const arrExisting = (Array.isArray(existing) ? existing : existing.split(',')).sort();\n\n // includes are identical\n if (arrCurrent.join(',') === arrExisting.join(',')) {\n return true;\n }\n\n // if all of current includes are in existing includes then we are good\n // so if we find one that is not in existing then we need a new request\n for (let i = 0; i < arrCurrent.length; i++) {\n if (!arrExisting.includes(arrCurrent[i])) {\n return false;\n }\n }\n return true;\n}\nfunction optionsSatisfies(current, existing) {\n return !current || current === existing || Object.keys(current).length === 0;\n}\n\n// this function helps resolve whether we have a pending request that we should use instead\nfunction isSameRequest(options = {}, existingOptions = {}) {\n return optionsSatisfies(options.adapterOptions, existingOptions.adapterOptions) && includesSatisfies(options.include, existingOptions.include);\n}\nfunction _findMany(store, adapter, modelName, snapshots) {\n const modelClass = store.modelFor(modelName); // `adapter.findMany` gets the modelClass still\n const promise = Promise.resolve().then(() => {\n const ids = snapshots.map(s => s.id);\n assert(`Cannot fetch a record without an id`, ids.every(v => v !== null));\n // eslint-disable-next-line @typescript-eslint/unbound-method\n assert(`Expected this adapter to implement findMany for coalescing`, adapter.findMany);\n const ret = adapter.findMany(store, modelClass, ids, snapshots);\n assert('adapter.findMany returned undefined, this was very likely a mistake', ret !== undefined);\n return ret;\n });\n return promise.then(adapterPayload => {\n assert(`You made a 'findMany' request for '${modelName}' records with ids '[${snapshots.map(s => s.id).join(',')}]', but the adapter's response did not have any data`, !!payloadIsNotBlank(adapterPayload));\n const serializer = store.serializerFor(modelName);\n const payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findMany');\n return payload;\n });\n}\nfunction rejectFetchedItems(fetchMap, snapshots, error) {\n for (let i = 0, l = snapshots.length; i < l; i++) {\n const snapshot = snapshots[i];\n const pair = fetchMap.get(snapshot);\n if (pair) {\n pair.resolver.reject(error || new Error(`Expected: '<${snapshot.modelName}:${snapshot.id}>' to be present in the adapter provided payload, but it was not found.`));\n }\n }\n}\nfunction handleFoundRecords(store, fetchMap, snapshots, coalescedPayload) {\n /*\n It is possible that the same ID is included multiple times\n via multiple snapshots. This happens when more than one\n options hash was supplied, each of which must be uniquely\n accounted for.\n However, since we can't map from response to a specific\n options object, we resolve all snapshots by id with\n the first response we see.\n */\n const snapshotsById = new Map();\n for (let i = 0; i < snapshots.length; i++) {\n const id = snapshots[i].id;\n let snapshotGroup = snapshotsById.get(id);\n if (!snapshotGroup) {\n snapshotGroup = [];\n snapshotsById.set(id, snapshotGroup);\n }\n snapshotGroup.push(snapshots[i]);\n }\n const included = Array.isArray(coalescedPayload.included) ? coalescedPayload.included : [];\n\n // resolve found records\n const resources = coalescedPayload.data;\n for (let i = 0, l = resources.length; i < l; i++) {\n const resource = resources[i];\n const snapshotGroup = snapshotsById.get(resource.id);\n snapshotsById.delete(resource.id);\n if (!snapshotGroup) {\n // TODO consider whether this should be a deprecation/assertion\n included.push(resource);\n } else {\n snapshotGroup.forEach(snapshot => {\n const pair = fetchMap.get(snapshot);\n const resolver = pair.resolver;\n resolver.resolve({\n data: resource\n });\n });\n }\n }\n if (included.length > 0) {\n store._push({\n data: null,\n included\n }, true);\n }\n if (snapshotsById.size === 0) {\n return;\n }\n\n // reject missing records\n const rejected = [];\n snapshotsById.forEach(snapshotArray => {\n rejected.push(...snapshotArray);\n });\n warn('Ember Data expected to find records with the following ids in the adapter response from findMany but they were missing: [ \"' + [...snapshotsById.values()].map(r => r[0].id).join('\", \"') + '\" ]', {\n id: 'ds.store.missing-records-from-adapter'\n });\n rejectFetchedItems(fetchMap, rejected);\n}\nfunction _fetchRecord(store, adapter, fetchItem) {\n const identifier = fetchItem.identifier;\n const modelName = identifier.type;\n assert(`You tried to find a record but you have no adapter (for ${modelName})`, adapter);\n assert(`You tried to find a record but your adapter (for ${modelName}) does not implement 'findRecord'`, typeof adapter.findRecord === 'function');\n const snapshot = store._fetchManager.createSnapshot(identifier, fetchItem.options);\n const klass = store.modelFor(identifier.type);\n const id = identifier.id;\n let promise = Promise.resolve().then(() => {\n return adapter.findRecord(store, klass, identifier.id, snapshot);\n });\n promise = promise.then(adapterPayload => {\n assert(`Async Leak Detected: Expected the store to not be destroyed`, !(store.isDestroyed || store.isDestroying));\n assert(`You made a 'findRecord' request for a '${modelName}' with id '${id}', but the adapter's response did not have any data`, !!payloadIsNotBlank(adapterPayload));\n const serializer = store.serializerFor(modelName);\n const payload = normalizeResponseHelper(serializer, store, klass, adapterPayload, id, 'findRecord');\n assert(`Ember Data expected the primary data returned from a 'findRecord' response to be an object but instead it found an array.`, !Array.isArray(payload.data));\n assert(`The 'findRecord' request for ${modelName}:${id} resolved indicating success but contained no primary data. To indicate a 404 not found you should either reject the promise returned by the adapter's findRecord method or throw a NotFoundError.`, 'data' in payload && payload.data !== null && typeof payload.data === 'object');\n warn(`You requested a record of type '${modelName}' with id '${id}' but the adapter returned a payload with primary data having an id of '${payload.data.id}'. Use 'store.findRecord()' when the requested id is the same as the one returned by the adapter. In other cases use 'store.queryRecord()' instead.`, coerceId(payload.data.id) === coerceId(id), {\n id: 'ds.store.findRecord.id-mismatch'\n });\n return payload;\n });\n fetchItem.resolver.resolve(promise);\n}\nfunction _processCoalescedGroup(store, fetchMap, group, adapter, modelName) {\n if (group.length > 1) {\n _findMany(store, adapter, modelName, group).then(payloads => {\n handleFoundRecords(store, fetchMap, group, payloads);\n }).catch(error => {\n rejectFetchedItems(fetchMap, group, error);\n });\n } else if (group.length === 1) {\n _fetchRecord(store, adapter, fetchMap.get(group[0]));\n } else {\n assert(\"You cannot return an empty array from adapter's method groupRecordsForFindMany\", false);\n }\n}\nfunction _flushPendingFetchForType(store, pendingFetchMap, modelName) {\n const adapter = store.adapterFor(modelName);\n const shouldCoalesce = !!adapter.findMany && adapter.coalesceFindRequests;\n if (shouldCoalesce) {\n const pendingFetchItems = [];\n pendingFetchMap.forEach((requestsForIdentifier, identifier) => {\n if (requestsForIdentifier.length > 1) {\n return;\n }\n\n // remove this entry from the map so it's not processed again\n pendingFetchMap.delete(identifier);\n pendingFetchItems.push(requestsForIdentifier[0]);\n });\n const totalItems = pendingFetchItems.length;\n if (totalItems > 1) {\n const snapshots = new Array(totalItems);\n const fetchMap = new Map();\n for (let i = 0; i < totalItems; i++) {\n const fetchItem = pendingFetchItems[i];\n snapshots[i] = store._fetchManager.createSnapshot(fetchItem.identifier, fetchItem.options);\n fetchMap.set(snapshots[i], fetchItem);\n }\n let groups;\n if (adapter.groupRecordsForFindMany) {\n groups = adapter.groupRecordsForFindMany(store, snapshots);\n } else {\n groups = [snapshots];\n }\n for (let i = 0, l = groups.length; i < l; i++) {\n _processCoalescedGroup(store, fetchMap, groups[i], adapter, modelName);\n }\n } else if (totalItems === 1) {\n _fetchRecord(store, adapter, pendingFetchItems[0]);\n }\n }\n pendingFetchMap.forEach(pendingFetchItems => {\n pendingFetchItems.forEach(pendingFetchItem => {\n _fetchRecord(store, adapter, pendingFetchItem);\n });\n });\n}\nfunction _flushPendingSave(store, pending) {\n const {\n snapshot,\n resolver,\n identifier,\n options\n } = pending;\n const adapter = store.adapterFor(identifier.type);\n const operation = options[SaveOp];\n const modelName = snapshot.modelName;\n const modelClass = store.modelFor(modelName);\n assert(`You tried to update a record but you have no adapter (for ${modelName})`, adapter);\n assert(`You tried to update a record but your adapter (for ${modelName}) does not implement '${operation}'`, typeof adapter[operation] === 'function');\n let promise = Promise.resolve().then(() => adapter[operation](store, modelClass, snapshot));\n const serializer = store.serializerFor(modelName);\n assert(`Your adapter's '${operation}' method must return a value, but it returned 'undefined'`, promise !== undefined);\n promise = promise.then(adapterPayload => {\n if (adapterPayload) {\n return normalizeResponseHelper(serializer, store, modelClass, adapterPayload, snapshot.id, operation);\n }\n });\n resolver.resolve(promise);\n}\n\n/**\n * Utilities - often temporary - for maintaining backwards compatibility with\n * older parts of EmberData.\n *\n @module @ember-data/legacy-compat\n @main @ember-data/legacy-compat\n*/\nfunction upgradeStore(store) {}\nexport { FetchManager as F, SaveOp as S, assertIdentifierHasId as a, SnapshotRecordArray as b, Snapshot as c, iterateData as i, normalizeResponseHelper as n, payloadIsNotBlank as p, upgradeStore as u };","import { STRUCTURED, IS_FUTURE, SkipCache } from '@warp-drive/core-types/request';\nimport { macroCondition, getOwnConfig } from '@embroider/macros';\nfunction _classPrivateFieldBase(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError(\"attempted to use private field on non-instance\");\n }\n return receiver;\n}\nvar id = 0;\nfunction _classPrivateFieldKey(name) {\n return \"__private_\" + id++ + \"_\" + name;\n}\nconst BODY_TYPES = {\n type: 'string',\n klass: ['Blob', 'ArrayBuffer', 'TypedArray', 'DataView', 'FormData', 'URLSearchParams', 'ReadableStream']\n};\nconst ValidKeys = new Map([['records', 'array'], ['data', 'json'], ['body', BODY_TYPES], ['disableTestWaiter', 'boolean'], ['options', 'object'], ['cacheOptions', 'object'], ['op', 'string'], ['store', 'object'], ['url', 'string'], ['cache', ['default', 'force-cache', 'no-cache', 'no-store', 'only-if-cached', 'reload']], ['credentials', ['include', 'omit', 'same-origin']], ['destination', ['', 'object', 'audio', 'audioworklet', 'document', 'embed', 'font', 'frame', 'iframe', 'image', 'manifest', 'paintworklet', 'report', 'script', 'sharedworker', 'style', 'track', 'video', 'worker', 'xslt']], ['headers', 'headers'], ['integrity', 'string'], ['keepalive', 'boolean'], ['method', ['GET', 'PUT', 'PATCH', 'DELETE', 'POST', 'OPTIONS']], ['mode', ['same-origin', 'cors', 'navigate', 'no-cors']], ['redirect', ['error', 'follow', 'manual']], ['referrer', 'string'], ['signal', 'AbortSignal'], ['controller', 'AbortController'], ['referrerPolicy', ['', 'same-origin', 'no-referrer', 'no-referrer-when-downgrade', 'origin', 'origin-when-cross-origin', 'strict-origin', 'strict-origin-when-cross-origin', 'unsafe-url']]]);\nconst IS_FROZEN = Symbol('FROZEN');\nconst IS_COLLECTION = Symbol.for('Collection');\nfunction freezeHeaders(headers) {\n headers.delete = headers.set = headers.append = () => {\n throw new Error(`Cannot Mutate Immutatable Headers, use headers.clone to get a copy`);\n };\n upgradeHeaders(headers);\n return headers;\n}\nfunction deepFreeze(value) {\n if (value && value[IS_FROZEN]) {\n return value;\n }\n const _type = typeof value;\n switch (_type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'undefined':\n case 'bigint':\n return value;\n case 'function':\n throw new Error(`Cannot deep-freeze a function`);\n case 'object':\n {\n const _niceType = niceTypeOf(value);\n switch (_niceType) {\n case 'array':\n {\n if (value[IS_COLLECTION]) {\n return value;\n }\n const arr = value.map(deepFreeze);\n arr[IS_FROZEN] = true;\n return Object.freeze(arr);\n }\n case 'null':\n return value;\n case 'object':\n Object.keys(value).forEach(key => {\n try {\n value[key] = deepFreeze(value[key]);\n } catch {\n // continue\n }\n });\n value[IS_FROZEN] = true;\n return Object.freeze(value);\n case 'headers':\n return freezeHeaders(value);\n case 'Collection':\n case 'Store':\n case 'AbortSignal':\n return value;\n case 'date':\n case 'map':\n case 'set':\n case 'error':\n case 'stream':\n default:\n // eslint-disable-next-line no-console\n // console.log(`Cannot deep-freeze ${_niceType}`);\n return value;\n }\n }\n }\n}\nfunction isMaybeContext(request) {\n if (request && typeof request === 'object') {\n const keys = Object.keys(request);\n if (keys.length === 1 && keys[0] === 'request') {\n return true;\n }\n }\n return false;\n}\nfunction niceTypeOf(v) {\n if (v === null) {\n return 'null';\n }\n if (typeof v === 'string') {\n return v ? 'non-empty-string' : 'empty-string';\n }\n if (!v) {\n return typeof v;\n }\n if (Array.isArray(v)) {\n return 'array';\n }\n if (v instanceof Date) {\n return 'date';\n }\n if (v instanceof Map) {\n return 'map';\n }\n if (v instanceof Set) {\n return 'set';\n }\n if (v instanceof Error) {\n return 'error';\n }\n if (v instanceof ReadableStream || v instanceof WritableStream || v instanceof TransformStream) {\n return 'stream';\n }\n if (v instanceof Headers) {\n return 'headers';\n }\n if (typeof v === 'object' && v.constructor && v.constructor.name !== 'Object') {\n return v.constructor.name;\n }\n return typeof v;\n}\nfunction validateKey(key, value, errors) {\n const schema = ValidKeys.get(key);\n if (!schema && !IgnoredKeys.has(key)) {\n errors.push(`InvalidKey: '${key}'`);\n return;\n }\n if (schema) {\n if (schema === BODY_TYPES) {\n if (typeof value === 'string' || value instanceof ReadableStream) {\n return;\n }\n let type = niceTypeOf(value);\n if (schema.klass.includes(type)) {\n return;\n }\n errors.push(`InvalidValue: key 'body' should be a string or one of '${schema.klass.join(\"', '\")}', received ${'
'}`);\n return;\n }\n if (Array.isArray(schema)) {\n if (!schema.includes(value)) {\n errors.push(`InvalidValue: key ${key} should be a one of '${schema.join(\"', '\")}', received ${typeof value === 'string' ? value : ''}`);\n }\n return;\n } else if (schema === 'json') {\n try {\n JSON.stringify(value);\n } catch (e) {\n errors.push(`InvalidValue: key ${key} should be a JSON serializable value, but failed to serialize with Error - ${e.message}`);\n }\n return;\n } else if (schema === 'headers') {\n if (!(value instanceof Headers)) {\n errors.push(`InvalidValue: key ${key} should be an instance of Headers, received ${niceTypeOf(value)}`);\n }\n return;\n } else if (schema === 'record') {\n const _type = typeof value;\n // record must extend plain object or Object.create(null)\n if (!value || _type !== 'object' || value.constructor && value.constructor !== Object) {\n errors.push(`InvalidValue: key ${key} should be a dictionary of string keys to string values, received ${niceTypeOf(value)}`);\n return;\n }\n const keys = Object.keys(value);\n keys.forEach(k => {\n let v = value[k];\n if (typeof k !== 'string') {\n errors.push(`\\tThe key ${String(k)} on ${key} should be a string key`);\n } else if (typeof v !== 'string') {\n errors.push(`\\tThe value of ${key}.${k} should be a string not ${niceTypeOf(v)}`);\n }\n });\n return;\n } else if (schema === 'string') {\n if (typeof value !== 'string' || value.length === 0) {\n errors.push(`InvalidValue: key ${key} should be a non-empty string, received ${typeof value === 'string' ? \"''\" : typeof value}`);\n }\n return;\n } else if (schema === 'object') {\n if (!value || Array.isArray(value) || typeof value !== 'object') {\n errors.push(`InvalidValue: key ${key} should be an object`);\n }\n return;\n } else if (schema === 'boolean') {\n if (typeof value !== 'boolean') {\n errors.push(`InvalidValue: key ${key} should be a boolean, received ${typeof value}`);\n }\n return;\n } else if (schema === 'array') {\n if (!Array.isArray(value)) {\n errors.push(`InvalidValue: key ${key} should be an array, received ${typeof value}`);\n }\n return;\n }\n }\n}\nconst IgnoredKeys = new Set([]);\nfunction assertValidRequest(request, isTopLevel) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n // handle basic shape\n if (!request) {\n throw new Error(`Expected ${isTopLevel ? 'RequestManager.request' : 'next'}() to be called with a request, but none was provided.`);\n }\n if (Array.isArray(request) || typeof request !== 'object') {\n throw new Error(`The \\`request\\` passed to \\`${isTopLevel ? 'RequestManager.request' : 'next'}()\\` should be an object, received \\`${niceTypeOf(request)}\\``);\n }\n if (Object.keys(request).length === 0) {\n throw new Error(`The \\`request\\` passed to \\`${isTopLevel ? 'RequestManager.request' : 'next'}()\\` was empty (\\`{}\\`). Requests need at least one valid key.`);\n }\n\n // handle accidentally passing context entirely\n if (request instanceof Context) {\n throw new Error(`Expected a request passed to \\`${isTopLevel ? 'RequestManager.request' : 'next'}()\\` but received the previous handler's context instead`);\n }\n // handle Object.assign({}, context);\n if (isMaybeContext(request)) {\n throw new Error(`Expected a request passed to \\`${isTopLevel ? 'RequestManager.request' : 'next'}()\\` but received an object with a request key instead.`);\n }\n\n // handle schema\n const keys = Object.keys(request);\n const validationErrors = [];\n const isLegacyRequest = Boolean('op' in request && !request.url);\n keys.forEach(key => {\n if (isLegacyRequest && key === 'data') {\n return;\n }\n validateKey(key, request[key], validationErrors);\n });\n if (validationErrors.length) {\n const error = new Error(`Invalid Request passed to \\`${isTopLevel ? 'RequestManager.request' : 'next'}()\\`.\\n\\nThe following issues were found:\\n\\n\\t${validationErrors.join('\\n\\t')}`);\n error.errors = validationErrors;\n throw error;\n }\n }\n}\nfunction curryFuture(owner, inbound, outbound) {\n owner.setStream(inbound.getStream());\n inbound.then(doc => {\n const document = {\n [STRUCTURED]: true,\n request: owner.request,\n response: doc.response,\n content: doc.content\n };\n outbound.resolve(document);\n }, error => {\n if (isDoc(error)) {\n owner.setStream(owner.god.stream);\n }\n if (!error || !(error instanceof Error)) {\n try {\n throw new Error(error ? error : `Request Rejected with an Unknown Error`);\n } catch (e) {\n if (error && typeof error === 'object') {\n Object.assign(e, error);\n e.message = error.message || `Request Rejected with an Unknown Error`;\n }\n error = e;\n }\n }\n error[STRUCTURED] = true;\n error.request = owner.request;\n error.response = owner.getResponse();\n error.error = error.error || error.message;\n outbound.reject(error);\n });\n return outbound.promise;\n}\nfunction isDoc(doc) {\n return doc && doc[STRUCTURED] === true;\n}\nfunction enhanceReason(reason) {\n return new DOMException(reason || 'The user aborted a request.', 'AbortError');\n}\nfunction handleOutcome(owner, inbound, outbound) {\n inbound.then(content => {\n if (owner.controller.signal.aborted) {\n // the next function did not respect the signal, we handle it here\n outbound.reject(enhanceReason(owner.controller.signal.reason));\n return;\n }\n if (isDoc(content)) {\n owner.setStream(owner.god.stream);\n content = content.content;\n }\n const document = {\n [STRUCTURED]: true,\n request: owner.request,\n response: owner.getResponse(),\n content\n };\n outbound.resolve(document);\n }, error => {\n if (isDoc(error)) {\n owner.setStream(owner.god.stream);\n }\n if (!error) {\n try {\n throw new Error(`Request Rejected with an Unknown Error`);\n } catch (e) {\n error = e;\n }\n }\n error[STRUCTURED] = true;\n error.request = owner.request;\n error.response = owner.getResponse();\n error.error = error.error || error.message;\n outbound.reject(error);\n });\n return outbound.promise;\n}\nfunction executeNextHandler(wares, request, i, god) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (i === wares.length) {\n throw new Error(`No handler was able to handle this request.`);\n }\n assertValidRequest(request, false);\n }\n const owner = new ContextOwner(request, god);\n function next(r) {\n owner.nextCalled++;\n return executeNextHandler(wares, r, i + 1, god);\n }\n const context = new Context(owner);\n let outcome;\n try {\n outcome = wares[i].request(context, next);\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (!outcome || !(outcome instanceof Promise) && !(typeof outcome === 'object' && 'then' in outcome)) {\n // eslint-disable-next-line no-console\n console.log({\n request,\n handler: wares[i],\n outcome\n });\n if (outcome === undefined) {\n throw new Error(`Expected handler.request to return a promise, instead received undefined.`);\n }\n throw new Error(`Expected handler.request to return a promise, instead received a synchronous value.`);\n }\n }\n } catch (e) {\n outcome = Promise.reject(e);\n }\n const future = createFuture(owner);\n if (isFuture(outcome)) {\n return curryFuture(owner, outcome, future);\n }\n return handleOutcome(owner, outcome, future);\n}\nfunction isFuture(maybe) {\n return Boolean(maybe && maybe instanceof Promise && maybe[IS_FUTURE] === true);\n}\nfunction createDeferred() {\n let resolve;\n let reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return {\n resolve,\n reject,\n promise\n };\n}\nfunction upgradePromise(promise, future) {\n promise[IS_FUTURE] = true;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n promise.getStream = future.getStream;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n promise.abort = future.abort;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n promise.onFinalize = future.onFinalize;\n return promise;\n}\nfunction createFuture(owner) {\n const deferred = createDeferred();\n let {\n promise\n } = deferred;\n let cbs;\n promise = promise.finally(() => {\n owner.resolveStream();\n if (cbs) {\n cbs.forEach(cb => cb());\n }\n });\n promise.onFinalize = fn => {\n cbs = cbs || [];\n cbs.push(fn);\n };\n promise[IS_FUTURE] = true;\n promise.getStream = () => {\n return owner.getStream();\n };\n promise.abort = reason => {\n owner.abort(enhanceReason(reason));\n };\n deferred.promise = promise;\n return deferred;\n}\nfunction upgradeHeaders(headers) {\n headers.clone = () => {\n return new Headers(headers);\n };\n headers.toJSON = () => {\n return Array.from(headers);\n };\n return headers;\n}\nfunction cloneResponseProperties(response) {\n const {\n headers,\n ok,\n redirected,\n status,\n statusText,\n type,\n url\n } = response;\n upgradeHeaders(headers);\n return {\n headers: headers,\n ok,\n redirected,\n status,\n statusText,\n type,\n url\n };\n}\nclass ContextOwner {\n constructor(request, god) {\n this.hasSetStream = false;\n this.hasSetResponse = false;\n this.hasSubscribers = false;\n this.stream = createDeferred();\n this.response = null;\n this.nextCalled = 0;\n this.requestId = god.id;\n this.controller = request.controller || god.controller;\n if (request.controller) {\n if (request.controller !== god.controller) {\n god.controller.signal.addEventListener('abort', () => {\n this.controller.abort(god.controller.signal.reason);\n });\n }\n delete request.controller;\n }\n let enhancedRequest = Object.assign({\n signal: this.controller.signal\n }, request);\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (!request?.cacheOptions?.[SkipCache]) {\n request = deepFreeze(request);\n enhancedRequest = deepFreeze(enhancedRequest);\n }\n } else {\n if (request.headers) {\n upgradeHeaders(request.headers);\n }\n }\n this.enhancedRequest = enhancedRequest;\n this.request = request;\n this.god = god;\n this.stream.promise = this.stream.promise.then(stream => {\n if (this.god.stream === stream && this.hasSubscribers) {\n this.god.stream = null;\n }\n return stream;\n });\n }\n getResponse() {\n if (this.hasSetResponse) {\n return this.response;\n }\n if (this.nextCalled === 1) {\n return this.god.response;\n }\n return null;\n }\n getStream() {\n this.hasSubscribers = true;\n return this.stream.promise;\n }\n abort(reason) {\n this.controller.abort(reason);\n }\n setStream(stream) {\n if (!this.hasSetStream) {\n this.hasSetStream = true;\n if (!(stream instanceof Promise)) {\n this.god.stream = stream;\n }\n // @ts-expect-error\n this.stream.resolve(stream);\n }\n }\n resolveStream() {\n this.setStream(this.nextCalled === 1 ? this.god.stream : null);\n }\n setResponse(response) {\n if (this.hasSetResponse) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n throw new Error(`Cannot setResponse when a response has already been set`);\n }\n return;\n }\n this.hasSetResponse = true;\n if (response instanceof Response) {\n let responseData = cloneResponseProperties(response);\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n responseData = deepFreeze(responseData);\n }\n this.response = responseData;\n this.god.response = responseData;\n } else {\n this.response = response;\n this.god.response = response;\n }\n }\n}\nvar _owner = /*#__PURE__*/_classPrivateFieldKey(\"owner\");\nclass Context {\n constructor(owner) {\n Object.defineProperty(this, _owner, {\n writable: true,\n value: void 0\n });\n this.id = owner.requestId;\n _classPrivateFieldBase(this, _owner)[_owner] = owner;\n this.request = owner.enhancedRequest;\n }\n setStream(stream) {\n _classPrivateFieldBase(this, _owner)[_owner].setStream(stream);\n }\n setResponse(response) {\n _classPrivateFieldBase(this, _owner)[_owner].setResponse(response);\n }\n}\nexport { _classPrivateFieldBase as _, assertValidRequest as a, _classPrivateFieldKey as b, cloneResponseProperties as c, createDeferred as d, executeNextHandler as e, upgradePromise as u };","import { _ as _classPrivateFieldBase, a as assertValidRequest, e as executeNextHandler, u as upgradePromise, b as _classPrivateFieldKey } from \"./context-g9X123os\";\nexport { d as createDeferred } from \"./context-g9X123os\";\nimport { macroCondition, getOwnConfig, importSync } from '@embroider/macros';\nlet REQ_ID = 0;\n/**\n * ```js\n * import RequestManager from '@ember-data/request';\n * ```\n *\n * A RequestManager provides a request/response flow in which configured\n * handlers are successively given the opportunity to handle, modify, or\n * pass-along a request.\n *\n * ```ts\n * interface RequestManager {\n * request(req: RequestInfo): Future;\n * }\n * ```\n *\n * For example:\n *\n * ```ts\n * import RequestManager from '@ember-data/request';\n * import Fetch from '@ember-data/request/fetch';\n * import Auth from 'ember-simple-auth/ember-data-handler';\n * import Config from './config';\n *\n * const { apiUrl } = Config;\n *\n * // ... create manager\n * const manager = new RequestManager();\n * manager.use([Auth, Fetch]);\n *\n * // ... execute a request\n * const response = await manager.request({\n * url: `${apiUrl}/users`\n * });\n * ```\n *\n * ### Futures\n *\n * The return value of `manager.request` is a `Future`, which allows\n * access to limited information about the request while it is still\n * pending and fulfills with the final state when the request completes.\n *\n * A `Future` is cancellable via `abort`.\n *\n * Handlers may optionally expose a `ReadableStream` to the `Future` for\n * streaming data; however, when doing so the future should not resolve\n * until the response stream is fully read.\n *\n * ```ts\n * interface Future extends Promise> {\n * abort(): void;\n *\n * async getStream(): ReadableStream | null;\n * }\n * ```\n *\n * ### StructuredDocuments\n *\n * A Future resolves with a `StructuredDataDocument` or rejects with a `StructuredErrorDocument`.\n *\n * ```ts\n * interface StructuredDataDocument {\n * request: ImmutableRequestInfo;\n * response: ImmutableResponseInfo;\n * content: T;\n * }\n * interface StructuredErrorDocument extends Error {\n * request: ImmutableRequestInfo;\n * response: ImmutableResponseInfo;\n * error: string | object;\n * }\n * type StructuredDocument = StructuredDataDocument | StructuredErrorDocument;\n * ```\n *\n * @class RequestManager\n * @public\n */\nvar _handlers = /*#__PURE__*/_classPrivateFieldKey(\"handlers\");\nclass RequestManager {\n constructor(options) {\n Object.defineProperty(this, _handlers, {\n writable: true,\n value: []\n });\n Object.assign(this, options);\n this._pending = new Map();\n }\n\n /**\n * Register a handler to use for primary cache intercept.\n *\n * Only one such handler may exist. If using the same\n * RequestManager as the Store instance the Store\n * registers itself as a Cache handler.\n *\n * @method useCache\n * @public\n * @param {Handler[]} cacheHandler\n * @return {void}\n */\n useCache(cacheHandler) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (this._hasCacheHandler) {\n throw new Error(`\\`RequestManager.useCache()\\` May only be invoked once.`);\n }\n if (Object.isFrozen(_classPrivateFieldBase(this, _handlers)[_handlers])) {\n throw new Error(`\\`RequestManager.useCache()\\` May only be invoked prior to any request having been made.`);\n }\n this._hasCacheHandler = true;\n }\n _classPrivateFieldBase(this, _handlers)[_handlers].unshift(cacheHandler);\n }\n\n /**\n * Register handler(s) to use when a request is issued.\n *\n * Handlers will be invoked in the order they are registered.\n * Each Handler is given the opportunity to handle the request,\n * curry the request, or pass along a modified request.\n *\n * @method use\n * @public\n * @param {Handler[]} newHandlers\n * @return {void}\n */\n use(newHandlers) {\n const handlers = _classPrivateFieldBase(this, _handlers)[_handlers];\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (Object.isFrozen(handlers)) {\n throw new Error(`Cannot add a Handler to a RequestManager after a request has been made`);\n }\n if (!Array.isArray(newHandlers)) {\n throw new Error(`\\`RequestManager.use()\\` expects an array of handlers, but was called with \\`${typeof newHandlers}\\``);\n }\n newHandlers.forEach((handler, index) => {\n if (!handler || typeof handler !== 'object' || typeof handler.request !== 'function') {\n throw new Error(`\\`RequestManager.use()\\` expected to receive an array of handler objects with request methods, by the handler at index ${index} does not conform.`);\n }\n });\n }\n handlers.push(...newHandlers);\n }\n\n /**\n * Issue a Request.\n *\n * Returns a Future that fulfills with a StructuredDocument\n *\n * @method request\n * @public\n * @param {RequestInfo} request\n * @return {Future}\n */\n request(request) {\n const handlers = _classPrivateFieldBase(this, _handlers)[_handlers];\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (!Object.isFrozen(handlers)) {\n Object.freeze(handlers);\n }\n assertValidRequest(request, true);\n }\n const controller = request.controller || new AbortController();\n if (request.controller) {\n delete request.controller;\n }\n const promise = executeNextHandler(handlers, request, 0, {\n controller,\n response: null,\n stream: null,\n id: REQ_ID++\n });\n if (macroCondition(getOwnConfig().env.TESTING)) {\n if (!request.disableTestWaiter) {\n const {\n waitForPromise\n } = importSync('@ember/test-waiters');\n const newPromise = waitForPromise(promise);\n return upgradePromise(newPromise, promise);\n }\n }\n return promise;\n }\n static create(options) {\n return new this(options);\n }\n}\nexport { RequestManager as default };","import { warn } from '@ember/debug';\nimport Mixin from '@ember/object/mixin';\nimport { camelize } from '@ember/string';\n\n/**\n @module @ember-data/serializer/rest\n*/\n\n/**\n ## Using Embedded Records\n\n `EmbeddedRecordsMixin` supports serializing embedded records.\n\n To set up embedded records, include the mixin when extending a serializer,\n then define and configure embedded (model) relationships.\n\n Note that embedded records will serialize with the serializer for their model instead of the serializer in which they are defined.\n\n Note also that this mixin does not work with JSONAPISerializer because the JSON:API specification does not describe how to format embedded resources.\n\n Below is an example of a per-type serializer (`post` type).\n\n ```app/serializers/post.js\n import RESTSerializer, { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\n\n export default class PostSerializer extends RESTSerializer.extend(EmbeddedRecordsMixin) {\n attrs = {\n author: { embedded: 'always' },\n comments: { serialize: 'ids' }\n }\n }\n ```\n Note that this use of `{ embedded: 'always' }` is unrelated to\n the `{ embedded: 'always' }` that is defined as an option on `attr` as part of\n defining a model while working with the `ActiveModelSerializer`. Nevertheless,\n using `{ embedded: 'always' }` as an option to `attr` is not a valid way to set up\n embedded records.\n\n The `attrs` option for a resource `{ embedded: 'always' }` is shorthand for:\n\n ```js\n {\n serialize: 'records',\n deserialize: 'records'\n }\n ```\n\n ### Configuring Attrs\n\n A resource's `attrs` option may be set to use `ids`, `records` or false for the\n `serialize` and `deserialize` settings.\n\n The `attrs` property can be set on the `ApplicationSerializer` or a per-type\n serializer.\n\n In the case where embedded JSON is expected while extracting a payload (reading)\n the setting is `deserialize: 'records'`, there is no need to use `ids` when\n extracting as that is the default behaviour without this mixin if you are using\n the vanilla `EmbeddedRecordsMixin`. Likewise, to embed JSON in the payload while\n serializing `serialize: 'records'` is the setting to use. There is an option of\n not embedding JSON in the serialized payload by using `serialize: 'ids'`. If you\n do not want the relationship sent at all, you can use `serialize: false`.\n\n\n ### EmbeddedRecordsMixin defaults\n If you do not overwrite `attrs` for a specific relationship, the `EmbeddedRecordsMixin`\n will behave in the following way:\n\n BelongsTo: `{ serialize: 'id', deserialize: 'id' }`\n HasMany: `{ serialize: false, deserialize: 'ids' }`\n\n ### Model Relationships\n\n Embedded records must have a model defined to be extracted and serialized. Note that\n when defining any relationships on your model such as `belongsTo` and `hasMany`, you\n should not both specify `async: true` and also indicate through the serializer's\n `attrs` attribute that the related model should be embedded for deserialization.\n If a model is declared embedded for deserialization (`embedded: 'always'` or `deserialize: 'records'`),\n then do not use `async: true`.\n\n To successfully extract and serialize embedded records the model relationships\n must be set up correctly. See the\n [defining relationships](https://guides.emberjs.com/current/models/relationships)\n section of the **Defining Models** guide page.\n\n Records without an `id` property are not considered embedded records, model\n instances must have an `id` property to be used with Ember Data.\n\n ### Example JSON payloads, Models and Serializers\n\n **When customizing a serializer it is important to grok what the customizations\n are. Please read the docs for the methods this mixin provides, in case you need\n to modify it to fit your specific needs.**\n\n For example, review the docs for each method of this mixin:\n * [normalize](/ember-data/release/classes/EmbeddedRecordsMixin/methods/normalize?anchor=normalize)\n * [serializeBelongsTo](/ember-data/release/classes/EmbeddedRecordsMixin/methods/serializeBelongsTo?anchor=serializeBelongsTo)\n * [serializeHasMany](/ember-data/release/classes/EmbeddedRecordsMixin/methods/serializeHasMany?anchor=serializeHasMany)\n\n @class EmbeddedRecordsMixin\n @public\n*/\nvar embeddedRecordsMixin = Mixin.create({\n /**\n Normalize the record and recursively normalize/extract all the embedded records\n while pushing them into the store as they are encountered\n A payload with an attr configured for embedded records needs to be extracted:\n ```js\n {\n \"post\": {\n \"id\": \"1\"\n \"title\": \"Rails is omakase\",\n \"comments\": [{\n \"id\": \"1\",\n \"body\": \"Rails is unagi\"\n }, {\n \"id\": \"2\",\n \"body\": \"Omakase O_o\"\n }]\n }\n }\n ```\n @method normalize\n @public\n @param {Model} typeClass\n @param {Object} hash to be normalized\n @param {String} prop the hash has been referenced by\n @return {Object} the normalized hash\n **/\n normalize(typeClass, hash, prop) {\n const normalizedHash = this._super(typeClass, hash, prop);\n return this._extractEmbeddedRecords(this, this.store, typeClass, normalizedHash);\n },\n keyForRelationship(key, typeClass, method) {\n if (method === 'serialize' && this.hasSerializeRecordsOption(key) || method === 'deserialize' && this.hasDeserializeRecordsOption(key)) {\n return this.keyForAttribute(key, method);\n } else {\n return this._super(key, typeClass, method) || key;\n }\n },\n /**\n Serialize `belongsTo` relationship when it is configured as an embedded object.\n This example of an author model belongs to a post model:\n ```js\n import Model, { attr, belongsTo } from '@ember-data/model';\n Post = Model.extend({\n title: attr('string'),\n body: attr('string'),\n author: belongsTo('author')\n });\n Author = Model.extend({\n name: attr('string'),\n post: belongsTo('post')\n });\n ```\n Use a custom (type) serializer for the post model to configure embedded author\n ```app/serializers/post.js\n import RESTSerializer, { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\n export default class PostSerializer extends RESTSerializer.extend(EmbeddedRecordsMixin) {\n attrs = {\n author: { embedded: 'always' }\n }\n }\n ```\n A payload with an attribute configured for embedded records can serialize\n the records together under the root attribute's payload:\n ```js\n {\n \"post\": {\n \"id\": \"1\"\n \"title\": \"Rails is omakase\",\n \"author\": {\n \"id\": \"2\"\n \"name\": \"dhh\"\n }\n }\n }\n ```\n @method serializeBelongsTo\n @public\n @param {Snapshot} snapshot\n @param {Object} json\n @param {Object} relationship\n */\n serializeBelongsTo(snapshot, json, relationship) {\n const attr = relationship.name;\n if (this.noSerializeOptionSpecified(attr)) {\n this._super(snapshot, json, relationship);\n return;\n }\n const includeIds = this.hasSerializeIdsOption(attr);\n const includeRecords = this.hasSerializeRecordsOption(attr);\n const embeddedSnapshot = snapshot.belongsTo(attr);\n if (includeIds) {\n const schema = this.store.modelFor(snapshot.modelName);\n let serializedKey = this._getMappedKey(relationship.name, schema);\n if (serializedKey === relationship.name && this.keyForRelationship) {\n serializedKey = this.keyForRelationship(relationship.name, relationship.kind, 'serialize');\n }\n if (!embeddedSnapshot) {\n json[serializedKey] = null;\n } else {\n json[serializedKey] = embeddedSnapshot.id;\n if (relationship.options.polymorphic) {\n this.serializePolymorphicType(snapshot, json, relationship);\n }\n }\n } else if (includeRecords) {\n this._serializeEmbeddedBelongsTo(snapshot, json, relationship);\n }\n },\n _serializeEmbeddedBelongsTo(snapshot, json, relationship) {\n const embeddedSnapshot = snapshot.belongsTo(relationship.name);\n const schema = this.store.modelFor(snapshot.modelName);\n let serializedKey = this._getMappedKey(relationship.name, schema);\n if (serializedKey === relationship.name && this.keyForRelationship) {\n serializedKey = this.keyForRelationship(relationship.name, relationship.kind, 'serialize');\n }\n if (!embeddedSnapshot) {\n json[serializedKey] = null;\n } else {\n json[serializedKey] = embeddedSnapshot.serialize({\n includeId: true\n });\n this.removeEmbeddedForeignKey(snapshot, embeddedSnapshot, relationship, json[serializedKey]);\n if (relationship.options.polymorphic) {\n this.serializePolymorphicType(snapshot, json, relationship);\n }\n }\n },\n /**\n Serializes `hasMany` relationships when it is configured as embedded objects.\n This example of a post model has many comments:\n ```js\n import Model, { attr, belongsTo, hasMany } from '@ember-data/model';\n Post = Model.extend({\n title: attr('string'),\n body: attr('string'),\n comments: hasMany('comment')\n });\n Comment = Model.extend({\n body: attr('string'),\n post: belongsTo('post')\n });\n ```\n Use a custom (type) serializer for the post model to configure embedded comments\n ```app/serializers/post.js\n import RESTSerializer, { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\n export default class PostSerializer extends RESTSerializer.extend(EmbeddedRecordsMixin) {\n attrs = {\n comments: { embedded: 'always' }\n }\n }\n ```\n A payload with an attribute configured for embedded records can serialize\n the records together under the root attribute's payload:\n ```js\n {\n \"post\": {\n \"id\": \"1\"\n \"title\": \"Rails is omakase\",\n \"body\": \"I want this for my ORM, I want that for my template language...\"\n \"comments\": [{\n \"id\": \"1\",\n \"body\": \"Rails is unagi\"\n }, {\n \"id\": \"2\",\n \"body\": \"Omakase O_o\"\n }]\n }\n }\n ```\n The attrs options object can use more specific instruction for extracting and\n serializing. When serializing, an option to embed `ids`, `ids-and-types` or `records` can be set.\n When extracting the only option is `records`.\n So `{ embedded: 'always' }` is shorthand for:\n `{ serialize: 'records', deserialize: 'records' }`\n To embed the `ids` for a related object (using a hasMany relationship):\n ```app/serializers/post.js\n import RESTSerializer, { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\n export default class PostSerializer extends RESTSerializer.extend(EmbeddedRecordsMixin) {\n attrs = {\n comments: { serialize: 'ids', deserialize: 'records' }\n }\n }\n ```\n ```js\n {\n \"post\": {\n \"id\": \"1\"\n \"title\": \"Rails is omakase\",\n \"body\": \"I want this for my ORM, I want that for my template language...\"\n \"comments\": [\"1\", \"2\"]\n }\n }\n ```\n To embed the relationship as a collection of objects with `id` and `type` keys, set\n `ids-and-types` for the related object.\n This is particularly useful for polymorphic relationships where records don't share\n the same table and the `id` is not enough information.\n For example having a user that has many pets:\n ```js\n User = Model.extend({\n name: attr('string'),\n pets: hasMany('pet', { polymorphic: true })\n });\n Pet = Model.extend({\n name: attr('string'),\n });\n Cat = Pet.extend({\n // ...\n });\n Parrot = Pet.extend({\n // ...\n });\n ```\n ```app/serializers/user.js\n import RESTSerializer, { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';\n export default class UserSerializer extends RESTSerializer.extend(EmbeddedRecordsMixin) {\n attrs = {\n pets: { serialize: 'ids-and-types', deserialize: 'records' }\n }\n }\n ```\n ```js\n {\n \"user\": {\n \"id\": \"1\"\n \"name\": \"Bertin Osborne\",\n \"pets\": [\n { \"id\": \"1\", \"type\": \"Cat\" },\n { \"id\": \"1\", \"type\": \"Parrot\"}\n ]\n }\n }\n ```\n @method serializeHasMany\n @public\n @param {Snapshot} snapshot\n @param {Object} json\n @param {Object} relationship\n */\n serializeHasMany(snapshot, json, relationship) {\n const attr = relationship.name;\n if (this.noSerializeOptionSpecified(attr)) {\n this._super(snapshot, json, relationship);\n return;\n }\n if (this.hasSerializeIdsOption(attr)) {\n const schema = this.store.modelFor(snapshot.modelName);\n let serializedKey = this._getMappedKey(relationship.name, schema);\n if (serializedKey === relationship.name && this.keyForRelationship) {\n serializedKey = this.keyForRelationship(relationship.name, relationship.kind, 'serialize');\n }\n json[serializedKey] = snapshot.hasMany(attr, {\n ids: true\n });\n } else if (this.hasSerializeRecordsOption(attr)) {\n this._serializeEmbeddedHasMany(snapshot, json, relationship);\n } else {\n if (this.hasSerializeIdsAndTypesOption(attr)) {\n this._serializeHasManyAsIdsAndTypes(snapshot, json, relationship);\n }\n }\n },\n /*\n Serializes a hasMany relationship as an array of objects containing only `id` and `type`\n keys.\n This has its use case on polymorphic hasMany relationships where the server is not storing\n all records in the same table using STI, and therefore the `id` is not enough information\n TODO: Make the default in Ember-data 3.0??\n */\n _serializeHasManyAsIdsAndTypes(snapshot, json, relationship) {\n const serializedKey = this.keyForAttribute(relationship.name, 'serialize');\n const hasMany = snapshot.hasMany(relationship.name) || [];\n json[serializedKey] = hasMany.map(function (recordSnapshot) {\n //\n // I'm sure I'm being utterly naive here. Probably id is a configurable property and\n // type too, and the modelName has to be normalized somehow.\n //\n return {\n id: recordSnapshot.id,\n type: recordSnapshot.modelName\n };\n });\n },\n _serializeEmbeddedHasMany(snapshot, json, relationship) {\n const schema = this.store.modelFor(snapshot.modelName);\n let serializedKey = this._getMappedKey(relationship.name, schema);\n if (serializedKey === relationship.name && this.keyForRelationship) {\n serializedKey = this.keyForRelationship(relationship.name, relationship.kind, 'serialize');\n }\n warn(`The embedded relationship '${serializedKey}' is undefined for '${snapshot.modelName}' with id '${snapshot.id}'. Please include it in your original payload.`, typeof snapshot.hasMany(relationship.name) !== 'undefined', {\n id: 'ds.serializer.embedded-relationship-undefined'\n });\n json[serializedKey] = this._generateSerializedHasMany(snapshot, relationship);\n },\n /*\n Returns an array of embedded records serialized to JSON\n */\n _generateSerializedHasMany(snapshot, relationship) {\n const hasMany = snapshot.hasMany(relationship.name) || [];\n const ret = new Array(hasMany.length);\n for (let i = 0; i < hasMany.length; i++) {\n const embeddedSnapshot = hasMany[i];\n const embeddedJson = embeddedSnapshot.serialize({\n includeId: true\n });\n this.removeEmbeddedForeignKey(snapshot, embeddedSnapshot, relationship, embeddedJson);\n ret[i] = embeddedJson;\n }\n return ret;\n },\n /**\n When serializing an embedded record, modify the property (in the `JSON` payload)\n that refers to the parent record (foreign key for the relationship).\n Serializing a `belongsTo` relationship removes the property that refers to the\n parent record\n Serializing a `hasMany` relationship does not remove the property that refers to\n the parent record.\n @method removeEmbeddedForeignKey\n @public\n @param {Snapshot} snapshot\n @param {Snapshot} embeddedSnapshot\n @param {Object} relationship\n @param {Object} json\n */\n removeEmbeddedForeignKey(snapshot, embeddedSnapshot, relationship, json) {\n if (relationship.kind === 'belongsTo') {\n const schema = this.store.modelFor(snapshot.modelName);\n const parentRecord = schema.inverseFor(relationship.name, this.store);\n if (parentRecord) {\n const name = parentRecord.name;\n const embeddedSerializer = this.store.serializerFor(embeddedSnapshot.modelName);\n const parentKey = embeddedSerializer.keyForRelationship(name, parentRecord.kind, 'deserialize');\n if (parentKey) {\n delete json[parentKey];\n }\n }\n } /*else if (relationship.kind === 'hasMany') {\n return;\n }*/\n },\n // checks config for attrs option to embedded (always) - serialize and deserialize\n hasEmbeddedAlwaysOption(attr) {\n const option = this.attrsOption(attr);\n return option && option.embedded === 'always';\n },\n // checks config for attrs option to serialize ids\n hasSerializeRecordsOption(attr) {\n const alwaysEmbed = this.hasEmbeddedAlwaysOption(attr);\n const option = this.attrsOption(attr);\n return alwaysEmbed || option && option.serialize === 'records';\n },\n // checks config for attrs option to serialize records\n hasSerializeIdsOption(attr) {\n const option = this.attrsOption(attr);\n return option && (option.serialize === 'ids' || option.serialize === 'id');\n },\n // checks config for attrs option to serialize records as objects containing id and types\n hasSerializeIdsAndTypesOption(attr) {\n const option = this.attrsOption(attr);\n return option && (option.serialize === 'ids-and-types' || option.serialize === 'id-and-type');\n },\n // checks config for attrs option to serialize records\n noSerializeOptionSpecified(attr) {\n const option = this.attrsOption(attr);\n return !(option && (option.serialize || option.embedded));\n },\n // checks config for attrs option to deserialize records\n // a defined option object for a resource is treated the same as\n // `deserialize: 'records'`\n hasDeserializeRecordsOption(attr) {\n const alwaysEmbed = this.hasEmbeddedAlwaysOption(attr);\n const option = this.attrsOption(attr);\n return alwaysEmbed || option && option.deserialize === 'records';\n },\n attrsOption(attr) {\n const attrs = this.attrs;\n return attrs && (attrs[camelize(attr)] || attrs[attr]);\n },\n /**\n @method _extractEmbeddedRecords\n @private\n */\n _extractEmbeddedRecords(serializer, store, typeClass, partial) {\n typeClass.eachRelationship((key, relationship) => {\n if (serializer.hasDeserializeRecordsOption(key)) {\n if (relationship.kind === 'hasMany') {\n this._extractEmbeddedHasMany(store, key, partial, relationship);\n }\n if (relationship.kind === 'belongsTo') {\n this._extractEmbeddedBelongsTo(store, key, partial, relationship);\n }\n }\n });\n return partial;\n },\n /**\n @method _extractEmbeddedHasMany\n @private\n */\n _extractEmbeddedHasMany(store, key, hash, relationshipMeta) {\n const relationshipHash = hash.data?.relationships?.[key]?.data;\n if (!relationshipHash) {\n return;\n }\n const hasMany = new Array(relationshipHash.length);\n for (let i = 0; i < relationshipHash.length; i++) {\n const item = relationshipHash[i];\n const {\n data,\n included\n } = this._normalizeEmbeddedRelationship(store, relationshipMeta, item);\n hash.included = hash.included || [];\n hash.included.push(data);\n if (included) {\n hash.included = hash.included.concat(included);\n }\n hasMany[i] = {\n id: data.id,\n type: data.type\n };\n }\n const relationship = {\n data: hasMany\n };\n hash.data.relationships[key] = relationship;\n },\n /**\n @method _extractEmbeddedBelongsTo\n @private\n */\n _extractEmbeddedBelongsTo(store, key, hash, relationshipMeta) {\n const relationshipHash = hash.data?.relationships?.[key]?.data;\n if (!relationshipHash) {\n return;\n }\n const {\n data,\n included\n } = this._normalizeEmbeddedRelationship(store, relationshipMeta, relationshipHash);\n hash.included = hash.included || [];\n hash.included.push(data);\n if (included) {\n hash.included = hash.included.concat(included);\n }\n const belongsTo = {\n id: data.id,\n type: data.type\n };\n const relationship = {\n data: belongsTo\n };\n hash.data.relationships[key] = relationship;\n },\n /**\n @method _normalizeEmbeddedRelationship\n @private\n */\n _normalizeEmbeddedRelationship(store, relationshipMeta, relationshipHash) {\n let modelName = relationshipMeta.type;\n if (relationshipMeta.options.polymorphic) {\n modelName = relationshipHash.type;\n }\n const modelClass = store.modelFor(modelName);\n const serializer = store.serializerFor(modelName);\n return serializer.normalize(modelClass, relationshipHash, null);\n },\n isEmbeddedRecordsMixin: true\n});\nexport { embeddedRecordsMixin as e };","import EmberObject from '@ember/object';\n\n/**\n @module @ember-data/serializer\n*/\n\n/**\n The `Transform` class is used to serialize and deserialize model\n attributes when they are saved or loaded from an\n adapter. Subclassing `Transform` is useful for creating custom\n attributes. All subclasses of `Transform` must implement a\n `serialize` and a `deserialize` method.\n\n Example\n\n ```app/transforms/temperature.js\n\n // Converts centigrade in the JSON to fahrenheit in the app\n export default class TemperatureTransform {\n deserialize(serialized, options) {\n return (serialized * 1.8) + 32;\n }\n\n serialize(deserialized, options) {\n return (deserialized - 32) / 1.8;\n }\n\n static create() {\n return new this();\n }\n }\n ```\n\n Usage\n\n ```app/models/requirement.js\n import Model, { attr } from '@ember-data/model';\n\n export default class RequirementModel extends Model {\n @attr('string') name;\n @attr('temperature') temperature;\n }\n ```\n\n The options passed into the `attr` function when the attribute is\n declared on the model is also available in the transform.\n\n ```app/models/post.js\n import Model, { attr } from '@ember-data/model';\n\n export default class PostModel extends Model {\n @attr('string') title;\n @attr('markdown', {\n markdown: {\n gfm: false,\n sanitize: true\n }\n })\n markdown;\n }\n ```\n\n ```app/transforms/markdown.js\n export default class MarkdownTransform {\n serialize(deserialized, options) {\n return deserialized.raw;\n }\n\n deserialize(serialized, options) {\n let markdownOptions = options.markdown || {};\n\n return marked(serialized, markdownOptions);\n }\n\n static create() {\n return new this();\n }\n }\n ```\n\n @class Transform\n @public\n */\n/**\n When given a deserialized value from a record attribute this\n method must return the serialized value.\n\n Example\n\n ```javascript\n serialize(deserialized, options) {\n return deserialized ? null : Number(deserialized);\n }\n ```\n\n @method serialize\n @public\n @param deserialized The deserialized value\n @param options hash of options passed to `attr`\n @return The serialized value\n*/\n/**\n When given a serialized value from a JSON object this method must\n return the deserialized value for the record attribute.\n\n Example\n\n ```javascript\n deserialize(serialized, options) {\n return empty(serialized) ? null : Number(serialized);\n }\n ```\n\n @method deserialize\n @public\n @param serialized The serialized value\n @param options hash of options passed to `attr`\n @return The deserialized value\n*/\n\nconst Transform = EmberObject;\n\n/**\n @module @ember-data/serializer\n*/\n\n/**\n The `BooleanTransform` class is used to serialize and deserialize\n boolean attributes on Ember Data record objects. This transform is\n used when `boolean` is passed as the type parameter to the\n [attr](/ember-data/release/functions/@ember-data%2Fmodel/attr) function.\n\n Usage\n\n ```app/models/user.js\n import Model, { attr } from '@ember-data/model';\n\n export default class UserModel extends Model {\n @attr('boolean') isAdmin;\n @attr('string') name;\n @attr('string') email;\n }\n ```\n\n By default, the boolean transform only allows for values of `true` or\n `false`. You can opt into allowing `null` values for\n boolean attributes via `attr('boolean', { allowNull: true })`\n\n ```app/models/user.js\n import Model, { attr } from '@ember-data/model';\n\n export default class UserModel extends Model {\n @attr('string') email;\n @attr('string') username;\n @attr('boolean', { allowNull: true }) wantsWeeklyEmail;\n }\n ```\n\n @class BooleanTransform\n @public\n */\nclass BooleanTransform {\n deserialize(serialized, options) {\n if ((serialized === null || serialized === undefined) && options?.allowNull === true) {\n return null;\n }\n if (typeof serialized === 'boolean') {\n return serialized;\n } else if (typeof serialized === 'string') {\n return /^(true|t|1)$/i.test(serialized);\n } else if (typeof serialized === 'number') {\n return serialized === 1;\n } else {\n return false;\n }\n }\n serialize(deserialized, options) {\n if ((deserialized === null || deserialized === undefined) && options?.allowNull === true) {\n return null;\n }\n return Boolean(deserialized);\n }\n static create() {\n return new this();\n }\n}\n\n/**\n @module @ember-data/serializer\n*/\n\n/**\n The `DateTransform` class is used to serialize and deserialize\n date attributes on Ember Data record objects. This transform is used\n when `date` is passed as the type parameter to the\n [attr](/ember-data/release/functions/@ember-data%2Fmodel/attr) function. It uses the [`ISO 8601`](https://en.wikipedia.org/wiki/ISO_8601)\n standard.\n\n ```app/models/score.js\n import Model, { attr, belongsTo } from '@ember-data/model';\n\n export default class ScoreModel extends Model {\n @attr('number') value;\n @belongsTo('player') player;\n @attr('date') date;\n }\n ```\n\n @class DateTransform\n @public\n */\n\nclass DateTransform {\n deserialize(serialized, _options) {\n if (typeof serialized === 'string') {\n let offset = serialized.indexOf('+');\n if (offset !== -1 && serialized.length - 5 === offset) {\n offset += 3;\n return new Date(serialized.slice(0, offset) + ':' + serialized.slice(offset));\n }\n return new Date(serialized);\n } else if (typeof serialized === 'number') {\n return new Date(serialized);\n } else if (serialized === null || serialized === undefined) {\n // if the value is null return null\n // if the value is not present in the data return undefined\n return serialized;\n } else {\n return null;\n }\n }\n serialize(date, _options) {\n // @ts-expect-error isNaN accepts date as it is coercible\n if (date instanceof Date && !isNaN(date)) {\n return date.toISOString();\n } else {\n return null;\n }\n }\n static create() {\n return new this();\n }\n}\n\n/**\n @module @ember-data/serializer\n*/\n\nfunction isNumber(value) {\n return value === value && value !== Infinity && value !== -Infinity;\n}\n\n/**\n The `NumberTransform` class is used to serialize and deserialize\n numeric attributes on Ember Data record objects. This transform is\n used when `number` is passed as the type parameter to the\n [attr](/ember-data/release/functions/@ember-data%2Fmodel/attr) function.\n\n Usage\n\n ```app/models/score.js\n import Model, { attr, belongsTo } from '@ember-data/model';\n\n export default class ScoreModel extends Model {\n @attr('number') value;\n @belongsTo('player') player;\n @attr('date') date;\n }\n ```\n\n @class NumberTransform\n @public\n */\nclass NumberTransform {\n deserialize(serialized, _options) {\n if (serialized === '' || serialized === null || serialized === undefined) {\n return null;\n } else {\n const transformed = Number(serialized);\n return isNumber(transformed) ? transformed : null;\n }\n }\n serialize(deserialized, _options) {\n if (deserialized === '' || deserialized === null || deserialized === undefined) {\n return null;\n } else {\n const transformed = Number(deserialized);\n return isNumber(transformed) ? transformed : null;\n }\n }\n static create() {\n return new this();\n }\n}\n\n/**\n @module @ember-data/serializer\n*/\n\n/**\n The `StringTransform` class is used to serialize and deserialize\n string attributes on Ember Data record objects. This transform is\n used when `string` is passed as the type parameter to the\n [attr](/ember-data/release/functions/@ember-data%2Fmodel/attr) function.\n\n Usage\n\n ```app/models/user.js\n import Model, { attr, belongsTo } from '@ember-data/model';\n\n export default class UserModel extends Model {\n @attr('boolean') isAdmin;\n @attr('string') name;\n @attr('string') email;\n }\n ```\n\n @class StringTransform\n @public\n */\nclass StringTransform {\n deserialize(serialized, _options) {\n return !serialized && serialized !== '' ? null : String(serialized);\n }\n serialize(deserialized, _options) {\n return !deserialized && deserialized !== '' ? null : String(deserialized);\n }\n static create() {\n return new this();\n }\n}\nexport { BooleanTransform as B, DateTransform as D, NumberTransform as N, StringTransform as S, Transform as T };","/**\n @module @ember-data/store\n*/\n\n// provided for additional debuggability\nconst DEBUG_CLIENT_ORIGINATED = Symbol('record-originated-on-client');\nconst DEBUG_IDENTIFIER_BUCKET = Symbol('identifier-bucket');\nconst DEBUG_STALE_CACHE_OWNER = Symbol('warpDriveStaleCache');\n\n// also present in production\nconst CACHE_OWNER = Symbol('warpDriveCache');\n\n/**\n * An Identifier specific to a record which may or may not\n * be present in the cache.\n *\n * The absence of an `id` DOES NOT indicate that this\n * Identifier is for a new client-created record as it\n * may also indicate that it was generated for a secondary\n * index and the primary `id` index is not yet known.\n *\n * @internal\n */\n\n/**\n * Used when an Identifier is known to be the stable version\n *\n * @internal\n */\n\n/**\n * Used when a StableRecordIdentifier was not created locally as part\n * of a call to store.createRecord\n *\n * Distinguishing between this Identifier and one for a client created\n * record that was created with an ID is generally speaking not possible\n * at runtime, so anything with an ID typically narrows to this.\n *\n * @internal\n */\n\n/**\n * Used when a StableRecordIdentifier was created locally\n * (by a call to store.createRecord).\n *\n * It is possible in rare circumstances to have a StableRecordIdentifier\n * that is not for a new record but does not have an ID. This would\n * happen if a user intentionally created one for use with a secondary-index\n * prior to the record having been fully loaded.\n *\n * @internal\n */\n\n/**\n * A referentially stable object with a unique string (lid) that can be used\n * as a reference to data in the cache.\n *\n * Every record instance has a unique identifier, and identifiers may refer\n * to data that has never been loaded (for instance, in an async relationship).\n *\n * @class StableRecordIdentifier\n * @public\n */\n\n/**\n * A string representing a unique identity.\n *\n * @property {string} lid\n * @public\n */\n/**\n * the primary resource `type` or `modelName` this identity belongs to.\n *\n * @property {string} type\n * @public\n */\n/**\n * the primary id for the record this identity belongs to. `null`\n * if not yet assigned an id.\n *\n * @property {string | null} id\n * @public\n */\n\nexport { CACHE_OWNER, DEBUG_CLIENT_ORIGINATED, DEBUG_IDENTIFIER_BUCKET, DEBUG_STALE_CACHE_OWNER };","import { deprecate, assert, warn } from '@ember/debug';\nimport EmberObject from '@ember/object';\nimport { SkipCache, EnableHydration } from '@warp-drive/core-types/request';\nimport { macroCondition, getOwnConfig } from '@embroider/macros';\nimport { CACHE_OWNER, DEBUG_STALE_CACHE_OWNER, DEBUG_CLIENT_ORIGINATED, DEBUG_IDENTIFIER_BUCKET } from '@warp-drive/core-types/identifier';\nimport { dasherize } from '@ember/string';\nimport { defineSignal, addToTransaction, createSignal, subscribe, createArrayTags, addTransactionCB } from '@ember-data/tracking/-private';\nimport { _backburner } from '@ember/runloop';\nimport { compat } from '@ember-data/tracking';\n\n/**\n @module @ember-data/store\n*/\n\nfunction coerceId(id) {\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_NON_STRICT_ID)) {\n let normalized;\n if (id === null || id === undefined || id === '') {\n normalized = null;\n } else {\n normalized = String(id);\n }\n deprecate(`The resource id '<${typeof id}> ${String(id)} ' is not normalized. Update your application code to use '${JSON.stringify(normalized)}' instead.`, normalized === id, {\n id: 'ember-data:deprecate-non-strict-id',\n until: '6.0',\n for: 'ember-data',\n since: {\n available: '5.3',\n enabled: '5.3'\n }\n });\n return normalized;\n }\n assert(`Resource IDs must be a non-empty string or null. Received '${String(id)}'.`, id === null || typeof id === 'string' && id.length > 0);\n return id;\n}\nfunction ensureStringId(id) {\n let normalized = null;\n if (typeof id === 'string') {\n normalized = id.length > 0 ? id : null;\n } else if (typeof id === 'number' && !isNaN(id)) {\n normalized = String(id);\n }\n assert(`Expected id to be a string or number, received ${String(id)}`, normalized !== null);\n return normalized;\n}\nfunction normalizeModelName(type) {\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_NON_STRICT_TYPES)) {\n const result = dasherize(type);\n deprecate(`The resource type '${type}' is not normalized. Update your application code to use '${result}' instead of '${type}'.`, result === type, {\n id: 'ember-data:deprecate-non-strict-types',\n until: '6.0',\n for: 'ember-data',\n since: {\n available: '5.3',\n enabled: '5.3'\n }\n });\n return result;\n }\n return type;\n}\n\n/**\n @module @ember-data/store\n*/\n\nfunction installPolyfill() {\n const isFastBoot = typeof FastBoot !== 'undefined';\n const CRYPTO = isFastBoot ? FastBoot.require('crypto') : window.crypto;\n if (!CRYPTO.randomUUID) {\n // we might be able to optimize this by requesting more bytes than we need at a time\n const rng = function () {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n const rnds8 = new Uint8Array(16);\n if (!CRYPTO.getRandomValues && !isFastBoot) {\n throw new Error(`Unable to generate bytes for UUID`);\n }\n return CRYPTO.getRandomValues ? CRYPTO.getRandomValues(rnds8) : CRYPTO.randomFillSync(rnds8);\n };\n\n /*\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n const byteToHex = [];\n for (let i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n }\n const bytesToUuid = function (buf) {\n const bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return [bth[buf[0]], bth[buf[1]], bth[buf[2]], bth[buf[3]], '-', bth[buf[4]], bth[buf[5]], '-', bth[buf[6]], bth[buf[7]], '-', bth[buf[8]], bth[buf[9]], '-', bth[buf[10]], bth[buf[11]], bth[buf[12]], bth[buf[13]], bth[buf[14]], bth[buf[15]]].join('');\n };\n CRYPTO.randomUUID = function uuidv4() {\n const rnds = rng();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80;\n return bytesToUuid(rnds);\n };\n }\n}\nfunction isResource(resource) {\n return Boolean(resource && typeof resource === 'object');\n}\nfunction hasProp(resource, prop) {\n return Boolean(isResource(resource) && prop in resource && typeof resource[prop] === 'string' && resource[prop].length);\n}\nfunction hasLid(resource) {\n return hasProp(resource, 'lid');\n}\nfunction hasId(resource) {\n return hasProp(resource, 'id') || Boolean(isResource(resource) && 'id' in resource && typeof resource.id === 'number');\n}\nfunction hasType(resource) {\n return hasProp(resource, 'type');\n}\n\n/**\n @module @ember-data/store\n*/\nconst IDENTIFIERS = new Set();\nconst DOCUMENTS = new Set();\nfunction isStableIdentifier(identifier) {\n return identifier[CACHE_OWNER] !== undefined || IDENTIFIERS.has(identifier);\n}\nfunction isDocumentIdentifier(identifier) {\n return DOCUMENTS.has(identifier);\n}\nconst isFastBoot = typeof FastBoot !== 'undefined';\nconst _crypto = isFastBoot ? FastBoot.require('crypto') : window.crypto;\nif (macroCondition(getOwnConfig().polyfillUUID)) {\n installPolyfill();\n}\nfunction uuidv4() {\n assert('crypto.randomUUID needs to be avaliable. Some browsers incorrectly disallow it in insecure contexts. You maybe want to enable the polyfill: https://github.com/emberjs/data#randomuuid-polyfill', typeof _crypto.randomUUID === 'function');\n return _crypto.randomUUID();\n}\nfunction freeze(obj) {\n if (typeof Object.freeze === 'function') {\n return Object.freeze(obj);\n }\n return obj;\n}\n\n// type IdentifierTypeLookup = { all: Set; id: Map };\n// type IdentifiersByType = Map;\n\nlet configuredForgetMethod;\nlet configuredGenerationMethod;\nlet configuredResetMethod;\nlet configuredUpdateMethod;\nfunction setIdentifierGenerationMethod(method) {\n configuredGenerationMethod = method;\n}\nfunction setIdentifierUpdateMethod(method) {\n configuredUpdateMethod = method;\n}\nfunction setIdentifierForgetMethod(method) {\n configuredForgetMethod = method;\n}\nfunction setIdentifierResetMethod(method) {\n configuredResetMethod = method;\n}\n\n// Map>\n\nconst NEW_IDENTIFIERS = new Map();\nlet IDENTIFIER_CACHE_ID = 0;\nfunction updateTypeIdMapping(typeMap, identifier, id) {\n let idMap = typeMap.get(identifier.type);\n if (!idMap) {\n idMap = new Map();\n typeMap.set(identifier.type, idMap);\n }\n idMap.set(id, identifier.lid);\n}\nfunction defaultUpdateMethod(identifier, data, bucket) {\n if (bucket === 'record') {\n assert(`Expected identifier to be a StableRecordIdentifier`, isStableIdentifier(identifier));\n if (!identifier.id && hasId(data)) {\n updateTypeIdMapping(NEW_IDENTIFIERS, identifier, data.id);\n }\n }\n}\nfunction defaultKeyInfoMethod(resource, known) {\n // TODO RFC something to make this configurable\n const id = hasId(resource) ? coerceId(resource.id) : null;\n const type = hasType(resource) ? normalizeModelName(resource.type) : known ? known.type : null;\n assert(`Expected keyInfoForResource to provide a type for the resource`, type);\n return {\n type,\n id\n };\n}\nfunction defaultGenerationMethod(data, bucket) {\n if (bucket === 'record') {\n if (hasLid(data)) {\n return data.lid;\n }\n assert(`Cannot generate an identifier for a resource without a type`, hasType(data));\n if (hasId(data)) {\n const type = normalizeModelName(data.type);\n const lid = NEW_IDENTIFIERS.get(type)?.get(data.id);\n return lid || `@lid:${type}-${data.id}`;\n }\n return uuidv4();\n } else if (bucket === 'document') {\n if (!data.url) {\n return null;\n }\n if (!data.method || data.method.toUpperCase() === 'GET') {\n return data.url;\n }\n return null;\n }\n assert(`Unknown bucket ${bucket}`, false);\n}\nfunction defaultEmptyCallback(...args) {}\nfunction defaultMergeMethod(a, _b, _c) {\n return a;\n}\nlet DEBUG_MAP;\nif (macroCondition(getOwnConfig().env.DEBUG)) {\n DEBUG_MAP = new WeakMap();\n}\n\n/**\n * Each instance of {Store} receives a unique instance of a IdentifierCache.\n *\n * This cache is responsible for assigning or retrieving the unique identify\n * for arbitrary resource data encountered by the store. Data representing\n * a unique resource or record should always be represented by the same\n * identifier.\n *\n * It can be configured by consuming applications.\n *\n * @class IdentifierCache\n @public\n */\nclass IdentifierCache {\n constructor() {\n // we cache the user configuredGenerationMethod at init because it must\n // be configured prior and is not allowed to be changed\n this._generate = configuredGenerationMethod || defaultGenerationMethod;\n this._update = configuredUpdateMethod || defaultUpdateMethod;\n this._forget = configuredForgetMethod || defaultEmptyCallback;\n this._reset = configuredResetMethod || defaultEmptyCallback;\n this._merge = defaultMergeMethod;\n this._keyInfoForResource = defaultKeyInfoMethod;\n this._isDefaultConfig = !configuredGenerationMethod;\n this._id = IDENTIFIER_CACHE_ID++;\n this._cache = {\n resources: new Map(),\n resourcesByType: Object.create(null),\n documents: new Map(),\n polymorphicLidBackMap: new Map()\n };\n }\n\n /**\n * Internal hook to allow management of merge conflicts with identifiers.\n *\n * we allow late binding of this private internal merge so that\n * the cache can insert itself here to handle elimination of duplicates\n *\n * @method __configureMerge\n * @private\n */\n __configureMerge(method) {\n this._merge = method || defaultMergeMethod;\n }\n upgradeIdentifier(resource) {\n return this._getRecordIdentifier(resource, 2);\n }\n\n /**\n * @method _getRecordIdentifier\n * @private\n */\n\n _getRecordIdentifier(resource, shouldGenerate) {\n if (macroCondition(getOwnConfig().debug.LOG_IDENTIFIERS)) {\n // eslint-disable-next-line no-console\n console.groupCollapsed(`Identifiers: ${shouldGenerate ? 'Generating' : 'Peeking'} Identifier`, resource);\n }\n // short circuit if we're already the stable version\n if (isStableIdentifier(resource)) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n // TODO should we instead just treat this case as a new generation skipping the short circuit?\n if (!this._cache.resources.has(resource.lid) || this._cache.resources.get(resource.lid) !== resource) {\n throw new Error(`The supplied identifier ${JSON.stringify(resource)} does not belong to this store instance`);\n }\n }\n if (macroCondition(getOwnConfig().debug.LOG_IDENTIFIERS)) {\n // eslint-disable-next-line no-console\n console.log(`Identifiers: cache HIT - Stable ${resource.lid}`);\n // eslint-disable-next-line no-console\n console.groupEnd();\n }\n return resource;\n }\n\n // the resource is unknown, ask the application to identify this data for us\n const lid = this._generate(resource, 'record');\n if (macroCondition(getOwnConfig().debug.LOG_IDENTIFIERS)) {\n // eslint-disable-next-line no-console\n console.log(`Identifiers: ${lid ? 'no ' : ''}lid ${lid ? lid + ' ' : ''}determined for resource`, resource);\n }\n let identifier = /*#__NOINLINE__*/getIdentifierFromLid(this._cache, lid, resource);\n if (identifier !== null) {\n if (macroCondition(getOwnConfig().debug.LOG_IDENTIFIERS)) {\n // eslint-disable-next-line no-console\n console.groupEnd();\n }\n return identifier;\n }\n if (shouldGenerate === 0) {\n if (macroCondition(getOwnConfig().debug.LOG_IDENTIFIERS)) {\n // eslint-disable-next-line no-console\n console.groupEnd();\n }\n return;\n }\n\n // if we still don't have an identifier, time to generate one\n if (shouldGenerate === 2) {\n resource.lid = lid;\n resource[CACHE_OWNER] = this._id;\n identifier = /*#__NOINLINE__*/makeStableRecordIdentifier(resource, 'record', false);\n } else {\n // we lie a bit here as a memory optimization\n const keyInfo = this._keyInfoForResource(resource, null);\n keyInfo.lid = lid;\n keyInfo[CACHE_OWNER] = this._id;\n identifier = /*#__NOINLINE__*/makeStableRecordIdentifier(keyInfo, 'record', false);\n }\n addResourceToCache(this._cache, identifier);\n if (macroCondition(getOwnConfig().debug.LOG_IDENTIFIERS)) {\n // eslint-disable-next-line no-console\n console.groupEnd();\n }\n return identifier;\n }\n\n /**\n * allows us to peek without generating when needed\n * useful for the \"create\" case when we need to see if\n * we are accidentally overwritting something\n *\n * @method peekRecordIdentifier\n * @param resource\n * @return {StableRecordIdentifier | undefined}\n * @private\n */\n peekRecordIdentifier(resource) {\n return this._getRecordIdentifier(resource, 0);\n }\n\n /**\n Returns the DocumentIdentifier for the given Request, creates one if it does not yet exist.\n Returns `null` if the request does not have a `cacheKey` or `url`.\n @method getOrCreateDocumentIdentifier\n @param request\n @return {StableDocumentIdentifier | null}\n @public\n */\n getOrCreateDocumentIdentifier(request) {\n let cacheKey = request.cacheOptions?.key;\n if (!cacheKey) {\n cacheKey = this._generate(request, 'document');\n }\n if (!cacheKey) {\n return null;\n }\n let identifier = this._cache.documents.get(cacheKey);\n if (identifier === undefined) {\n identifier = {\n lid: cacheKey\n };\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n Object.freeze(identifier);\n }\n DOCUMENTS.add(identifier);\n this._cache.documents.set(cacheKey, identifier);\n }\n return identifier;\n }\n\n /**\n Returns the Identifier for the given Resource, creates one if it does not yet exist.\n Specifically this means that we:\n - validate the `id` `type` and `lid` combo against known identifiers\n - return an object with an `lid` that is stable (repeated calls with the same\n `id` + `type` or `lid` will return the same `lid` value)\n - this referential stability of the object itself is guaranteed\n @method getOrCreateRecordIdentifier\n @param resource\n @return {StableRecordIdentifier}\n @public\n */\n getOrCreateRecordIdentifier(resource) {\n return this._getRecordIdentifier(resource, 1);\n }\n\n /**\n Returns a new Identifier for the supplied data. Call this method to generate\n an identifier when a new resource is being created local to the client and\n potentially does not have an `id`.\n Delegates generation to the user supplied `GenerateMethod` if one has been provided\n with the signature `generateMethod({ type }, 'record')`.\n @method createIdentifierForNewRecord\n @param data\n @return {StableRecordIdentifier}\n @public\n */\n createIdentifierForNewRecord(data) {\n const newLid = this._generate(data, 'record');\n const identifier = /*#__NOINLINE__*/makeStableRecordIdentifier({\n id: data.id || null,\n type: data.type,\n lid: newLid,\n [CACHE_OWNER]: this._id\n }, 'record', true);\n\n // populate our unique table\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (this._cache.resources.has(identifier.lid)) {\n throw new Error(`The lid generated for the new record is not unique as it matches an existing identifier`);\n }\n }\n\n /*#__NOINLINE__*/\n addResourceToCache(this._cache, identifier);\n if (macroCondition(getOwnConfig().debug.LOG_IDENTIFIERS)) {\n // eslint-disable-next-line no-console\n console.log(`Identifiers: created identifier ${String(identifier)} for newly generated resource`, data);\n }\n return identifier;\n }\n\n /**\n Provides the opportunity to update secondary lookup tables for existing identifiers\n Called after an identifier created with `createIdentifierForNewRecord` has been\n committed.\n Assigned `id` to an `Identifier` if `id` has not previously existed; however,\n attempting to change the `id` or calling update without providing an `id` when\n one is missing will throw an error.\n - sets `id` (if `id` was previously `null`)\n - `lid` and `type` MUST NOT be altered post creation\n If a merge occurs, it is possible the returned identifier does not match the originally\n provided identifier. In this case the abandoned identifier will go through the usual\n `forgetRecordIdentifier` codepaths.\n @method updateRecordIdentifier\n @param identifierObject\n @param data\n @return {StableRecordIdentifier}\n @public\n */\n updateRecordIdentifier(identifierObject, data) {\n let identifier = this.getOrCreateRecordIdentifier(identifierObject);\n const keyInfo = this._keyInfoForResource(data, identifier);\n let existingIdentifier = /*#__NOINLINE__*/detectMerge(this._cache, keyInfo, identifier, data);\n const hadLid = hasLid(data);\n if (!existingIdentifier) {\n // If the incoming type does not match the identifier type, we need to create an identifier for the incoming\n // data so we can merge the incoming data with the existing identifier, see #7325 and #7363\n if (identifier.type !== keyInfo.type) {\n if (hadLid) {\n // Strip the lid to ensure we force a new identifier creation\n delete data.lid;\n }\n existingIdentifier = this.getOrCreateRecordIdentifier(data);\n }\n }\n if (existingIdentifier) {\n const generatedIdentifier = identifier;\n identifier = this._mergeRecordIdentifiers(keyInfo, generatedIdentifier, existingIdentifier, data);\n\n // make sure that the `lid` on the data we are processing matches the lid we kept\n if (hadLid) {\n data.lid = identifier.lid;\n }\n if (macroCondition(getOwnConfig().debug.LOG_IDENTIFIERS)) {\n // eslint-disable-next-line no-console\n console.log(`Identifiers: merged identifiers ${generatedIdentifier.lid} and ${existingIdentifier.lid} for resource into ${identifier.lid}`, data);\n }\n }\n const id = identifier.id;\n /*#__NOINLINE__*/\n performRecordIdentifierUpdate(identifier, keyInfo, data, this._update);\n const newId = identifier.id;\n\n // add to our own secondary lookup table\n if (id !== newId && newId !== null) {\n if (macroCondition(getOwnConfig().debug.LOG_IDENTIFIERS)) {\n // eslint-disable-next-line no-console\n console.log(`Identifiers: updated id for identifier ${identifier.lid} from '${String(id)}' to '${String(newId)}' for resource`, data);\n }\n const typeSet = this._cache.resourcesByType[identifier.type];\n assert(`Expected to find a typeSet for ${identifier.type}`, typeSet);\n typeSet.id.set(newId, identifier);\n if (id !== null) {\n typeSet.id.delete(id);\n }\n } else if (macroCondition(getOwnConfig().debug.LOG_IDENTIFIERS)) {\n // eslint-disable-next-line no-console\n console.log(`Identifiers: updated identifier ${identifier.lid} resource`, data);\n }\n return identifier;\n }\n\n /**\n * @method _mergeRecordIdentifiers\n * @private\n */\n _mergeRecordIdentifiers(keyInfo, identifier, existingIdentifier, data) {\n assert(`Expected keyInfo to contain an id`, hasId(keyInfo));\n // delegate determining which identifier to keep to the configured MergeMethod\n const kept = this._merge(identifier, existingIdentifier, data);\n const abandoned = kept === identifier ? existingIdentifier : identifier;\n\n // get any backreferences before forgetting this identifier, as it will be removed from the cache\n // and we will no longer be able to find them\n const abandonedBackReferences = this._cache.polymorphicLidBackMap.get(abandoned.lid);\n // delete the backreferences for the abandoned identifier so that forgetRecordIdentifier\n // does not try to remove them.\n if (abandonedBackReferences) this._cache.polymorphicLidBackMap.delete(abandoned.lid);\n\n // cleanup the identifier we no longer need\n this.forgetRecordIdentifier(abandoned);\n\n // ensure a secondary cache entry for the original lid for the abandoned identifier\n this._cache.resources.set(abandoned.lid, kept);\n\n // backReferences let us know which other identifiers are pointing at this identifier\n // so we can delete them later if we forget this identifier\n const keptBackReferences = this._cache.polymorphicLidBackMap.get(kept.lid) ?? [];\n keptBackReferences.push(abandoned.lid);\n\n // update the backreferences from the abandoned identifier to be for the kept identifier\n if (abandonedBackReferences) {\n abandonedBackReferences.forEach(lid => {\n keptBackReferences.push(lid);\n this._cache.resources.set(lid, kept);\n });\n }\n this._cache.polymorphicLidBackMap.set(kept.lid, keptBackReferences);\n return kept;\n }\n\n /**\n Provides the opportunity to eliminate an identifier from secondary lookup tables\n as well as eliminates it from ember-data's own lookup tables and book keeping.\n Useful when a record has been deleted and the deletion has been persisted and\n we do not care about the record anymore. Especially useful when an `id` of a\n deleted record might be reused later for a new record.\n @method forgetRecordIdentifier\n @param identifierObject\n @public\n */\n forgetRecordIdentifier(identifierObject) {\n const identifier = this.getOrCreateRecordIdentifier(identifierObject);\n const typeSet = this._cache.resourcesByType[identifier.type];\n assert(`Expected to find a typeSet for ${identifier.type}`, typeSet);\n if (identifier.id !== null) {\n typeSet.id.delete(identifier.id);\n }\n this._cache.resources.delete(identifier.lid);\n typeSet.lid.delete(identifier.lid);\n const backReferences = this._cache.polymorphicLidBackMap.get(identifier.lid);\n if (backReferences) {\n backReferences.forEach(lid => {\n this._cache.resources.delete(lid);\n });\n this._cache.polymorphicLidBackMap.delete(identifier.lid);\n }\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n identifier[DEBUG_STALE_CACHE_OWNER] = identifier[CACHE_OWNER];\n }\n identifier[CACHE_OWNER] = undefined;\n IDENTIFIERS.delete(identifier);\n this._forget(identifier, 'record');\n if (macroCondition(getOwnConfig().debug.LOG_IDENTIFIERS)) {\n // eslint-disable-next-line no-console\n console.log(`Identifiers: released identifier ${identifierObject.lid}`);\n }\n }\n destroy() {\n NEW_IDENTIFIERS.clear();\n this._cache.documents.forEach(identifier => {\n DOCUMENTS.delete(identifier);\n });\n this._reset();\n }\n}\nfunction makeStableRecordIdentifier(recordIdentifier, bucket, clientOriginated) {\n IDENTIFIERS.add(recordIdentifier);\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n // we enforce immutability in dev\n // but preserve our ability to do controlled updates to the reference\n let wrapper = {\n get lid() {\n return recordIdentifier.lid;\n },\n get id() {\n return recordIdentifier.id;\n },\n get type() {\n return recordIdentifier.type;\n },\n get [CACHE_OWNER]() {\n return recordIdentifier[CACHE_OWNER];\n },\n set [CACHE_OWNER](value) {\n recordIdentifier[CACHE_OWNER] = value;\n },\n get [DEBUG_STALE_CACHE_OWNER]() {\n return recordIdentifier[DEBUG_STALE_CACHE_OWNER];\n },\n set [DEBUG_STALE_CACHE_OWNER](value) {\n recordIdentifier[DEBUG_STALE_CACHE_OWNER] = value;\n }\n };\n Object.defineProperty(wrapper, 'toString', {\n enumerable: false,\n value: () => {\n const {\n type,\n id,\n lid\n } = recordIdentifier;\n return `${clientOriginated ? '[CLIENT_ORIGINATED] ' : ''}${String(type)}:${String(id)} (${lid})`;\n }\n });\n Object.defineProperty(wrapper, 'toJSON', {\n enumerable: false,\n value: () => {\n const {\n type,\n id,\n lid\n } = recordIdentifier;\n return {\n type,\n id,\n lid\n };\n }\n });\n wrapper[DEBUG_CLIENT_ORIGINATED] = clientOriginated;\n wrapper[DEBUG_IDENTIFIER_BUCKET] = bucket;\n IDENTIFIERS.add(wrapper);\n DEBUG_MAP.set(wrapper, recordIdentifier);\n wrapper = freeze(wrapper);\n return wrapper;\n }\n return recordIdentifier;\n}\nfunction performRecordIdentifierUpdate(identifier, keyInfo, data, updateFn) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n const {\n id,\n type\n } = keyInfo;\n\n // get the mutable instance behind our proxy wrapper\n const wrapper = identifier;\n identifier = DEBUG_MAP.get(wrapper);\n if (hasLid(data)) {\n const lid = data.lid;\n if (lid !== identifier.lid) {\n throw new Error(`The 'lid' for a RecordIdentifier cannot be updated once it has been created. Attempted to set lid for '${wrapper.lid}' to '${lid}'.`);\n }\n }\n if (id && identifier.id !== null && identifier.id !== id) {\n // here we warn and ignore, as this may be a mistake, but we allow the user\n // to have multiple cache-keys pointing at a single lid so we cannot error\n warn(`The 'id' for a RecordIdentifier should not be updated once it has been set. Attempted to set id for '${wrapper.lid}' to '${id}'.`, false, {\n id: 'ember-data:multiple-ids-for-identifier'\n });\n }\n\n // TODO consider just ignoring here to allow flexible polymorphic support\n if (type && type !== identifier.type) {\n throw new Error(`The 'type' for a RecordIdentifier cannot be updated once it has been set. Attempted to set type for '${wrapper.lid}' to '${type}'.`);\n }\n updateFn(wrapper, data, 'record');\n } else {\n updateFn(identifier, data, 'record');\n }\n\n // upgrade the ID, this is a \"one time only\" ability\n // for the multiple-cache-key scenario we \"could\"\n // use a heuristic to guess the best id for display\n // (usually when `data.id` is available and `data.attributes` is not)\n if (data.id !== undefined) {\n identifier.id = coerceId(data.id);\n }\n}\nfunction detectMerge(cache, keyInfo, identifier, data) {\n const newId = keyInfo.id;\n const {\n id,\n type,\n lid\n } = identifier;\n const typeSet = cache.resourcesByType[identifier.type];\n\n // if the IDs are present but do not match\n // then check if we have an existing identifier\n // for the newer ID.\n if (id !== null && id !== newId && newId !== null) {\n const existingIdentifier = typeSet && typeSet.id.get(newId);\n return existingIdentifier !== undefined ? existingIdentifier : false;\n } else {\n const newType = keyInfo.type;\n\n // If the ids and type are the same but lid is not the same, we should trigger a merge of the identifiers\n // we trigger a merge of the identifiers\n // though probably we should just throw an error here\n if (id !== null && id === newId && newType === type && hasLid(data) && data.lid !== lid) {\n return getIdentifierFromLid(cache, data.lid, data) || false;\n\n // If the lids are the same, and ids are the same, but types are different we should trigger a merge of the identifiers\n } else if (id !== null && id === newId && newType && newType !== type && hasLid(data) && data.lid === lid) {\n const newTypeSet = cache.resourcesByType[newType];\n const existingIdentifier = newTypeSet && newTypeSet.id.get(newId);\n return existingIdentifier !== undefined ? existingIdentifier : false;\n }\n }\n return false;\n}\nfunction getIdentifierFromLid(cache, lid, resource) {\n const identifier = cache.resources.get(lid);\n if (macroCondition(getOwnConfig().debug.LOG_IDENTIFIERS)) {\n // eslint-disable-next-line no-console\n console.log(`Identifiers: cache ${identifier ? 'HIT' : 'MISS'} - Non-Stable ${lid}`, resource);\n }\n return identifier || null;\n}\nfunction addResourceToCache(cache, identifier) {\n cache.resources.set(identifier.lid, identifier);\n let typeSet = cache.resourcesByType[identifier.type];\n if (!typeSet) {\n typeSet = {\n lid: new Map(),\n id: new Map()\n };\n cache.resourcesByType[identifier.type] = typeSet;\n }\n typeSet.lid.set(identifier.lid, identifier);\n if (identifier.id) {\n typeSet.id.set(identifier.id, identifier);\n }\n}\n\n/**\n @module @ember-data/store\n*/\n\n/**\n @module @ember-data/store\n*/\n\n/**\n A `RecordReference` is a low-level API that allows users and\n addon authors to perform meta-operations on a record.\n\n @class RecordReference\n @public\n*/\nclass RecordReference {\n constructor(store, identifier) {\n // unsubscribe token given to us by the notification manager\n this.___token = void 0;\n this.___identifier = void 0;\n this.store = store;\n this.___identifier = identifier;\n this.___token = store.notifications.subscribe(identifier, (_, bucket, notifiedKey) => {\n if (bucket === 'identity' || bucket === 'attributes' && notifiedKey === 'id') {\n this._ref++;\n }\n });\n }\n destroy() {\n this.store.notifications.unsubscribe(this.___token);\n }\n get type() {\n return this.identifier().type;\n }\n\n /**\n The `id` of the record that this reference refers to.\n Together, the `type` and `id` properties form a composite key for\n the identity map.\n Example\n ```javascript\n let userRef = store.getReference('user', 1);\n userRef.id(); // '1'\n ```\n @method id\n @public\n @return {String} The id of the record.\n */\n id() {\n this._ref; // consume the tracked prop\n return this.___identifier.id;\n }\n\n /**\n The `identifier` of the record that this reference refers to.\n Together, the `type` and `id` properties form a composite key for\n the identity map.\n Example\n ```javascript\n let userRef = store.getReference('user', 1);\n userRef.identifier(); // '1'\n ```\n @method identifier\n @public\n @return {String} The identifier of the record.\n */\n identifier() {\n return this.___identifier;\n }\n\n /**\n How the reference will be looked up when it is loaded. Currently\n this always returns `identity` to signify that a record will be\n loaded by its `type` and `id`.\n Example\n ```javascript\n const userRef = store.getReference('user', 1);\n userRef.remoteType(); // 'identity'\n ```\n @method remoteType\n @public\n @return {String} 'identity'\n */\n remoteType() {\n return 'identity';\n }\n\n /**\n This API allows you to provide a reference with new data. The\n simplest usage of this API is similar to `store.push`: you provide a\n normalized hash of data and the object represented by the reference\n will update.\n If you pass a promise to `push`, Ember Data will not ask the adapter\n for the data if another attempt to fetch it is made in the\n interim. When the promise resolves, the underlying object is updated\n with the new data, and the promise returned by *this function* is resolved\n with that object.\n For example, `recordReference.push(promise)` will be resolved with a\n record.\n Example\n ```javascript\n let userRef = store.getReference('user', 1);\n // provide data for reference\n userRef.push({\n data: {\n id: \"1\",\n type: \"user\",\n attributes: {\n username: \"@user\"\n }\n }\n }).then(function(user) {\n userRef.value() === user;\n });\n ```\n @method push\n @public\n @param objectOrPromise a JSON:API ResourceDocument or a promise resolving to one\n @return a promise for the value (record or relationship)\n */\n push(objectOrPromise) {\n // TODO @deprecate pushing unresolved payloads\n return Promise.resolve(objectOrPromise).then(data => {\n return this.store.push(data);\n });\n }\n\n /**\n If the entity referred to by the reference is already loaded, it is\n present as `reference.value`. Otherwise the value returned by this function\n is `null`.\n Example\n ```javascript\n let userRef = store.getReference('user', 1);\n userRef.value(); // user\n ```\n @method value\n @public\n @return {Model} the record for this RecordReference\n */\n value() {\n return this.store.peekRecord(this.___identifier);\n }\n\n /**\n Triggers a fetch for the backing entity based on its `remoteType`\n (see `remoteType` definitions per reference type).\n Example\n ```javascript\n let userRef = store.getReference('user', 1);\n // load user (via store.find)\n userRef.load().then(...)\n ```\n @method load\n @public\n @return {Promise} the record for this RecordReference\n */\n load() {\n const id = this.id();\n if (id !== null) {\n return this.store.findRecord(this.type, id);\n }\n assert(`Unable to fetch record of type ${this.type} without an id`);\n }\n\n /**\n Reloads the record if it is already loaded. If the record is not\n loaded it will load the record via `store.findRecord`\n Example\n ```javascript\n let userRef = store.getReference('user', 1);\n // or trigger a reload\n userRef.reload().then(...)\n ```\n @method reload\n @public\n @return {Promise} the record for this RecordReference\n */\n reload() {\n const id = this.id();\n if (id !== null) {\n return this.store.findRecord(this.type, id, {\n reload: true\n });\n }\n assert(`Unable to fetch record of type ${this.type} without an id`);\n }\n}\ndefineSignal(RecordReference.prototype, '_ref');\n\n/**\n @module @ember-data/store\n*/\n\nclass CacheCapabilitiesManager {\n constructor(_store) {\n this._store = _store;\n this._willNotify = false;\n this._pendingNotifies = new Map();\n }\n get identifierCache() {\n return this._store.identifierCache;\n }\n _scheduleNotification(identifier, key) {\n let pending = this._pendingNotifies.get(identifier);\n if (!pending) {\n pending = new Set();\n this._pendingNotifies.set(identifier, pending);\n }\n pending.add(key);\n if (this._willNotify === true) {\n return;\n }\n this._willNotify = true;\n // it's possible a cache adhoc notifies us,\n // in which case we sync flush\n if (this._store._cbs) {\n this._store._schedule('notify', () => this._flushNotifications());\n } else {\n // TODO @runspired determine if relationship mutations should schedule\n // into join/run vs immediate flush\n this._flushNotifications();\n }\n }\n _flushNotifications() {\n if (this._willNotify === false) {\n return;\n }\n const pending = this._pendingNotifies;\n this._pendingNotifies = new Map();\n this._willNotify = false;\n pending.forEach((set, identifier) => {\n set.forEach(key => {\n this._store.notifications.notify(identifier, 'relationships', key);\n });\n });\n }\n notifyChange(identifier, namespace, key) {\n assert(`Expected a stable identifier`, isStableIdentifier(identifier) || isDocumentIdentifier(identifier));\n\n // TODO do we still get value from this?\n if (namespace === 'relationships' && key) {\n this._scheduleNotification(identifier, key);\n return;\n }\n\n // @ts-expect-error\n this._store.notifications.notify(identifier, namespace, key);\n }\n getSchemaDefinitionService() {\n return this._store.getSchemaDefinitionService();\n }\n get schema() {\n return this._store.schema;\n }\n setRecordId(identifier, id) {\n assert(`Expected a stable identifier`, isStableIdentifier(identifier));\n this._store._instanceCache.setRecordId(identifier, id);\n }\n hasRecord(identifier) {\n return Boolean(this._store._instanceCache.peek(identifier));\n }\n disconnectRecord(identifier) {\n assert(`Expected a stable identifier`, isStableIdentifier(identifier));\n this._store._instanceCache.disconnect(identifier);\n this._pendingNotifies.delete(identifier);\n }\n}\n\n/*\n * Returns the Cache instance associated with a given\n * Model or Identifier\n */\n\nconst CacheForIdentifierCache = new Map();\nfunction setCacheFor(identifier, cache) {\n assert(`Illegal set of identifier`, !CacheForIdentifierCache.has(identifier) || CacheForIdentifierCache.get(identifier) === cache);\n CacheForIdentifierCache.set(identifier, cache);\n}\nfunction removeRecordDataFor(identifier) {\n CacheForIdentifierCache.delete(identifier);\n}\nfunction peekCache(instance) {\n if (CacheForIdentifierCache.has(instance)) {\n return CacheForIdentifierCache.get(instance);\n }\n return null;\n}\nfunction isDestroyable(record) {\n return Boolean(record && typeof record === 'object' && typeof record.destroy === 'function');\n}\n\n/**\n @module @ember-data/store\n*/\n\nconst RecordCache = new Map();\nfunction peekRecordIdentifier(record) {\n return RecordCache.get(record);\n}\n\n/**\n Retrieves the unique referentially-stable [RecordIdentifier](/ember-data/release/classes/StableRecordIdentifier)\n assigned to the given record instance.\n ```js\n import { recordIdentifierFor } from \"@ember-data/store\";\n // ... gain access to a record, for instance with peekRecord or findRecord\n const record = store.peekRecord(\"user\", \"1\");\n // get the identifier for the record (see docs for StableRecordIdentifier)\n const identifier = recordIdentifierFor(record);\n // access the identifier's properties.\n const { id, type, lid } = identifier;\n ```\n @method recordIdentifierFor\n @public\n @static\n @for @ember-data/store\n @param {Object} record a record instance previously obstained from the store.\n @return {StableRecordIdentifier}\n */\nfunction recordIdentifierFor(record) {\n assert(`${String(record)} is not a record instantiated by @ember-data/store`, RecordCache.has(record));\n return RecordCache.get(record);\n}\nfunction setRecordIdentifier(record, identifier) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (RecordCache.has(record) && RecordCache.get(record) !== identifier) {\n throw new Error(`${String(record)} was already assigned an identifier`);\n }\n }\n\n /*\n It would be nice to do a reverse check here that an identifier has not\n previously been assigned a record; however, unload + rematerialization\n prevents us from having a great way of doing so when CustomRecordClasses\n don't necessarily give us access to a `isDestroyed` for dematerialized\n instance.\n */\n\n RecordCache.set(record, identifier);\n}\nconst StoreMap = new Map();\nfunction storeFor(record) {\n const store = StoreMap.get(record);\n assert(`A record in a disconnected state cannot utilize the store. This typically means the record has been destroyed, most commonly by unloading it.`, store);\n return store;\n}\nclass InstanceCache {\n constructor(store) {\n this.__instances = {\n record: new Map(),\n reference: new WeakMap()\n };\n this.store = store;\n this._storeWrapper = new CacheCapabilitiesManager(this.store);\n store.identifierCache.__configureMerge((identifier, matchedIdentifier, resourceData) => {\n let keptIdentifier = identifier;\n if (identifier.id !== matchedIdentifier.id) {\n // @ts-expect-error TODO this needs to be fixed\n keptIdentifier = 'id' in resourceData && identifier.id === resourceData.id ? identifier : matchedIdentifier;\n } else if (identifier.type !== matchedIdentifier.type) {\n keptIdentifier =\n // @ts-expect-error TODO this needs to be fixed\n 'type' in resourceData && identifier.type === resourceData.type ? identifier : matchedIdentifier;\n }\n const staleIdentifier = identifier === keptIdentifier ? matchedIdentifier : identifier;\n\n // check for duplicate entities\n const keptHasRecord = this.__instances.record.has(keptIdentifier);\n const staleHasRecord = this.__instances.record.has(staleIdentifier);\n\n // we cannot merge entities when both have records\n // (this may not be strictly true, we could probably swap the cache data the record points at)\n if (keptHasRecord && staleHasRecord) {\n // TODO we probably don't need to throw these errors anymore\n // we can probably just \"swap\" what data source the abandoned\n // record points at so long as\n // it itself is not retained by the store in any way.\n // @ts-expect-error TODO this needs to be fixed\n if ('id' in resourceData) {\n throw new Error(`Failed to update the 'id' for the RecordIdentifier '${identifier.type}:${String(identifier.id)} (${identifier.lid})' to '${String(resourceData.id)}', because that id is already in use by '${matchedIdentifier.type}:${String(matchedIdentifier.id)} (${matchedIdentifier.lid})'`);\n }\n assert(`Failed to update the RecordIdentifier '${identifier.type}:${String(identifier.id)} (${identifier.lid})' to merge with the detected duplicate identifier '${matchedIdentifier.type}:${String(matchedIdentifier.id)} (${String(matchedIdentifier.lid)})'`);\n }\n this.store.cache.patch({\n op: 'mergeIdentifiers',\n record: staleIdentifier,\n value: keptIdentifier\n });\n\n /*\n TODO @runspired consider adding this to make polymorphism even nicer\n if (identifier.type !== matchedIdentifier.type) {\n this.store._graph?.registerPolymorphicType(identifier.type, matchedIdentifier.type);\n }\n */\n\n this.unloadRecord(staleIdentifier);\n return keptIdentifier;\n });\n }\n peek(identifier) {\n return this.__instances.record.get(identifier);\n }\n getRecord(identifier, properties) {\n let record = this.__instances.record.get(identifier);\n if (!record) {\n assert(`Cannot create a new record instance while the store is being destroyed`, !this.store.isDestroying && !this.store.isDestroyed);\n const cache = this.store.cache;\n setCacheFor(identifier, cache);\n record = this.store.instantiateRecord(identifier, properties || {});\n setRecordIdentifier(record, identifier);\n setCacheFor(record, cache);\n StoreMap.set(record, this.store);\n this.__instances.record.set(identifier, record);\n if (macroCondition(getOwnConfig().debug.LOG_INSTANCE_CACHE)) {\n // eslint-disable-next-line no-console\n console.log(`InstanceCache: created Record for ${String(identifier)}`, properties);\n }\n }\n return record;\n }\n getReference(identifier) {\n const cache = this.__instances.reference;\n let reference = cache.get(identifier);\n if (!reference) {\n reference = new RecordReference(this.store, identifier);\n cache.set(identifier, reference);\n }\n return reference;\n }\n recordIsLoaded(identifier, filterDeleted = false) {\n const cache = this.cache;\n if (!cache) {\n return false;\n }\n const isNew = cache.isNew(identifier);\n const isEmpty = cache.isEmpty(identifier);\n\n // if we are new we must consider ourselves loaded\n if (isNew) {\n return !cache.isDeleted(identifier);\n }\n // even if we have a past request, if we are now empty we are not loaded\n // typically this is true after an unloadRecord call\n\n // if we are not empty, not new && we have a fulfilled request then we are loaded\n // we should consider allowing for something to be loaded that is simply \"not empty\".\n // which is how RecordState currently handles this case; however, RecordState is buggy\n // in that it does not account for unloading.\n return filterDeleted && cache.isDeletionCommitted(identifier) ? false : !isEmpty;\n }\n disconnect(identifier) {\n const record = this.__instances.record.get(identifier);\n assert('Cannot destroy record while it is still materialized', !isDestroyable(record) || record.isDestroyed || record.isDestroying);\n this.store._graph?.remove(identifier);\n this.store.identifierCache.forgetRecordIdentifier(identifier);\n removeRecordDataFor(identifier);\n this.store._requestCache._clearEntries(identifier);\n if (macroCondition(getOwnConfig().debug.LOG_INSTANCE_CACHE)) {\n // eslint-disable-next-line no-console\n console.log(`InstanceCache: disconnected ${String(identifier)}`);\n }\n }\n unloadRecord(identifier) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n const requests = this.store.getRequestStateService().getPendingRequestsForRecord(identifier);\n if (requests.some(req => {\n return req.type === 'mutation';\n })) {\n assert(`You can only unload a record which is not inFlight. '${String(identifier)}'`);\n }\n }\n if (macroCondition(getOwnConfig().debug.LOG_INSTANCE_CACHE)) {\n // eslint-disable-next-line no-console\n console.groupCollapsed(`InstanceCache: unloading record for ${String(identifier)}`);\n }\n\n // TODO is this join still necessary?\n this.store._join(() => {\n const record = this.__instances.record.get(identifier);\n const cache = this.cache;\n if (record) {\n this.store.teardownRecord(record);\n this.__instances.record.delete(identifier);\n StoreMap.delete(record);\n RecordCache.delete(record);\n removeRecordDataFor(record);\n if (macroCondition(getOwnConfig().debug.LOG_INSTANCE_CACHE)) {\n // eslint-disable-next-line no-console\n console.log(`InstanceCache: destroyed record for ${String(identifier)}`);\n }\n }\n if (cache) {\n cache.unloadRecord(identifier);\n removeRecordDataFor(identifier);\n if (macroCondition(getOwnConfig().debug.LOG_INSTANCE_CACHE)) {\n // eslint-disable-next-line no-console\n console.log(`InstanceCache: destroyed cache for ${String(identifier)}`);\n }\n } else {\n this.disconnect(identifier);\n }\n this.store._requestCache._clearEntries(identifier);\n if (macroCondition(getOwnConfig().debug.LOG_INSTANCE_CACHE)) {\n // eslint-disable-next-line no-console\n console.log(`InstanceCache: unloaded RecordData for ${String(identifier)}`);\n // eslint-disable-next-line no-console\n console.groupEnd();\n }\n });\n }\n clear(type) {\n const cache = this.store.identifierCache._cache;\n if (type === undefined) {\n // it would be cool if we could just de-ref cache here\n // but probably would require WeakRef models to do so.\n cache.resources.forEach(identifier => {\n this.unloadRecord(identifier);\n });\n } else {\n const typeCache = cache.resourcesByType;\n const identifiers = typeCache[type]?.lid;\n if (identifiers) {\n identifiers.forEach(identifier => {\n // if (rds.has(identifier)) {\n this.unloadRecord(identifier);\n // }\n // TODO we don't remove the identifier, should we?\n });\n }\n }\n }\n\n // TODO this should move into something coordinating operations\n setRecordId(identifier, id) {\n const {\n type,\n lid\n } = identifier;\n const oldId = identifier.id;\n\n // ID absolutely can't be missing if the oldID is empty (missing Id in response for a new record)\n assert(`'${type}' was saved to the server, but the response does not have an id and your record does not either.`, !(id === null && oldId === null));\n\n // ID absolutely can't be different than oldID if oldID is not null\n // TODO this assertion and restriction may not strictly be needed in the identifiers world\n assert(`Cannot update the id for '${type}:${lid}' from '${String(oldId)}' to '${id}'.`, !(oldId !== null && id !== oldId));\n\n // ID can be null if oldID is not null (altered ID in response for a record)\n // however, this is more than likely a developer error.\n if (oldId !== null && id === null) {\n warn(`Your ${type} record was saved to the server, but the response does not have an id.`, !(oldId !== null && id === null));\n return;\n }\n if (macroCondition(getOwnConfig().debug.LOG_INSTANCE_CACHE)) {\n // eslint-disable-next-line no-console\n console.log(`InstanceCache: updating id to '${id}' for record ${String(identifier)}`);\n }\n const existingIdentifier = this.store.identifierCache.peekRecordIdentifier({\n type,\n id\n });\n assert(`'${type}' was saved to the server, but the response returned the new id '${id}', which has already been used with another record.'`, !existingIdentifier || existingIdentifier === identifier);\n if (identifier.id === null) {\n // TODO potentially this needs to handle merged result\n this.store.identifierCache.updateRecordIdentifier(identifier, {\n type,\n id\n });\n }\n\n // TODO update resource cache if needed ?\n // TODO handle consequences of identifier merge for notifications\n this.store.notifications.notify(identifier, 'identity');\n }\n}\nfunction _resourceIsFullDeleted(identifier, cache) {\n return cache.isDeletionCommitted(identifier) || cache.isNew(identifier) && cache.isDeleted(identifier);\n}\nfunction resourceIsFullyDeleted(instanceCache, identifier) {\n const cache = instanceCache.cache;\n return !cache || _resourceIsFullDeleted(identifier, cache);\n}\n\n/*\n When a find request is triggered on the store, the user can optionally pass in\n attributes and relationships to be preloaded. These are meant to behave as if they\n came back from the server, except the user obtained them out of band and is informing\n the store of their existence. The most common use case is for supporting client side\n nested URLs, such as `/posts/1/comments/2` so the user can do\n `store.findRecord('comment', 2, { preload: { post: 1 } })` without having to fetch the post.\n\n Preloaded data can be attributes and relationships passed in either as IDs or as actual\n models.\n */\n\nfunction preloadData(store, identifier, preload) {\n const jsonPayload = {};\n //TODO(Igor) consider the polymorphic case\n const schemas = store.getSchemaDefinitionService();\n const relationships = schemas.relationshipsDefinitionFor(identifier);\n Object.keys(preload).forEach(key => {\n const preloadValue = preload[key];\n const relationshipMeta = relationships[key];\n if (relationshipMeta) {\n if (!jsonPayload.relationships) {\n jsonPayload.relationships = {};\n }\n jsonPayload.relationships[key] = preloadRelationship(relationshipMeta, preloadValue);\n } else {\n if (!jsonPayload.attributes) {\n jsonPayload.attributes = {};\n }\n jsonPayload.attributes[key] = preloadValue;\n }\n });\n const cache = store.cache;\n const hasRecord = Boolean(store._instanceCache.peek(identifier));\n cache.upsert(identifier, jsonPayload, hasRecord);\n}\nfunction preloadRelationship(schema, preloadValue) {\n const relatedType = schema.type;\n if (schema.kind === 'hasMany') {\n assert('You need to pass in an array to set a hasMany property on a record', Array.isArray(preloadValue));\n return {\n data: preloadValue.map(value => _convertPreloadRelationshipToJSON(value, relatedType))\n };\n }\n assert('You should not pass in an array to set a belongsTo property on a record', !Array.isArray(preloadValue));\n return {\n data: preloadValue ? _convertPreloadRelationshipToJSON(preloadValue, relatedType) : null\n };\n}\n\n/*\n findRecord('user', '1', { preload: { friends: ['1'] }});\n findRecord('user', '1', { preload: { friends: [record] }});\n*/\nfunction _convertPreloadRelationshipToJSON(value, type) {\n if (typeof value === 'string' || typeof value === 'number') {\n return {\n type,\n id: ensureStringId(value)\n };\n }\n // TODO if not a record instance assert it's an identifier\n // and allow identifiers to be used\n return recordIdentifierFor(value);\n}\nfunction _clearCaches() {\n RecordCache.clear();\n StoreMap.clear();\n CacheForIdentifierCache.clear();\n}\n\n// if modelFor turns out to be a bottleneck we should replace with a Map\n// and clear it during store teardown.\nconst AvailableShims = new WeakMap();\nfunction getShimClass(store, modelName) {\n let shims = AvailableShims.get(store);\n if (!shims) {\n shims = Object.create(null);\n AvailableShims.set(store, shims);\n }\n let shim = shims[modelName];\n if (shim === undefined) {\n shim = shims[modelName] = new ShimModelClass(store, modelName);\n }\n return shim;\n}\nfunction mapFromHash(hash) {\n const map = new Map();\n for (const i in hash) {\n if (Object.prototype.hasOwnProperty.call(hash, i)) {\n map.set(i, hash[i]);\n }\n }\n return map;\n}\n\n// Mimics the static apis of @ember-data/model\nclass ShimModelClass {\n constructor(store, modelName) {\n this.__store = store;\n this.modelName = modelName;\n }\n get fields() {\n const attrs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({\n type: this.modelName\n });\n const relationships = this.__store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type: this.modelName\n });\n const fields = new Map();\n Object.keys(attrs).forEach(key => fields.set(key, 'attribute'));\n Object.keys(relationships).forEach(key => fields.set(key, relationships[key].kind));\n return fields;\n }\n get attributes() {\n const attrs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({\n type: this.modelName\n });\n return mapFromHash(attrs);\n }\n get relationshipsByName() {\n const relationships = this.__store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type: this.modelName\n });\n return mapFromHash(relationships);\n }\n eachAttribute(callback, binding) {\n const attrDefs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({\n type: this.modelName\n });\n Object.keys(attrDefs).forEach(key => {\n callback.call(binding, key, attrDefs[key]);\n });\n }\n eachRelationship(callback, binding) {\n const relationshipDefs = this.__store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type: this.modelName\n });\n Object.keys(relationshipDefs).forEach(key => {\n callback.call(binding, key, relationshipDefs[key]);\n });\n }\n eachTransformedAttribute(callback, binding) {\n const attrDefs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({\n type: this.modelName\n });\n Object.keys(attrDefs).forEach(key => {\n if (attrDefs[key].type) {\n callback.call(binding, key, attrDefs[key].type);\n }\n });\n }\n}\nfunction _classPrivateFieldBase(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError(\"attempted to use private field on non-instance\");\n }\n return receiver;\n}\nvar id = 0;\nfunction _classPrivateFieldKey(name) {\n return \"__private_\" + id++ + \"_\" + name;\n}\nvar _cache = /*#__PURE__*/_classPrivateFieldKey(\"cache\");\n/**\n * The CacheManager wraps a Cache enforcing that only\n * the public API surface area is exposed.\n *\n * Hence, it is the value of `Store.cache`, wrapping\n * the cache instance returned by `Store.createCache`.\n *\n * It handles translating between cache versions when\n * necessary, for instance when a Store is configured\n * to use both a v1 and a v2 cache depending on some\n * heuristic.\n *\n * Starting with the v2 spec, the cache is designed such\n * that it must be implemented as a singleton.\n *\n * @class CacheManager\n * @public\n */\nclass CacheManager {\n constructor(cache) {\n this.version = '2';\n Object.defineProperty(this, _cache, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldBase(this, _cache)[_cache] = cache;\n }\n\n // Cache Management\n // ================\n\n /**\n * Cache the response to a request\n *\n * Unlike `store.push` which has UPSERT\n * semantics, `put` has `replace` semantics similar to\n * the `http` method `PUT`\n *\n * the individually cacheable\n * e resource data it may contain\n * should upsert, but the document data surrounding it should\n * fully replace any existing information\n *\n * Note that in order to support inserting arbitrary data\n * to the cache that did not originate from a request `put`\n * should expect to sometimes encounter a document with only\n * a `content` member and therefor must not assume the existence\n * of `request` and `response` on the document.\n *\n * @method put\n * @param {StructuredDocument} doc\n * @return {ResourceDocument}\n * @public\n */\n put(doc) {\n return _classPrivateFieldBase(this, _cache)[_cache].put(doc);\n }\n\n /**\n * Perform an operation on the cache to update the remote state.\n *\n * Note: currently the only valid operation is a MergeOperation\n * which occurs when a collision of identifiers is detected.\n *\n * @method patch\n * @public\n * @param op the operation to perform\n * @return {void}\n */\n patch(op) {\n _classPrivateFieldBase(this, _cache)[_cache].patch(op);\n }\n\n /**\n * Update resource data with a local mutation. Currently supports operations\n * on relationships only.\n *\n * @method mutate\n * @public\n * @param mutation\n */\n mutate(mutation) {\n _classPrivateFieldBase(this, _cache)[_cache].mutate(mutation);\n }\n\n /**\n * Peek resource data from the Cache.\n *\n * In development, if the return value\n * is JSON the return value\n * will be deep-cloned and deep-frozen\n * to prevent mutation thereby enforcing cache\n * Immutability.\n *\n * This form of peek is useful for implementations\n * that want to feed raw-data from cache to the UI\n * or which want to interact with a blob of data\n * directly from the presentation cache.\n *\n * An implementation might want to do this because\n * de-referencing records which read from their own\n * blob is generally safer because the record does\n * not require retaining connections to the Store\n * and Cache to present data on a per-field basis.\n *\n * This generally takes the place of `getAttr` as\n * an API and may even take the place of `getRelationship`\n * depending on implementation specifics, though this\n * latter usage is less recommended due to the advantages\n * of the Graph handling necessary entanglements and\n * notifications for relational data.\n *\n * @method peek\n * @public\n * @param {StableRecordIdentifier | StableDocumentIdentifier} identifier\n * @return {ResourceDocument | ResourceBlob | null} the known resource data\n */\n\n peek(identifier) {\n return _classPrivateFieldBase(this, _cache)[_cache].peek(identifier);\n }\n\n /**\n * Peek the Cache for the existing request data associated with\n * a cacheable request\n *\n * @method peekRequest\n * @param {StableDocumentIdentifier}\n * @return {StableDocumentIdentifier | null}\n * @public\n */\n peekRequest(identifier) {\n return _classPrivateFieldBase(this, _cache)[_cache].peekRequest(identifier);\n }\n\n /**\n * Push resource data from a remote source into the cache for this identifier\n *\n * @method upsert\n * @public\n * @param identifier\n * @param data\n * @param hasRecord\n * @return {void | string[]} if `hasRecord` is true then calculated key changes should be returned\n */\n upsert(identifier, data, hasRecord) {\n return _classPrivateFieldBase(this, _cache)[_cache].upsert(identifier, data, hasRecord);\n }\n\n // Cache Forking Support\n // =====================\n\n /**\n * Create a fork of the cache from the current state.\n *\n * Applications should typically not call this method themselves,\n * preferring instead to fork at the Store level, which will\n * utilize this method to fork the cache.\n *\n * @method fork\n * @public\n * @return Promise\n */\n fork() {\n return _classPrivateFieldBase(this, _cache)[_cache].fork();\n }\n\n /**\n * Merge a fork back into a parent Cache.\n *\n * Applications should typically not call this method themselves,\n * preferring instead to merge at the Store level, which will\n * utilize this method to merge the caches.\n *\n * @method merge\n * @param {Cache} cache\n * @public\n * @return Promise\n */\n merge(cache) {\n return _classPrivateFieldBase(this, _cache)[_cache].merge(cache);\n }\n\n /**\n * Generate the list of changes applied to all\n * record in the store.\n *\n * Each individual resource or document that has\n * been mutated should be described as an individual\n * `Change` entry in the returned array.\n *\n * A `Change` is described by an object containing up to\n * three properties: (1) the `identifier` of the entity that\n * changed; (2) the `op` code of that change being one of\n * `upsert` or `remove`, and if the op is `upsert` a `patch`\n * containing the data to merge into the cache for the given\n * entity.\n *\n * This `patch` is opaque to the Store but should be understood\n * by the Cache and may expect to be utilized by an Adapter\n * when generating data during a `save` operation.\n *\n * It is generally recommended that the `patch` contain only\n * the updated state, ignoring fields that are unchanged\n *\n * ```ts\n * interface Change {\n * identifier: StableRecordIdentifier | StableDocumentIdentifier;\n * op: 'upsert' | 'remove';\n * patch?: unknown;\n * }\n * ```\n *\n * @method diff\n * @public\n */\n diff() {\n return _classPrivateFieldBase(this, _cache)[_cache].diff();\n }\n\n // SSR Support\n // ===========\n\n /**\n * Serialize the entire contents of the Cache into a Stream\n * which may be fed back into a new instance of the same Cache\n * via `cache.hydrate`.\n *\n * @method dump\n * @return {Promise}\n * @public\n */\n dump() {\n return _classPrivateFieldBase(this, _cache)[_cache].dump();\n }\n\n /**\n * hydrate a Cache from a Stream with content previously serialized\n * from another instance of the same Cache, resolving when hydration\n * is complete.\n *\n * This method should expect to be called both in the context of restoring\n * the Cache during application rehydration after SSR **AND** at unknown\n * times during the lifetime of an already booted application when it is\n * desired to bulk-load additional information into the cache. This latter\n * behavior supports optimizing pre/fetching of data for route transitions\n * via data-only SSR modes.\n *\n * @method hydrate\n * @param {ReadableStream} stream\n * @return {Promise}\n * @public\n */\n hydrate(stream) {\n return _classPrivateFieldBase(this, _cache)[_cache].hydrate(stream);\n }\n\n // Cache\n // =====\n\n // Resource Support\n // ================\n\n /**\n * [LIFECYCLE] Signal to the cache that a new record has been instantiated on the client\n *\n * It returns properties from options that should be set on the record during the create\n * process. This return value behavior is deprecated.\n *\n * @method clientDidCreate\n * @public\n * @param identifier\n * @param options\n */\n clientDidCreate(identifier, options) {\n return _classPrivateFieldBase(this, _cache)[_cache].clientDidCreate(identifier, options);\n }\n\n /**\n * [LIFECYCLE] Signals to the cache that a resource\n * will be part of a save transaction.\n *\n * @method willCommit\n * @public\n * @param identifier\n */\n willCommit(identifier, context) {\n _classPrivateFieldBase(this, _cache)[_cache].willCommit(identifier, context);\n }\n\n /**\n * [LIFECYCLE] Signals to the cache that a resource\n * was successfully updated as part of a save transaction.\n *\n * @method didCommit\n * @public\n * @param identifier\n * @param data\n */\n didCommit(identifier, result) {\n return _classPrivateFieldBase(this, _cache)[_cache].didCommit(identifier, result);\n }\n\n /**\n * [LIFECYCLE] Signals to the cache that a resource\n * was update via a save transaction failed.\n *\n * @method commitWasRejected\n * @public\n * @param identifier\n * @param errors\n */\n commitWasRejected(identifier, errors) {\n _classPrivateFieldBase(this, _cache)[_cache].commitWasRejected(identifier, errors);\n }\n\n /**\n * [LIFECYCLE] Signals to the cache that all data for a resource\n * should be cleared.\n *\n * @method unloadRecord\n * @public\n * @param identifier\n */\n unloadRecord(identifier) {\n _classPrivateFieldBase(this, _cache)[_cache].unloadRecord(identifier);\n }\n\n // Granular Resource Data APIs\n // ===========================\n\n /**\n * Retrieve the data for an attribute from the cache\n *\n * @method getAttr\n * @public\n * @param identifier\n * @param propertyName\n * @return {unknown}\n */\n getAttr(identifier, propertyName) {\n return _classPrivateFieldBase(this, _cache)[_cache].getAttr(identifier, propertyName);\n }\n\n /**\n * Mutate the data for an attribute in the cache\n *\n * @method setAttr\n * @public\n * @param identifier\n * @param propertyName\n * @param value\n */\n setAttr(identifier, propertyName, value) {\n _classPrivateFieldBase(this, _cache)[_cache].setAttr(identifier, propertyName, value);\n }\n\n /**\n * Query the cache for the changed attributes of a resource.\n *\n * @method changedAttrs\n * @public\n * @param identifier\n * @return\n */\n changedAttrs(identifier) {\n return _classPrivateFieldBase(this, _cache)[_cache].changedAttrs(identifier);\n }\n\n /**\n * Query the cache for whether any mutated attributes exist\n *\n * @method hasChangedAttrs\n * @public\n * @param identifier\n * @return {boolean}\n */\n hasChangedAttrs(identifier) {\n return _classPrivateFieldBase(this, _cache)[_cache].hasChangedAttrs(identifier);\n }\n\n /**\n * Tell the cache to discard any uncommitted mutations to attributes\n *\n * @method rollbackAttrs\n * @public\n * @param identifier\n * @return the names of attributes that were restored\n */\n rollbackAttrs(identifier) {\n return _classPrivateFieldBase(this, _cache)[_cache].rollbackAttrs(identifier);\n }\n\n // Relationships\n // =============\n\n /**\n * Query the cache for the changes to relationships of a resource.\n *\n * Returns a map of relationship names to RelationshipDiff objects.\n *\n * ```ts\n * type RelationshipDiff =\n | {\n kind: 'collection';\n remoteState: StableRecordIdentifier[];\n additions: Set;\n removals: Set;\n localState: StableRecordIdentifier[];\n reordered: boolean;\n }\n | {\n kind: 'resource';\n remoteState: StableRecordIdentifier | null;\n localState: StableRecordIdentifier | null;\n };\n ```\n *\n * @method changedRelationships\n * @public\n * @param {StableRecordIdentifier} identifier\n * @return {Map}\n */\n changedRelationships(identifier) {\n return _classPrivateFieldBase(this, _cache)[_cache].changedRelationships(identifier);\n }\n\n /**\n * Query the cache for whether any mutated attributes exist\n *\n * @method hasChangedRelationships\n * @public\n * @param {StableRecordIdentifier} identifier\n * @return {boolean}\n */\n hasChangedRelationships(identifier) {\n return _classPrivateFieldBase(this, _cache)[_cache].hasChangedRelationships(identifier);\n }\n\n /**\n * Tell the cache to discard any uncommitted mutations to relationships.\n *\n * This will also discard the change on any appropriate inverses.\n *\n * This method is a candidate to become a mutation\n *\n * @method rollbackRelationships\n * @public\n * @param {StableRecordIdentifier} identifier\n * @return {string[]} the names of relationships that were restored\n */\n rollbackRelationships(identifier) {\n return _classPrivateFieldBase(this, _cache)[_cache].rollbackRelationships(identifier);\n }\n\n /**\n * Query the cache for the current state of a relationship property\n *\n * @method getRelationship\n * @public\n * @param identifier\n * @param propertyName\n * @return resource relationship object\n */\n getRelationship(identifier, propertyName) {\n return _classPrivateFieldBase(this, _cache)[_cache].getRelationship(identifier, propertyName);\n }\n\n // Resource State\n // ===============\n\n /**\n * Update the cache state for the given resource to be marked as locally deleted,\n * or remove such a mark.\n *\n * @method setIsDeleted\n * @public\n * @param identifier\n * @param isDeleted\n */\n setIsDeleted(identifier, isDeleted) {\n _classPrivateFieldBase(this, _cache)[_cache].setIsDeleted(identifier, isDeleted);\n }\n\n /**\n * Query the cache for any validation errors applicable to the given resource.\n *\n * @method getErrors\n * @public\n * @param identifier\n * @return\n */\n getErrors(identifier) {\n return _classPrivateFieldBase(this, _cache)[_cache].getErrors(identifier);\n }\n\n /**\n * Query the cache for whether a given resource has any available data\n *\n * @method isEmpty\n * @public\n * @param identifier\n * @return {boolean}\n */\n isEmpty(identifier) {\n return _classPrivateFieldBase(this, _cache)[_cache].isEmpty(identifier);\n }\n\n /**\n * Query the cache for whether a given resource was created locally and not\n * yet persisted.\n *\n * @method isNew\n * @public\n * @param identifier\n * @return {boolean}\n */\n isNew(identifier) {\n return _classPrivateFieldBase(this, _cache)[_cache].isNew(identifier);\n }\n\n /**\n * Query the cache for whether a given resource is marked as deleted (but not\n * necessarily persisted yet).\n *\n * @method isDeleted\n * @public\n * @param identifier\n * @return {boolean}\n */\n isDeleted(identifier) {\n return _classPrivateFieldBase(this, _cache)[_cache].isDeleted(identifier);\n }\n\n /**\n * Query the cache for whether a given resource has been deleted and that deletion\n * has also been persisted.\n *\n * @method isDeletionCommitted\n * @public\n * @param identifier\n * @return {boolean}\n */\n isDeletionCommitted(identifier) {\n return _classPrivateFieldBase(this, _cache)[_cache].isDeletionCommitted(identifier);\n }\n}\n\n/**\n * @module @ember-data/store\n */\nlet tokenId = 0;\nconst CacheOperations = new Set(['added', 'removed', 'state', 'updated']);\nfunction isCacheOperationValue(value) {\n return CacheOperations.has(value);\n}\nfunction runLoopIsFlushing() {\n //@ts-expect-error\n return !!_backburner.currentInstance && _backburner._autorun !== true;\n}\nfunction _unsubscribe(tokens, token, cache) {\n const identifier = tokens.get(token);\n if (macroCondition(getOwnConfig().debug.LOG_NOTIFICATIONS)) {\n if (!identifier) {\n // eslint-disable-next-line no-console\n console.log('Passed unknown unsubscribe token to unsubscribe', identifier);\n }\n }\n if (identifier) {\n tokens.delete(token);\n const map = cache.get(identifier);\n map?.delete(token);\n }\n}\n\n/**\n * The NotificationManager provides the ability to subscribe to\n * changes to Cache state.\n *\n * This Feature is what allows EmberData to create subscriptions that\n * work with any framework or change-notification system.\n *\n * @class NotificationManager\n * @public\n */\nclass NotificationManager {\n constructor(store) {\n this.store = store;\n this.isDestroyed = false;\n this._buffered = new Map();\n this._hasFlush = false;\n this._cache = new Map();\n this._tokens = new Map();\n }\n\n /**\n * Subscribe to changes for a given resource identifier, resource addition/removal, or document addition/removal.\n *\n * ```ts\n * export type CacheOperation = 'added' | 'removed' | 'updated' | 'state';\n *\n * export interface NotificationCallback {\n * (identifier: StableRecordIdentifier, notificationType: 'attributes' | 'relationships', key?: string): void;\n * (identifier: StableRecordIdentifier, notificationType: 'errors' | 'meta' | 'identity' | 'state'): void;\n * (identifier: StableRecordIdentifier, notificationType: NotificationType, key?: string): void;\n * }\n * export interface ResourceOperationCallback {\n * // resource updates\n * (identifier: StableRecordIdentifier, notificationType: CacheOperation): void;\n * }\n * export interface DocumentOperationCallback {\n * // document updates\n * (identifier: StableDocumentIdentifier, notificationType: CacheOperation): void;\n * }\n * ```\n *\n * @method subscribe\n * @public\n * @param {StableDocumentIdentifier | StableRecordIdentifier | 'resource' | 'document'} identifier\n * @param {NotificationCallback | ResourceOperationCallback | DocumentOperationCallback} callback\n * @return {UnsubscribeToken} an opaque token to be used with unsubscribe\n */\n\n subscribe(identifier, callback) {\n assert(`Expected to receive a stable Identifier to subscribe to`, identifier === 'resource' || identifier === 'document' || isStableIdentifier(identifier) || isDocumentIdentifier(identifier));\n let map = this._cache.get(identifier);\n if (!map) {\n map = new Map();\n this._cache.set(identifier, map);\n }\n const unsubToken = macroCondition(getOwnConfig().env.DEBUG) ? {\n _tokenRef: tokenId++\n } : {};\n map.set(unsubToken, callback);\n this._tokens.set(unsubToken, identifier);\n return unsubToken;\n }\n\n /**\n * remove a previous subscription\n *\n * @method unsubscribe\n * @public\n * @param {UnsubscribeToken} token\n */\n unsubscribe(token) {\n if (!this.isDestroyed) {\n _unsubscribe(this._tokens, token, this._cache);\n }\n }\n\n /**\n * Custom Caches and Application Code should not call this method directly.\n *\n * @method notify\n * @param identifier\n * @param value\n * @param key\n * @return {Boolean} whether a notification was delivered to any subscribers\n * @private\n */\n\n notify(identifier, value, key) {\n assert(`Notify does not accept a key argument for the namespace '${value}'. Received key '${key || ''}'.`, !key || value === 'attributes' || value === 'relationships');\n if (!isStableIdentifier(identifier) && !isDocumentIdentifier(identifier)) {\n if (macroCondition(getOwnConfig().debug.LOG_NOTIFICATIONS)) {\n // eslint-disable-next-line no-console\n console.log(`Notifying: Expected to receive a stable Identifier to notify '${value}' '${key || ''}' with, but ${String(identifier)} is not in the cache`, identifier);\n }\n return false;\n }\n if (macroCondition(getOwnConfig().debug.LOG_NOTIFICATIONS)) {\n // eslint-disable-next-line no-console\n console.log(`Buffering Notify: ${String(identifier.lid)}\\t${value}\\t${key || ''}`);\n }\n const hasSubscribers = Boolean(this._cache.get(identifier)?.size);\n if (isCacheOperationValue(value) || hasSubscribers) {\n let buffer = this._buffered.get(identifier);\n if (!buffer) {\n buffer = [];\n this._buffered.set(identifier, buffer);\n }\n buffer.push([value, key]);\n this._scheduleNotify();\n }\n return hasSubscribers;\n }\n _onNextFlush(cb) {\n this._onFlushCB = cb;\n }\n _scheduleNotify() {\n const asyncFlush = this.store._enableAsyncFlush;\n if (this._hasFlush) {\n if (asyncFlush !== false && !runLoopIsFlushing()) {\n return;\n }\n }\n if (asyncFlush && !runLoopIsFlushing()) {\n this._hasFlush = true;\n return;\n }\n this._flush();\n }\n _flush() {\n if (this._buffered.size) {\n this._buffered.forEach((states, identifier) => {\n states.forEach(args => {\n // @ts-expect-error\n this._flushNotification(identifier, args[0], args[1]);\n });\n });\n this._buffered = new Map();\n }\n this._hasFlush = false;\n this._onFlushCB?.();\n this._onFlushCB = undefined;\n }\n _flushNotification(identifier, value, key) {\n if (macroCondition(getOwnConfig().debug.LOG_NOTIFICATIONS)) {\n // eslint-disable-next-line no-console\n console.log(`Notifying: ${String(identifier)}\\t${value}\\t${key || ''}`);\n }\n\n // TODO for documents this will need to switch based on Identifier kind\n if (isCacheOperationValue(value)) {\n const callbackMap = this._cache.get(isDocumentIdentifier(identifier) ? 'document' : 'resource');\n if (callbackMap) {\n callbackMap.forEach(cb => {\n cb(identifier, value);\n });\n }\n }\n const callbackMap = this._cache.get(identifier);\n if (!callbackMap || !callbackMap.size) {\n return false;\n }\n callbackMap.forEach(cb => {\n // @ts-expect-error overload doesn't narrow within body\n cb(identifier, value, key);\n });\n return true;\n }\n destroy() {\n this.isDestroyed = true;\n this._tokens.clear();\n this._cache.clear();\n }\n}\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object.keys(descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n if (desc.initializer === void 0) {\n Object.defineProperty(target, property, desc);\n desc = null;\n }\n return desc;\n}\nvar _class;\nconst ARRAY_GETTER_METHODS = new Set([Symbol.iterator, 'concat', 'entries', 'every', 'fill', 'filter', 'find', 'findIndex', 'flat', 'flatMap', 'forEach', 'includes', 'indexOf', 'join', 'keys', 'lastIndexOf', 'map', 'reduce', 'reduceRight', 'slice', 'some', 'values']);\nconst ARRAY_SETTER_METHODS = new Set(['push', 'pop', 'unshift', 'shift', 'splice', 'sort']);\nconst SYNC_PROPS = new Set(['[]', 'length', 'links', 'meta']);\nfunction isArrayGetter(prop) {\n return ARRAY_GETTER_METHODS.has(prop);\n}\nfunction isArraySetter(prop) {\n return ARRAY_SETTER_METHODS.has(prop);\n}\nfunction isSelfProp(self, prop) {\n return prop in self;\n}\nconst ARRAY_SIGNAL = Symbol('#signal');\nconst SOURCE = Symbol('#source');\nconst MUTATE = Symbol('#update');\nconst NOTIFY = Symbol('#notify');\nconst IS_COLLECTION = Symbol.for('Collection');\nfunction notifyArray(arr) {\n addToTransaction(arr[ARRAY_SIGNAL]);\n}\nfunction convertToInt(prop) {\n if (typeof prop === 'symbol') return null;\n const num = Number(prop);\n if (isNaN(num)) return null;\n return num % 1 === 0 ? num : null;\n}\nfunction safeForEach(instance, arr, store, callback, target) {\n if (target === undefined) {\n target = null;\n }\n // clone to prevent mutation\n arr = arr.slice();\n assert('`forEach` expects a function as first argument.', typeof callback === 'function');\n\n // because we retrieveLatest above we need not worry if array is mutated during iteration\n // by unloadRecord/rollbackAttributes\n // push/add/removeObject may still be problematic\n // but this is a more traditionally expected forEach bug.\n const length = arr.length; // we need to access length to ensure we are consumed\n\n for (let index = 0; index < length; index++) {\n callback.call(target, store._instanceCache.getRecord(arr[index]), index, instance);\n }\n return instance;\n}\n\n/**\n A record array is an array that contains records of a certain type (or modelName).\n The record array materializes records as needed when they are retrieved for the first\n time. You should not create record arrays yourself. Instead, an instance of\n `RecordArray` or its subclasses will be returned by your application's store\n in response to queries.\n\n This class should not be imported and instantiated by consuming applications.\n\n @class RecordArray\n @public\n*/\nlet IdentifierArray = (_class = class IdentifierArray {\n [NOTIFY]() {\n notifyArray(this);\n }\n\n /**\n The store that created this record array.\n @property store\n @private\n @type Store\n */\n\n destroy(clear) {\n this.isDestroying = !clear;\n // changing the reference breaks the Proxy\n // this[SOURCE] = [];\n this[SOURCE].length = 0;\n this[NOTIFY]();\n this.isDestroyed = !clear;\n }\n\n // length must be on self for proxied methods to work properly\n get length() {\n return this[SOURCE].length;\n }\n set length(value) {\n this[SOURCE].length = value;\n }\n constructor(options) {\n /**\n The flag to signal a `RecordArray` is currently loading data.\n Example\n ```javascript\n let people = store.peekAll('person');\n people.isUpdating; // false\n people.update();\n people.isUpdating; // true\n ```\n @property isUpdating\n @public\n @type Boolean\n */\n this.isLoaded = true;\n this.isDestroying = false;\n this.isDestroyed = false;\n this._updatingPromise = null;\n this[IS_COLLECTION] = true;\n this[SOURCE] = void 0;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n this.modelName = options.type;\n this.store = options.store;\n this._manager = options.manager;\n this[SOURCE] = options.identifiers;\n this[ARRAY_SIGNAL] = createSignal(this, 'length');\n const store = options.store;\n const boundFns = new Map();\n const _SIGNAL = this[ARRAY_SIGNAL];\n const PrivateState = {\n links: options.links || null,\n meta: options.meta || null\n };\n let transaction = false;\n\n // when a mutation occurs\n // we track all mutations within the call\n // and forward them as one\n\n const proxy = new Proxy(this[SOURCE], {\n get(target, prop, receiver) {\n const index = convertToInt(prop);\n if (_SIGNAL.shouldReset && (index !== null || SYNC_PROPS.has(prop) || isArrayGetter(prop))) {\n options.manager._syncArray(receiver);\n _SIGNAL.t = false;\n _SIGNAL.shouldReset = false;\n }\n if (index !== null) {\n const identifier = target[index];\n if (!transaction) {\n subscribe(_SIGNAL);\n }\n return identifier && store._instanceCache.getRecord(identifier);\n }\n if (prop === 'meta') return subscribe(_SIGNAL), PrivateState.meta;\n if (prop === 'links') return subscribe(_SIGNAL), PrivateState.links;\n if (prop === '[]') return subscribe(_SIGNAL), receiver;\n if (isArrayGetter(prop)) {\n let fn = boundFns.get(prop);\n if (fn === undefined) {\n if (prop === 'forEach') {\n fn = function () {\n subscribe(_SIGNAL);\n transaction = true;\n const result = safeForEach(receiver, target, store, arguments[0], arguments[1]);\n transaction = false;\n return result;\n };\n } else {\n fn = function () {\n subscribe(_SIGNAL);\n // array functions must run through Reflect to work properly\n // binding via other means will not work.\n transaction = true;\n const result = Reflect.apply(target[prop], receiver, arguments);\n transaction = false;\n return result;\n };\n }\n boundFns.set(prop, fn);\n }\n return fn;\n }\n if (isArraySetter(prop)) {\n let fn = boundFns.get(prop);\n if (fn === undefined) {\n fn = function () {\n // array functions must run through Reflect to work properly\n // binding via other means will not work.\n if (!options.allowMutation) {\n assert(`Mutating this array of records via ${String(prop)} is not allowed.`, options.allowMutation);\n return;\n }\n const args = Array.prototype.slice.call(arguments);\n assert(`Cannot start a new array transaction while a previous transaction is underway`, !transaction);\n transaction = true;\n const result = self[MUTATE](target, receiver, prop, args, _SIGNAL);\n transaction = false;\n return result;\n };\n boundFns.set(prop, fn);\n }\n return fn;\n }\n if (isSelfProp(self, prop)) {\n if (prop === NOTIFY || prop === ARRAY_SIGNAL || prop === SOURCE) {\n return self[prop];\n }\n let fn = boundFns.get(prop);\n if (fn) return fn;\n const outcome = self[prop];\n if (typeof outcome === 'function') {\n fn = function () {\n subscribe(_SIGNAL);\n // array functions must run through Reflect to work properly\n // binding via other means will not work.\n return Reflect.apply(outcome, receiver, arguments);\n };\n boundFns.set(prop, fn);\n return fn;\n }\n return subscribe(_SIGNAL), outcome;\n }\n return target[prop];\n },\n // FIXME: Should this get a generic like get above?\n set(target, prop, value, receiver) {\n if (prop === 'length') {\n if (!transaction && value === 0) {\n transaction = true;\n self[MUTATE](target, receiver, 'length 0', [], _SIGNAL);\n transaction = false;\n return true;\n } else if (transaction) {\n return Reflect.set(target, prop, value);\n } else {\n assert(`unexpected length set`);\n }\n }\n if (prop === 'links') {\n PrivateState.links = value || null;\n return true;\n }\n if (prop === 'meta') {\n PrivateState.meta = value || null;\n return true;\n }\n const index = convertToInt(prop);\n\n // we do not allow \"holey\" arrays and so if the index is\n // greater than length then we will disallow setting it.\n // however, there is a special case for \"unshift\" with more than\n // one item being inserted since current items will be moved to the\n // new indices first.\n // we \"loosely\" detect this by just checking whether we are in\n // a transaction.\n if (index === null || index > target.length) {\n if (index !== null && transaction) {\n const identifier = recordIdentifierFor(value);\n assert(`Cannot set index ${index} past the end of the array.`, isStableIdentifier(identifier));\n target[index] = identifier;\n return true;\n } else if (isSelfProp(self, prop)) {\n self[prop] = value;\n return true;\n }\n return false;\n }\n if (!options.allowMutation) {\n assert(`Mutating ${String(prop)} on this RecordArray is not allowed.`, options.allowMutation);\n return false;\n }\n const original = target[index];\n const newIdentifier = extractIdentifierFromRecord$1(value);\n target[index] = newIdentifier;\n assert(`Expected a record`, isStableIdentifier(newIdentifier));\n // We generate \"transactions\" whenever a setter method on the array\n // is called and might bulk update multiple array cells. Fundamentally,\n // all array operations decompose into individual cell replacements.\n // e.g. a push is really a \"replace cell at next index with new value\"\n // or a splice is \"shift all values left/right by X and set out of new\n // bounds cells to undefined\"\n //\n // so, if we are in a transaction, then this is not a user generated change\n // but one generated by a setter method. In this case we want to only apply\n // the change to the target array and not call the MUTATE method.\n // If there is no transaction though, then this means the user themselves has\n // directly changed the value of a specific index and we need to thus generate\n // a mutation for that change.\n // e.g. \"arr.push(newVal)\" is handled by a \"addToRelatedRecords\" mutation within\n // a transaction.\n // while \"arr[arr.length] = newVal;\" is handled by this replace cell code path.\n if (!transaction) {\n self[MUTATE](target, receiver, 'replace cell', [index, original, newIdentifier], _SIGNAL);\n } else {\n target[index] = newIdentifier;\n }\n return true;\n },\n deleteProperty(target, prop) {\n assert(`Deleting keys on managed arrays is disallowed`, transaction);\n if (!transaction) {\n return false;\n }\n return Reflect.deleteProperty(target, prop);\n },\n getPrototypeOf() {\n return IdentifierArray.prototype;\n }\n });\n createArrayTags(proxy, _SIGNAL);\n this[NOTIFY] = this[NOTIFY].bind(proxy);\n return proxy;\n }\n\n /**\n Used to get the latest version of all of the records in this array\n from the adapter.\n Example\n ```javascript\n let people = store.peekAll('person');\n people.isUpdating; // false\n people.update().then(function() {\n people.isUpdating; // false\n });\n people.isUpdating; // true\n ```\n @method update\n @public\n */\n update() {\n if (this.isUpdating) {\n return this._updatingPromise;\n }\n this.isUpdating = true;\n const updatingPromise = this._update();\n void updatingPromise.finally(() => {\n this._updatingPromise = null;\n if (this.isDestroying || this.isDestroyed) {\n return;\n }\n this.isUpdating = false;\n });\n this._updatingPromise = updatingPromise;\n return updatingPromise;\n }\n\n /*\n Update this RecordArray and return a promise which resolves once the update\n is finished.\n */\n _update() {\n assert(`_update cannot be used with this array`, this.modelName);\n return this.store.findAll(this.modelName, {\n reload: true\n });\n }\n\n // TODO deprecate\n /**\n Saves all of the records in the `RecordArray`.\n Example\n ```javascript\n let messages = store.peekAll('message');\n messages.forEach(function(message) {\n message.hasBeenSeen = true;\n });\n messages.save();\n ```\n @method save\n @public\n @return {Promise} promise\n */\n save() {\n const promise = Promise.all(this.map(record => this.store.saveRecord(record))).then(() => this);\n return promise;\n }\n}, _applyDecoratedDescriptor(_class.prototype, \"length\", [compat], Object.getOwnPropertyDescriptor(_class.prototype, \"length\"), _class.prototype), _class); // this will error if someone tries to call\n// A(identifierArray) since it is not configurable\n// which is preferable to the `meta` override we used\n// before which required importing all of Ember\nconst desc = {\n enumerable: true,\n configurable: false,\n get: function () {\n return this;\n }\n};\ncompat(desc);\nObject.defineProperty(IdentifierArray.prototype, '[]', desc);\ndefineSignal(IdentifierArray.prototype, 'isUpdating', false);\nclass Collection extends IdentifierArray {\n constructor(options) {\n super(options);\n this.query = null;\n this.query = options.query || null;\n this.isLoaded = options.isLoaded || false;\n }\n _update() {\n const {\n store,\n query\n } = this;\n\n // TODO save options from initial request?\n assert(`update cannot be used with this array`, this.modelName);\n assert(`update cannot be used with no query`, query);\n const promise = store.query(this.modelName, query, {\n _recordArray: this\n });\n return promise;\n }\n destroy(clear) {\n super.destroy(clear);\n this._manager._managed.delete(this);\n this._manager._pending.delete(this);\n }\n}\n// trick the proxy \"in\" check\nCollection.prototype.query = null;\n\n// Ensure instanceof works correctly\n// Object.setPrototypeOf(IdentifierArray.prototype, Array.prototype);\n\nfunction assertRecordPassedToHasMany(record) {\n assert(`All elements of a hasMany relationship must be instances of Model, you passed $${typeof record}`, function () {\n try {\n recordIdentifierFor(record);\n return true;\n } catch {\n return false;\n }\n }());\n}\nfunction extractIdentifierFromRecord$1(record) {\n if (!record) {\n return null;\n }\n assertRecordPassedToHasMany(record);\n return recordIdentifierFor(record);\n}\n\n/**\n @module @ember-data/store\n*/\nconst FAKE_ARR = {};\nconst SLICE_BATCH_SIZE = 1200;\n/**\n * This is a clever optimization.\n *\n * clever optimizations rarely stand the test of time, so if you're\n * ever curious or think something better is possible please benchmark\n * and discuss. The benchmark for this at the time of writing is in\n * `scripts/benchmark-push.js`\n *\n * This approach turns out to be 150x faster in Chrome and node than\n * simply using push or concat. It's highly susceptible to the specifics\n * of the batch size, and may require tuning.\n *\n * Clever optimizations should always come with a `why`. This optimization\n * exists for two reasons.\n *\n * 1) array.push(...objects) and Array.prototype.push.apply(arr, objects)\n * are susceptible to stack overflows. The size of objects at which this\n * occurs varies by environment, browser, and current stack depth and memory\n * pressure; however, it occurs in all browsers in fairly pristine conditions\n * somewhere around 125k to 200k elements. Since EmberData regularly encounters\n * arrays larger than this in size, we cannot use push.\n *\n * 2) `array.concat` or simply setting the array to a new reference is often an\n * easier approach; however, native Proxy to an array cannot swap it's target array\n * and attempts at juggling multiple array sources have proven to be victim to a number\n * of browser implementation bugs. Should these bugs be addressed then we could\n * simplify to using `concat`, however, do note this is currently 150x faster\n * than concat, and due to the overloaded signature of concat will likely always\n * be faster.\n *\n * Sincerely,\n * - runspired (Chris Thoburn) 08/21/2022\n *\n * @function fastPush\n * @internal\n * @param target the array to push into\n * @param source the items to push into target\n */\nfunction fastPush(target, source) {\n let startLength = 0;\n const newLength = source.length;\n while (newLength - startLength > SLICE_BATCH_SIZE) {\n // eslint-disable-next-line prefer-spread\n target.push.apply(target, source.slice(startLength, startLength + SLICE_BATCH_SIZE));\n startLength += SLICE_BATCH_SIZE;\n }\n // eslint-disable-next-line prefer-spread\n target.push.apply(target, source.slice(startLength));\n}\n/**\n @class RecordArrayManager\n @internal\n*/\nclass RecordArrayManager {\n constructor(options) {\n this.store = options.store;\n this.isDestroying = false;\n this.isDestroyed = false;\n this._live = new Map();\n this._managed = new Set();\n this._pending = new Map();\n this._staged = new Map();\n this._keyedArrays = new Map();\n this._identifiers = new Map();\n this._set = new Map();\n this._visibilitySet = new Map();\n this._subscription = this.store.notifications.subscribe('resource', (identifier, type) => {\n if (type === 'added') {\n this._visibilitySet.set(identifier, true);\n this.identifierAdded(identifier);\n } else if (type === 'removed') {\n this._visibilitySet.set(identifier, false);\n this.identifierRemoved(identifier);\n } else if (type === 'state') {\n this.identifierChanged(identifier);\n }\n });\n }\n _syncArray(array) {\n const pending = this._pending.get(array);\n if (!pending || this.isDestroying || this.isDestroyed) {\n return;\n }\n sync(array, pending, this._set.get(array));\n this._pending.delete(array);\n }\n\n /**\n Get the `RecordArray` for a modelName, which contains all loaded records of\n given modelName.\n @method liveArrayFor\n @internal\n @param {String} modelName\n @return {RecordArray}\n */\n liveArrayFor(type) {\n let array = this._live.get(type);\n const identifiers = [];\n const staged = this._staged.get(type);\n if (staged) {\n staged.forEach((value, key) => {\n if (value === 'add') {\n identifiers.push(key);\n }\n });\n this._staged.delete(type);\n }\n if (!array) {\n array = new IdentifierArray({\n type,\n identifiers,\n store: this.store,\n allowMutation: false,\n manager: this\n });\n this._live.set(type, array);\n this._set.set(array, new Set(identifiers));\n }\n return array;\n }\n createArray(config) {\n const options = {\n type: config.type,\n links: config.doc?.links || null,\n meta: config.doc?.meta || null,\n query: config.query || null,\n identifiers: config.identifiers || [],\n isLoaded: !!config.identifiers?.length,\n allowMutation: false,\n store: this.store,\n manager: this\n };\n const array = new Collection(options);\n this._managed.add(array);\n this._set.set(array, new Set(options.identifiers || []));\n if (config.identifiers) {\n associate(this._identifiers, array, config.identifiers);\n }\n return array;\n }\n dirtyArray(array, delta) {\n if (array === FAKE_ARR) {\n return;\n }\n const tag = array[ARRAY_SIGNAL];\n if (!tag.shouldReset) {\n tag.shouldReset = true;\n addTransactionCB(array[NOTIFY]);\n } else if (delta > 0 && !tag.t) {\n addTransactionCB(array[NOTIFY]);\n }\n }\n _getPendingFor(identifier, includeManaged, isRemove) {\n if (this.isDestroying || this.isDestroyed) {\n return;\n }\n const liveArray = this._live.get(identifier.type);\n const allPending = this._pending;\n const pending = new Map();\n if (includeManaged) {\n const managed = this._identifiers.get(identifier);\n if (managed) {\n managed.forEach(arr => {\n let changes = allPending.get(arr);\n if (!changes) {\n changes = new Map();\n allPending.set(arr, changes);\n }\n pending.set(arr, changes);\n });\n }\n }\n\n // during unloadAll we can ignore removes since we've already\n // cleared the array.\n if (liveArray && liveArray[SOURCE].length === 0 && isRemove) {\n const pendingLive = allPending.get(liveArray);\n if (!pendingLive || pendingLive.size === 0) {\n return pending;\n }\n }\n if (!liveArray) {\n // start building a changeset for when we eventually\n // do have a live array\n let changes = this._staged.get(identifier.type);\n if (!changes) {\n changes = new Map();\n this._staged.set(identifier.type, changes);\n }\n pending.set(FAKE_ARR, changes);\n } else {\n let changes = allPending.get(liveArray);\n if (!changes) {\n changes = new Map();\n allPending.set(liveArray, changes);\n }\n pending.set(liveArray, changes);\n }\n return pending;\n }\n populateManagedArray(array, identifiers, payload) {\n this._pending.delete(array);\n const source = array[SOURCE];\n const old = source.slice();\n source.length = 0;\n fastPush(source, identifiers);\n this._set.set(array, new Set(identifiers));\n notifyArray(array);\n array.meta = payload.meta || null;\n array.links = payload.links || null;\n array.isLoaded = true;\n disassociate(this._identifiers, array, old);\n associate(this._identifiers, array, identifiers);\n }\n identifierAdded(identifier) {\n const changeSets = this._getPendingFor(identifier, false);\n if (changeSets) {\n changeSets.forEach((changes, array) => {\n const existing = changes.get(identifier);\n if (existing === 'del') {\n changes.delete(identifier);\n } else {\n changes.set(identifier, 'add');\n this.dirtyArray(array, changes.size);\n }\n });\n }\n }\n identifierRemoved(identifier) {\n const changeSets = this._getPendingFor(identifier, true, true);\n if (changeSets) {\n changeSets.forEach((changes, array) => {\n const existing = changes.get(identifier);\n if (existing === 'add') {\n changes.delete(identifier);\n } else {\n changes.set(identifier, 'del');\n this.dirtyArray(array, changes.size);\n }\n });\n }\n }\n identifierChanged(identifier) {\n const newState = this.store._instanceCache.recordIsLoaded(identifier, true);\n\n // if the change matches the most recent direct added/removed\n // state, then we can ignore it\n if (this._visibilitySet.get(identifier) === newState) {\n return;\n }\n if (newState) {\n this.identifierAdded(identifier);\n } else {\n this.identifierRemoved(identifier);\n }\n }\n clear(isClear = true) {\n this._live.forEach(array => array.destroy(isClear));\n this._managed.forEach(array => array.destroy(isClear));\n this._managed.clear();\n this._identifiers.clear();\n this._pending.clear();\n this._set.forEach(set => set.clear());\n this._visibilitySet.clear();\n }\n destroy() {\n this.isDestroying = true;\n this.clear(false);\n this._live.clear();\n this.isDestroyed = true;\n this.store.notifications.unsubscribe(this._subscription);\n }\n}\nfunction associate(ArraysCache, array, identifiers) {\n for (let i = 0; i < identifiers.length; i++) {\n const identifier = identifiers[i];\n let cache = ArraysCache.get(identifier);\n if (!cache) {\n cache = new Set();\n ArraysCache.set(identifier, cache);\n }\n cache.add(array);\n }\n}\nfunction disassociate(ArraysCache, array, identifiers) {\n for (let i = 0; i < identifiers.length; i++) {\n disassociateIdentifier(ArraysCache, array, identifiers[i]);\n }\n}\nfunction disassociateIdentifier(ArraysCache, array, identifier) {\n const cache = ArraysCache.get(identifier);\n if (cache) {\n cache.delete(array);\n }\n}\nfunction sync(array, changes, arraySet) {\n const state = array[SOURCE];\n const adds = [];\n const removes = [];\n changes.forEach((value, key) => {\n if (value === 'add') {\n // likely we want to keep a Set along-side\n if (arraySet.has(key)) {\n return;\n }\n adds.push(key);\n arraySet.add(key);\n } else {\n if (arraySet.has(key)) {\n removes.push(key);\n arraySet.delete(key);\n }\n }\n });\n if (removes.length) {\n if (removes.length === state.length) {\n state.length = 0;\n // changing the reference breaks the Proxy\n // state = array[SOURCE] = [];\n } else {\n removes.forEach(i => {\n const index = state.indexOf(i);\n if (index !== -1) {\n state.splice(index, 1);\n arraySet.delete(i);\n }\n });\n }\n }\n if (adds.length) {\n fastPush(state, adds);\n // changing the reference breaks the Proxy\n // else we could do this\n /*\n if (state.length === 0) {\n array[SOURCE] = adds;\n } else {\n array[SOURCE] = state.concat(adds);\n }\n */\n }\n}\n\n/**\n * @module @ember-data/store\n */\nconst Touching = Symbol('touching');\nconst RequestPromise = Symbol('promise');\nconst EMPTY_ARR = macroCondition(getOwnConfig().env.DEBUG) ? Object.freeze([]) : [];\nfunction hasRecordIdentifier(op) {\n return 'recordIdentifier' in op;\n}\n\n/**\n * The RequestStateService is used to track the state of requests\n * for fetching or updating known resource identifies that are inflight.\n *\n * @class RequestStateService\n * @public\n */\nclass RequestStateService {\n constructor(store) {\n this._pending = new Map();\n this._done = new Map();\n this._subscriptions = new Map();\n this._toFlush = [];\n this._store = void 0;\n this._store = store;\n }\n _clearEntries(identifier) {\n this._done.delete(identifier);\n }\n _enqueue(promise, queryRequest) {\n const query = queryRequest.data[0];\n if (hasRecordIdentifier(query)) {\n const identifier = query.recordIdentifier;\n const type = query.op === 'saveRecord' ? 'mutation' : 'query';\n if (!this._pending.has(identifier)) {\n this._pending.set(identifier, []);\n }\n const request = {\n state: 'pending',\n request: queryRequest,\n type\n };\n request[Touching] = [query.recordIdentifier];\n request[RequestPromise] = promise;\n this._pending.get(identifier).push(request);\n this._triggerSubscriptions(request);\n return promise.then(result => {\n this._dequeue(identifier, request);\n const finalizedRequest = {\n state: 'fulfilled',\n request: queryRequest,\n type,\n response: {\n data: result\n }\n };\n finalizedRequest[Touching] = request[Touching];\n this._addDone(finalizedRequest);\n this._triggerSubscriptions(finalizedRequest);\n return result;\n }, error => {\n this._dequeue(identifier, request);\n const finalizedRequest = {\n state: 'rejected',\n request: queryRequest,\n type,\n response: {\n data: error\n }\n };\n finalizedRequest[Touching] = request[Touching];\n this._addDone(finalizedRequest);\n this._triggerSubscriptions(finalizedRequest);\n throw error;\n });\n }\n assert(`Expected a well formed query`);\n }\n _triggerSubscriptions(req) {\n if (req.state === 'pending') {\n this._flushRequest(req);\n return;\n }\n this._toFlush.push(req);\n if (this._toFlush.length === 1) {\n this._store.notifications._onNextFlush(() => {\n this._flush();\n });\n }\n }\n _flush() {\n this._toFlush.forEach(req => {\n this._flushRequest(req);\n });\n this._toFlush = [];\n }\n _flushRequest(req) {\n req[Touching].forEach(identifier => {\n const subscriptions = this._subscriptions.get(identifier);\n if (subscriptions) {\n subscriptions.forEach(callback => callback(req));\n }\n });\n }\n _dequeue(identifier, request) {\n const pending = this._pending.get(identifier);\n this._pending.set(identifier, pending.filter(req => req !== request));\n }\n _addDone(request) {\n request[Touching].forEach(identifier => {\n // TODO add support for multiple\n const requestDataOp = request.request.data[0].op;\n let requests = this._done.get(identifier);\n if (requests) {\n requests = requests.filter(req => {\n // TODO add support for multiple\n let data;\n if (Array.isArray(req.request.data)) {\n data = req.request.data[0];\n } else {\n data = req.request.data;\n }\n return data.op !== requestDataOp;\n });\n }\n requests = requests || [];\n requests.push(request);\n this._done.set(identifier, requests);\n });\n }\n\n /**\n * Subscribe to requests for a given resource identity.\n *\n * The callback will receive the current state of the request.\n *\n * ```ts\n * interface RequestState {\n * state: 'pending' | 'fulfilled' | 'rejected';\n * type: 'query' | 'mutation';\n * request: Request;\n * response?: { data: unknown };\n * }\n * ```\n *\n * Note: It should be considered dangerous to use this API for more than simple\n * state derivation or debugging. The `request` and `response` properties are poorly\n * spec'd and may change unexpectedly when shifting what Handlers are in use or how\n * requests are issued from the Store.\n *\n * We expect to revisit this API in the near future as we continue to refine the\n * RequestManager ergonomics, as a simpler but more powerful direct integration\n * with the RequestManager for these purposes is likely to be a better long-term\n * design.\n *\n * @method subscribeForRecord\n * @public\n * @param {StableRecordIdentifier} identifier\n * @param {(state: RequestState) => void} callback\n */\n subscribeForRecord(identifier, callback) {\n let subscriptions = this._subscriptions.get(identifier);\n if (!subscriptions) {\n subscriptions = [];\n this._subscriptions.set(identifier, subscriptions);\n }\n subscriptions.push(callback);\n }\n\n /**\n * Retrieve all active requests for a given resource identity.\n *\n * @method getPendingRequestsForRecord\n * @public\n * @param {StableRecordIdentifier} identifier\n * @return {RequestState[]} an array of request states for any pending requests for the given identifier\n */\n getPendingRequestsForRecord(identifier) {\n return this._pending.get(identifier) || EMPTY_ARR;\n }\n\n /**\n * Retrieve the last completed request for a given resource identity.\n *\n * @method getLastRequestForRecord\n * @public\n * @param {StableRecordIdentifier} identifier\n * @return {RequestState | null} the state of the most recent request for the given identifier\n */\n getLastRequestForRecord(identifier) {\n const requests = this._done.get(identifier);\n if (requests) {\n return requests[requests.length - 1];\n }\n return null;\n }\n}\nfunction isNonEmptyString(str) {\n return Boolean(str && typeof str === 'string');\n}\nfunction constructResource(type, id, lid) {\n if (typeof type === 'object' && type !== null) {\n const resource = type;\n if (isStableIdentifier(resource)) {\n return resource;\n }\n if ('id' in resource) {\n resource.id = coerceId(resource.id);\n }\n assert('Expected either id or lid to be a valid string', 'id' in resource && isNonEmptyString(resource.id) || isNonEmptyString(resource.lid));\n assert('if id is present, the type must be a string', !('id' in resource) || typeof resource.type === 'string');\n return resource;\n } else {\n const trueId = coerceId(id);\n if (!isNonEmptyString(trueId)) {\n if (isNonEmptyString(lid)) {\n return {\n lid\n };\n }\n throw new Error('Expected either id or lid to be a valid string');\n }\n assert('type must be a string', typeof type === 'string');\n if (isNonEmptyString(lid)) {\n return {\n type,\n id: trueId,\n lid\n };\n }\n return {\n type,\n id: trueId\n };\n }\n}\n\n/**\n @module @ember-data/store\n */\n// this import location is deprecated but breaks in 4.8 and older\n\n/**\n * A Store coordinates interaction between your application, a [Cache](https://api.emberjs.com/ember-data/release/classes/%3CInterface%3E%20Cache),\n * and sources of data (such as your API or a local persistence layer)\n * accessed via a [RequestManager](https://github.com/emberjs/data/tree/main/packages/request).\n *\n * ```app/services/store.js\n * import Store from '@ember-data/store';\n *\n * export default class extends Store {}\n * ```\n *\n * Most Ember applications will only have a single `Store` configured as a Service\n * in this manner. However, setting up multiple stores is possible, including using\n * each as a unique service.\n *\n\n @class Store\n @public\n*/\n\n// @ts-expect-error\n\nclass Store extends EmberObject {\n /**\n * Provides access to the NotificationManager associated\n * with this Store instance.\n *\n * The NotificationManager can be used to subscribe to\n * changes to the cache.\n *\n * @property {NotificationManager} notifications\n * @public\n */\n\n /**\n * Provides access to the SchemaService instance\n * for this Store instance.\n *\n * The SchemaService can be used to query for\n * information about the schema of a resource.\n *\n * @property {SchemaService} schema\n * @public\n */\n get schema() {\n return this.getSchemaDefinitionService();\n }\n\n /**\n * Provides access to the IdentifierCache instance\n * for this store.\n *\n * The IdentifierCache can be used to generate or\n * retrieve a stable unique identifier for any resource.\n *\n * @property {IdentifierCache} identifierCache\n * @public\n */\n\n /**\n * Provides access to the requestManager instance associated\n * with this Store instance.\n *\n * When using `ember-data` this property is automatically\n * set to an instance of `RequestManager`. When not using `ember-data`\n * you must configure this property yourself, either by declaring\n * it as a service or by initializing it.\n *\n * ```ts\n * import Store, { CacheHandler } from '@ember-data/store';\n * import RequestManager from '@ember-data/request';\n * import Fetch from '@ember/data/request/fetch';\n *\n * class extends Store {\n * constructor() {\n * super(...arguments);\n * this.requestManager = new RequestManager();\n * this.requestManager.use([Fetch]);\n * this.requestManager.useCache(CacheHandler);\n * }\n * }\n * ```\n *\n * @public\n * @property {RequestManager} requestManager\n */\n\n /**\n * A Property which an App may set to provide a Lifetimes Service\n * to control when a cached request becomes stale.\n *\n * Note, when defined, these methods will only be invoked if a\n * cache key exists for the request, either because the request\n * contains `cacheOptions.key` or because the [IdentifierCache](/ember-data/release/classes/IdentifierCache)\n * was able to generate a key for the request using the configured\n * [generation method](/ember-data/release/functions/@ember-data%2Fstore/setIdentifierGenerationMethod).\n *\n * `isSoftExpired` will only be invoked if `isHardExpired` returns `false`.\n *\n * ```ts\n * store.lifetimes = {\n * // make the request and ignore the current cache state\n * isHardExpired(identifier: StableDocumentIdentifier): boolean {\n * return false;\n * }\n *\n * // make the request in the background if true, return cache state\n * isSoftExpired(identifier: StableDocumentIdentifier): boolean {\n * return false;\n * }\n * }\n * ```\n *\n * @public\n * @property {LivetimesService|undefined} lifetimes\n */\n\n // Private\n\n // DEBUG-only properties\n\n get isDestroying() {\n return this._isDestroying;\n }\n set isDestroying(value) {\n this._isDestroying = value;\n }\n get isDestroyed() {\n return this._isDestroyed;\n }\n set isDestroyed(value) {\n this._isDestroyed = value;\n }\n\n /**\n @method init\n @private\n */\n constructor(createArgs) {\n // @ts-expect-error ember-source types improperly expect createArgs to be `Owner`\n super(createArgs);\n Object.assign(this, createArgs);\n this.identifierCache = new IdentifierCache();\n this.notifications = new NotificationManager(this);\n\n // private but maybe useful to be here, somewhat intimate\n this.recordArrayManager = new RecordArrayManager({\n store: this\n });\n\n // private\n this._requestCache = new RequestStateService(this);\n this._instanceCache = new InstanceCache(this);\n this._documentCache = new Map();\n this.isDestroying = false;\n this.isDestroyed = false;\n }\n _run(cb) {\n assert(`EmberData should never encounter a nested run`, !this._cbs);\n const _cbs = this._cbs = {};\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n try {\n cb();\n if (_cbs.coalesce) {\n _cbs.coalesce();\n }\n if (_cbs.sync) {\n _cbs.sync();\n }\n if (_cbs.notify) {\n _cbs.notify();\n }\n } finally {\n this._cbs = null;\n }\n } else {\n cb();\n if (_cbs.coalesce) {\n _cbs.coalesce();\n }\n if (_cbs.sync) {\n _cbs.sync();\n }\n if (_cbs.notify) {\n _cbs.notify();\n }\n this._cbs = null;\n }\n }\n _join(cb) {\n if (this._cbs) {\n cb();\n } else {\n this._run(cb);\n }\n }\n _schedule(name, cb) {\n assert(`EmberData expects to schedule only when there is an active run`, !!this._cbs);\n assert(`EmberData expects only one flush per queue name, cannot schedule ${name}`, !this._cbs[name]);\n this._cbs[name] = cb;\n }\n\n /**\n * Retrieve the RequestStateService instance\n * associated with this Store.\n *\n * This can be used to query the status of requests\n * that have been initiated for a given identifier.\n *\n * @method getRequestStateService\n * @return {RequestStateService}\n * @public\n */\n getRequestStateService() {\n return this._requestCache;\n }\n _getAllPending() {\n if (macroCondition(getOwnConfig().env.TESTING)) {\n const all = [];\n const pending = this._requestCache._pending;\n pending.forEach(requests => {\n all.push(...requests.map(v => v[RequestPromise]));\n });\n this.requestManager._pending.forEach(v => all.push(v));\n const promise = Promise.allSettled(all);\n promise.length = all.length;\n return promise;\n }\n }\n\n /**\n * Issue a request via the configured RequestManager,\n * inserting the response into the cache and handing\n * back a Future which resolves to a ResponseDocument\n *\n * ## Cache Keys\n *\n * Only GET requests with a url or requests with an explicit\n * cache key (`cacheOptions.key`) will have the request result\n * and document cached.\n *\n * The cache key used is `requestConfig.cacheOptions.key`\n * if present, falling back to `requestconfig.url`.\n *\n * Params are not serialized as part of the cache-key, so\n * either ensure they are already in the url or utilize\n * `requestConfig.cacheOptions.key`. For queries issued\n * via the `POST` method `requestConfig.cacheOptions.key`\n * MUST be supplied for the document to be cached.\n *\n * ## Requesting Without a Cache Key\n *\n * Resource data within the request is always updated in the cache,\n * regardless of whether a cache key is present for the request.\n *\n * ## Fulfilling From Cache\n *\n * When a cache-key is determined, the request may fulfill\n * from cache provided the cache is not stale.\n *\n * Cache staleness is determined by the configured LifetimesService\n * with priority given to the `cacheOptions.reload` and\n * `cacheOptions.backgroundReload` on the request if present.\n *\n * If the cache data has soft expired or the request asks for a background\n * reload, the request will fulfill from cache if possible and\n * make a non-blocking request in the background to update the cache.\n *\n * If the cache data has hard expired or the request asks for a reload,\n * the request will not fulfill from cache and will make a blocking\n * request to update the cache.\n *\n * ## The Response\n *\n * The primary difference between `requestManager.request` and `store.request`\n * is that `store.request` will attempt to hydrate the response content into\n * a response Document containing RecordInstances.\n *\n * @method request\n * @param {StoreRequestInput} requestConfig\n * @return {Future}\n * @public\n */\n request(requestConfig) {\n // we lazily set the cache handler when we issue the first request\n // because constructor doesn't allow for this to run after\n // the user has had the chance to set the prop.\n const opts = {\n store: this,\n [EnableHydration]: true\n };\n if (requestConfig.records) {\n const identifierCache = this.identifierCache;\n opts.records = requestConfig.records.map(r => identifierCache.getOrCreateRecordIdentifier(r));\n }\n if (macroCondition(getOwnConfig().env.TESTING)) {\n if (this.DISABLE_WAITER) {\n opts.disableTestWaiter = typeof requestConfig.disableTestWaiter === 'boolean' ? requestConfig.disableTestWaiter : true;\n }\n }\n if (macroCondition(getOwnConfig().debug.LOG_REQUESTS)) {\n let options;\n try {\n options = JSON.parse(JSON.stringify(requestConfig));\n } catch {\n options = requestConfig;\n }\n // eslint-disable-next-line no-console\n console.log(`request: [[START]] ${requestConfig.op && !requestConfig.url ? '(LEGACY) ' : ''}${requestConfig.op || ''} ${requestConfig.url || ''} ${requestConfig.method || ''}`, options);\n }\n const future = this.requestManager.request(Object.assign(requestConfig, opts));\n future.onFinalize(() => {\n if (macroCondition(getOwnConfig().debug.LOG_REQUESTS)) {\n // eslint-disable-next-line no-console\n console.log(`request: [[FINALIZE]] ${requestConfig.op && !requestConfig.url ? '(LEGACY) ' : ''}${requestConfig.op || ''} ${requestConfig.url || ''} ${requestConfig.method || ''}`);\n }\n // skip flush for legacy belongsTo\n if (requestConfig.op === 'findBelongsTo' && !requestConfig.url) {\n return;\n }\n this.notifications._flush();\n });\n return future;\n }\n\n /**\n * A hook which an app or addon may implement. Called when\n * the Store is attempting to create a Record Instance for\n * a resource.\n *\n * This hook can be used to select or instantiate any desired\n * mechanism of presentating cache data to the ui for access\n * mutation, and interaction.\n *\n * @method instantiateRecord (hook)\n * @param identifier\n * @param createRecordArgs\n * @param recordDataFor deprecated use this.cache\n * @param notificationManager deprecated use this.notifications\n * @return A record instance\n * @public\n */\n\n /**\n * A hook which an app or addon may implement. Called when\n * the Store is destroying a Record Instance. This hook should\n * be used to teardown any custom record instances instantiated\n * with `instantiateRecord`.\n *\n * @method teardownRecord (hook)\n * @public\n * @param record\n */\n\n /**\n * Provides access to the SchemaDefinitionService instance\n * for this Store instance.\n *\n * The SchemaDefinitionService can be used to query for\n * information about the schema of a resource.\n *\n * @method getSchemaDefinitionService\n * @public\n */\n getSchemaDefinitionService() {\n assert(`You must registerSchemaDefinitionService with the store to use custom model classes`, this._schema);\n return this._schema;\n }\n\n /**\n * DEPRECATED - Use `registerSchema` instead.\n *\n * Allows an app to register a custom SchemaService\n * for use when information about a resource's schema needs\n * to be queried.\n *\n * This method can only be called more than once, but only one schema\n * definition service may exist. Therefore if you wish to chain services\n * you must lookup the existing service and close over it with the new\n * service by accessing `store.schema` prior to registration.\n *\n * For Example:\n *\n * ```ts\n * import Store from '@ember-data/store';\n *\n * class SchemaDelegator {\n * constructor(schema) {\n * this._schema = schema;\n * }\n *\n * doesTypeExist(type: string): boolean {\n * if (AbstractSchemas.has(type)) {\n * return true;\n * }\n * return this._schema.doesTypeExist(type);\n * }\n *\n * attributesDefinitionFor(identifier: RecordIdentifier | { type: string }): AttributesSchema {\n * return this._schema.attributesDefinitionFor(identifier);\n * }\n *\n * relationshipsDefinitionFor(identifier: RecordIdentifier | { type: string }): RelationshipsSchema {\n * const schema = AbstractSchemas.get(identifier.type);\n * return schema || this._schema.relationshipsDefinitionFor(identifier);\n * }\n * }\n *\n * export default class extends Store {\n * constructor(...args) {\n * super(...args);\n *\n * const schema = this.schema;\n * this.registerSchemaDefinitionService(new SchemaDelegator(schema));\n * }\n * }\n * ```\n *\n * @method registerSchemaDefinitionService\n * @param {SchemaService} schema\n * @deprecated\n * @public\n */\n registerSchemaDefinitionService(schema) {\n this._schema = schema;\n }\n /**\n * Allows an app to register a custom SchemaService\n * for use when information about a resource's schema needs\n * to be queried.\n *\n * This method can only be called more than once, but only one schema\n * definition service may exist. Therefore if you wish to chain services\n * you must lookup the existing service and close over it with the new\n * service by accessing `store.schema` prior to registration.\n *\n * For Example:\n *\n * ```ts\n * import Store from '@ember-data/store';\n *\n * class SchemaDelegator {\n * constructor(schema) {\n * this._schema = schema;\n * }\n *\n * doesTypeExist(type: string): boolean {\n * if (AbstractSchemas.has(type)) {\n * return true;\n * }\n * return this._schema.doesTypeExist(type);\n * }\n *\n * attributesDefinitionFor(identifier: RecordIdentifier | { type: string }): AttributesSchema {\n * return this._schema.attributesDefinitionFor(identifier);\n * }\n *\n * relationshipsDefinitionFor(identifier: RecordIdentifier | { type: string }): RelationshipsSchema {\n * const schema = AbstractSchemas.get(identifier.type);\n * return schema || this._schema.relationshipsDefinitionFor(identifier);\n * }\n * }\n *\n * export default class extends Store {\n * constructor(...args) {\n * super(...args);\n *\n * const schema = this.schema;\n * this.registerSchema(new SchemaDelegator(schema));\n * }\n * }\n * ```\n *\n * @method registerSchema\n * @param {SchemaService} schema\n * @public\n */\n registerSchema(schema) {\n this._schema = schema;\n }\n\n /**\n Returns the schema for a particular `modelName`.\n When used with Model from @ember-data/model the return is the model class,\n but this is not guaranteed.\n If looking to query attribute or relationship information it is\n recommended to use `getSchemaDefinitionService` instead. This method\n should be considered legacy and exists primarily to continue to support\n Adapter/Serializer APIs which expect it's return value in their method\n signatures.\n The class of a model might be useful if you want to get a list of all the\n relationship names of the model, see\n [`relationshipNames`](/ember-data/release/classes/Model?anchor=relationshipNames)\n for example.\n @method modelFor\n @public\n @param {String} type\n @return {ModelSchema}\n */\n // TODO @deprecate in favor of schema APIs, requires adapter/serializer overhaul or replacement\n\n modelFor(type) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertDestroyedStoreOnly(this, 'modelFor');\n }\n assert(`You need to pass to the store's modelFor method`, typeof type === 'string' && type.length);\n assert(`No model was found for '${type}' and no schema handles the type`, this.getSchemaDefinitionService().doesTypeExist(type));\n return getShimClass(this, type);\n }\n\n /**\n Create a new record in the current store. The properties passed\n to this method are set on the newly created record.\n To create a new instance of a `Post`:\n ```js\n store.createRecord('post', {\n title: 'Ember is awesome!'\n });\n ```\n To create a new instance of a `Post` that has a relationship with a `User` record:\n ```js\n let user = this.store.peekRecord('user', 1);\n store.createRecord('post', {\n title: 'Ember is awesome!',\n user: user\n });\n ```\n @method createRecord\n @public\n @param {String} modelName\n @param {Object} inputProperties a hash of properties to set on the\n newly created record.\n @return {Model} record\n */\n createRecord(modelName, inputProperties) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertDestroyingStore(this, 'createRecord');\n }\n assert(`You need to pass a model name to the store's createRecord method`, modelName);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n\n // This is wrapped in a `run.join` so that in test environments users do not need to manually wrap\n // calls to `createRecord`. The run loop usage here is because we batch the joining and updating\n // of record-arrays via ember's run loop, not our own.\n //\n // to remove this, we would need to move to a new `async` API.\n let record;\n this._join(() => {\n const normalizedModelName = normalizeModelName(modelName);\n const properties = {\n ...inputProperties\n };\n\n // If the passed properties do not include a primary key,\n // give the adapter an opportunity to generate one. Typically,\n // client-side ID generators will use something like uuid.js\n // to avoid conflicts.\n\n if (properties.id === null || properties.id === undefined) {\n const adapter = this.adapterFor?.(modelName, true);\n if (adapter && adapter.generateIdForRecord) {\n properties.id = adapter.generateIdForRecord(this, modelName, properties);\n } else {\n properties.id = null;\n }\n }\n\n // Coerce ID to a string\n properties.id = coerceId(properties.id);\n const resource = {\n type: normalizedModelName,\n id: properties.id\n };\n if (resource.id) {\n const identifier = this.identifierCache.peekRecordIdentifier(resource);\n assert(`The id ${String(properties.id)} has already been used with another '${normalizedModelName}' record.`, !identifier);\n }\n const identifier = this.identifierCache.createIdentifierForNewRecord(resource);\n const cache = this.cache;\n const createOptions = normalizeProperties(this, identifier, properties);\n const resultProps = cache.clientDidCreate(identifier, createOptions);\n record = this._instanceCache.getRecord(identifier, resultProps);\n });\n return record;\n }\n\n /**\n For symmetry, a record can be deleted via the store.\n Example\n ```javascript\n let post = store.createRecord('post', {\n title: 'Ember is awesome!'\n });\n store.deleteRecord(post);\n ```\n @method deleteRecord\n @public\n @param {Model} record\n */\n deleteRecord(record) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertDestroyingStore(this, 'deleteRecord');\n }\n const identifier = peekRecordIdentifier(record);\n const cache = this.cache;\n assert(`expected the record to be connected to a cache`, identifier);\n this._join(() => {\n cache.setIsDeleted(identifier, true);\n if (cache.isNew(identifier)) {\n this._instanceCache.unloadRecord(identifier);\n }\n });\n }\n\n /**\n For symmetry, a record can be unloaded via the store.\n This will cause the record to be destroyed and freed up for garbage collection.\n Example\n ```javascript\n store.findRecord('post', 1).then(function(post) {\n store.unloadRecord(post);\n });\n ```\n @method unloadRecord\n @public\n @param {Model} record\n */\n unloadRecord(record) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertDestroyingStore(this, 'unloadRecord');\n }\n const identifier = peekRecordIdentifier(record);\n if (identifier) {\n this._instanceCache.unloadRecord(identifier);\n }\n }\n\n /**\n This method returns a record for a given identifier or type and id combination.\n The `findRecord` method will always resolve its promise with the same\n object for a given identifier or type and `id`.\n The `findRecord` method will always return a **promise** that will be\n resolved with the record.\n **Example 1**\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n export default class PostRoute extends Route {\n model({ post_id }) {\n return this.store.findRecord('post', post_id);\n }\n }\n ```\n **Example 2**\n `findRecord` can be called with a single identifier argument instead of the combination\n of `type` (modelName) and `id` as separate arguments. You may recognize this combo as\n the typical pairing from [JSON:API](https://jsonapi.org/format/#document-resource-object-identification)\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n export default class PostRoute extends Route {\n model({ post_id: id }) {\n return this.store.findRecord({ type: 'post', id });\n }\n }\n ```\n **Example 3**\n If you have previously received an lid via an Identifier for this record, and the record\n has already been assigned an id, you can find the record again using just the lid.\n ```app/routes/post.js\n store.findRecord({ lid });\n ```\n If the record is not yet available, the store will ask the adapter's `findRecord`\n method to retrieve and supply the necessary data. If the record is already present\n in the store, it depends on the reload behavior _when_ the returned promise\n resolves.\n ### Preloading\n You can optionally `preload` specific attributes and relationships that you know of\n by passing them via the passed `options`.\n For example, if your Ember route looks like `/posts/1/comments/2` and your API route\n for the comment also looks like `/posts/1/comments/2` if you want to fetch the comment\n without also fetching the post you can pass in the post to the `findRecord` call:\n ```app/routes/post-comments.js\n import Route from '@ember/routing/route';\n export default class PostRoute extends Route {\n model({ post_id, comment_id: id }) {\n return this.store.findRecord({ type: 'comment', id, { preload: { post: post_id }} });\n }\n }\n ```\n In your adapter you can then access this id without triggering a network request via the\n snapshot:\n ```app/adapters/application.js\n export default class Adapter {\n findRecord(store, schema, id, snapshot) {\n let type = schema.modelName;\n if (type === 'comment')\n let postId = snapshot.belongsTo('post', { id: true });\n return fetch(`./posts/${postId}/comments/${id}`)\n .then(response => response.json())\n }\n }\n static create() {\n return new this();\n }\n }\n ```\n This could also be achieved by supplying the post id to the adapter via the adapterOptions\n property on the options hash.\n ```app/routes/post-comments.js\n import Route from '@ember/routing/route';\n export default class PostRoute extends Route {\n model({ post_id, comment_id: id }) {\n return this.store.findRecord({ type: 'comment', id, { adapterOptions: { post: post_id }} });\n }\n }\n ```\n ```app/adapters/application.js\n export default class Adapter {\n findRecord(store, schema, id, snapshot) {\n let type = schema.modelName;\n if (type === 'comment')\n let postId = snapshot.adapterOptions.post;\n return fetch(`./posts/${postId}/comments/${id}`)\n .then(response => response.json())\n }\n }\n static create() {\n return new this();\n }\n }\n ```\n If you have access to the post model you can also pass the model itself to preload:\n ```javascript\n let post = await store.findRecord('post', 1);\n let comment = await store.findRecord('comment', 2, { post: myPostModel });\n ```\n ### Reloading\n The reload behavior is configured either via the passed `options` hash or\n the result of the adapter's `shouldReloadRecord`.\n If `{ reload: true }` is passed or `adapter.shouldReloadRecord` evaluates\n to `true`, then the returned promise resolves once the adapter returns\n data, regardless if the requested record is already in the store:\n ```js\n store.push({\n data: {\n id: 1,\n type: 'post',\n revision: 1\n }\n });\n // adapter#findRecord resolves with\n // [\n // {\n // id: 1,\n // type: 'post',\n // revision: 2\n // }\n // ]\n store.findRecord('post', 1, { reload: true }).then(function(post) {\n post.revision; // 2\n });\n ```\n If no reload is indicated via the above mentioned ways, then the promise\n immediately resolves with the cached version in the store.\n ### Background Reloading\n Optionally, if `adapter.shouldBackgroundReloadRecord` evaluates to `true`,\n then a background reload is started, which updates the records' data, once\n it is available:\n ```js\n // app/adapters/post.js\n import ApplicationAdapter from \"./application\";\n export default class PostAdapter extends ApplicationAdapter {\n shouldReloadRecord(store, snapshot) {\n return false;\n },\n shouldBackgroundReloadRecord(store, snapshot) {\n return true;\n }\n });\n // ...\n store.push({\n data: {\n id: 1,\n type: 'post',\n revision: 1\n }\n });\n let blogPost = store.findRecord('post', 1).then(function(post) {\n post.revision; // 1\n });\n // later, once adapter#findRecord resolved with\n // [\n // {\n // id: 1,\n // type: 'post',\n // revision: 2\n // }\n // ]\n blogPost.revision; // 2\n ```\n If you would like to force or prevent background reloading, you can set a\n boolean value for `backgroundReload` in the options object for\n `findRecord`.\n ```app/routes/post/edit.js\n import Route from '@ember/routing/route';\n export default class PostEditRoute extends Route {\n model(params) {\n return this.store.findRecord('post', params.post_id, { backgroundReload: false });\n }\n }\n ```\n If you pass an object on the `adapterOptions` property of the options\n argument it will be passed to your adapter via the snapshot\n ```app/routes/post/edit.js\n import Route from '@ember/routing/route';\n export default class PostEditRoute extends Route {\n model(params) {\n return this.store.findRecord('post', params.post_id, {\n adapterOptions: { subscribe: false }\n });\n }\n }\n ```\n ```app/adapters/post.js\n import MyCustomAdapter from './custom-adapter';\n export default class PostAdapter extends MyCustomAdapter {\n findRecord(store, type, id, snapshot) {\n if (snapshot.adapterOptions.subscribe) {\n // ...\n }\n // ...\n }\n }\n ```\n See [peekRecord](../methods/peekRecord?anchor=peekRecord) to get the cached version of a record.\n ### Retrieving Related Model Records\n If you use an adapter such as Ember's default\n [`JSONAPIAdapter`](/ember-data/release/classes/JSONAPIAdapter)\n that supports the [JSON API specification](http://jsonapi.org/) and if your server\n endpoint supports the use of an\n ['include' query parameter](http://jsonapi.org/format/#fetching-includes),\n you can use `findRecord()` or `findAll()` to automatically retrieve additional records related to\n the one you request by supplying an `include` parameter in the `options` object.\n For example, given a `post` model that has a `hasMany` relationship with a `comment`\n model, when we retrieve a specific post we can have the server also return that post's\n comments in the same request:\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n export default class PostRoute extends Route {\n model(params) {\n return this.store.findRecord('post', params.post_id, { include: 'comments' });\n }\n }\n ```\n ```app/adapters/application.js\n export default class Adapter {\n findRecord(store, schema, id, snapshot) {\n let type = schema.modelName;\n if (type === 'post')\n let includes = snapshot.adapterOptions.include;\n return fetch(`./posts/${postId}?include=${includes}`)\n .then(response => response.json())\n }\n }\n static create() {\n return new this();\n }\n }\n ```\n In this case, the post's comments would then be available in your template as\n `model.comments`.\n Multiple relationships can be requested using an `include` parameter consisting of a\n comma-separated list (without white-space) while nested relationships can be specified\n using a dot-separated sequence of relationship names. So to request both the post's\n comments and the authors of those comments the request would look like this:\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n export default class PostRoute extends Route {\n model(params) {\n return this.store.findRecord('post', params.post_id, { include: 'comments,comments.author' });\n }\n }\n ```\n ### Retrieving Specific Fields by Type\n If your server endpoint supports the use of a ['fields' query parameter](https://jsonapi.org/format/#fetching-sparse-fieldsets),\n you can use pass those fields through to your server. At this point in time, this requires a few manual steps on your part.\n 1. Implement `buildQuery` in your adapter.\n ```app/adapters/application.js\n buildQuery(snapshot) {\n let query = super.buildQuery(...arguments);\n let { fields } = snapshot.adapterOptions;\n if (fields) {\n query.fields = fields;\n }\n return query;\n }\n ```\n 2. Then pass through the applicable fields to your `findRecord` request.\n Given a `post` model with attributes body, title, publishDate and meta, you can retrieve a filtered list of attributes.\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n export default Route.extend({\n model(params) {\n return this.store.findRecord('post', params.post_id, { adapterOptions: { fields: { post: 'body,title' } });\n }\n });\n ```\n Moreover, you can filter attributes on related models as well. If a `post` has a `belongsTo` relationship to a user,\n just include the relationship key and attributes.\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n export default Route.extend({\n model(params) {\n return this.store.findRecord('post', params.post_id, { adapterOptions: { fields: { post: 'body,title', user: 'name,email' } });\n }\n });\n ```\n @since 1.13.0\n @method findRecord\n @public\n @param {String|object} modelName - either a string representing the modelName or a ResourceIdentifier object containing both the type (a string) and the id (a string) for the record or an lid (a string) of an existing record\n @param {(String|Integer|Object)} id - optional object with options for the request only if the first param is a ResourceIdentifier, else the string id of the record to be retrieved\n @param {Object} [options] - if the first param is a string this will be the optional options for the request. See examples for available options.\n @return {Promise} promise\n */\n\n findRecord(resource, id, options) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertDestroyingStore(this, 'findRecord');\n }\n assert(`You need to pass a modelName or resource identifier as the first argument to the store's findRecord method`, resource);\n if (isMaybeIdentifier(resource)) {\n options = id;\n } else {\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${resource}`, typeof resource === 'string');\n const type = normalizeModelName(resource);\n const normalizedId = ensureStringId(id);\n resource = constructResource(type, normalizedId);\n }\n const identifier = this.identifierCache.getOrCreateRecordIdentifier(resource);\n options = options || {};\n if (options.preload) {\n // force reload if we preload to ensure we don't resolve the promise\n // until we are complete, else we will end up background-reloading\n // even for initial load.\n if (!this._instanceCache.recordIsLoaded(identifier)) {\n options.reload = true;\n }\n this._join(() => {\n preloadData(this, identifier, options.preload);\n });\n }\n const promise = this.request({\n op: 'findRecord',\n data: {\n record: identifier,\n options\n },\n cacheOptions: {\n [SkipCache]: true\n }\n });\n return promise.then(document => {\n return document.content;\n });\n }\n\n /**\n Get the reference for the specified record.\n Example\n ```javascript\n let userRef = store.getReference('user', 1);\n // check if the user is loaded\n let isLoaded = userRef.value() !== null;\n // get the record of the reference (null if not yet available)\n let user = userRef.value();\n // get the identifier of the reference\n if (userRef.remoteType() === 'id') {\n let id = userRef.id();\n }\n // load user (via store.find)\n userRef.load().then(...)\n // or trigger a reload\n userRef.reload().then(...)\n // provide data for reference\n userRef.push({ id: 1, username: '@user' }).then(function(user) {\n userRef.value() === user;\n });\n ```\n @method getReference\n @public\n @param {String|object} resource - modelName (string) or Identifier (object)\n @param {String|Integer} id\n @since 2.5.0\n @return {RecordReference}\n */\n // TODO @deprecate getReference (and references generally)\n getReference(resource, id) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertDestroyingStore(this, 'getReference');\n }\n let resourceIdentifier;\n if (arguments.length === 1 && isMaybeIdentifier(resource)) {\n resourceIdentifier = resource;\n } else {\n const type = normalizeModelName(resource);\n const normalizedId = ensureStringId(id);\n resourceIdentifier = constructResource(type, normalizedId);\n }\n assert('getReference expected to receive either a resource identifier or type and id as arguments', isMaybeIdentifier(resourceIdentifier));\n const identifier = this.identifierCache.getOrCreateRecordIdentifier(resourceIdentifier);\n return this._instanceCache.getReference(identifier);\n }\n\n /**\n Get a record by a given type and ID without triggering a fetch.\n This method will synchronously return the record if it is available in the store,\n otherwise it will return `null`. A record is available if it has been fetched earlier, or\n pushed manually into the store.\n See [findRecord](../methods/findRecord?anchor=findRecord) if you would like to request this record from the backend.\n _Note: This is a synchronous method and does not return a promise._\n **Example 1**\n ```js\n let post = store.peekRecord('post', 1);\n post.id; // 1\n ```\n `peekRecord` can be called with a single identifier argument instead of the combination\n of `type` (modelName) and `id` as separate arguments. You may recognize this combo as\n the typical pairing from [JSON:API](https://jsonapi.org/format/#document-resource-object-identification)\n **Example 2**\n ```js\n let post = store.peekRecord({ type: 'post', id });\n post.id; // 1\n ```\n If you have previously received an lid from an Identifier for this record, you can lookup the record again using\n just the lid.\n **Example 3**\n ```js\n let post = store.peekRecord({ lid });\n post.id; // 1\n ```\n @since 1.13.0\n @method peekRecord\n @public\n @param {String|object} modelName - either a string representing the modelName or a ResourceIdentifier object containing both the type (a string) and the id (a string) for the record or an lid (a string) of an existing record\n @param {String|Integer} id - optional only if the first param is a ResourceIdentifier, else the string id of the record to be retrieved.\n @return {Model|null} record\n */\n\n peekRecord(identifier, id) {\n if (arguments.length === 1 && isMaybeIdentifier(identifier)) {\n const stableIdentifier = this.identifierCache.peekRecordIdentifier(identifier);\n const isLoaded = stableIdentifier && this._instanceCache.recordIsLoaded(stableIdentifier);\n // TODO come up with a better mechanism for determining if we have data and could peek.\n // this is basically an \"are we not empty\" query.\n return isLoaded ? this._instanceCache.getRecord(stableIdentifier) : null;\n }\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertDestroyingStore(this, 'peekRecord');\n }\n assert(`You need to pass a model name to the store's peekRecord method`, identifier);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${String(identifier)}`, typeof identifier === 'string');\n const type = normalizeModelName(identifier);\n const normalizedId = ensureStringId(id);\n const resource = {\n type,\n id: normalizedId\n };\n const stableIdentifier = this.identifierCache.peekRecordIdentifier(resource);\n const isLoaded = stableIdentifier && this._instanceCache.recordIsLoaded(stableIdentifier);\n return isLoaded ? this._instanceCache.getRecord(stableIdentifier) : null;\n }\n\n /**\n This method delegates a query to the adapter. This is the one place where\n adapter-level semantics are exposed to the application.\n Each time this method is called a new request is made through the adapter.\n Exposing queries this way seems preferable to creating an abstract query\n language for all server-side queries, and then require all adapters to\n implement them.\n ---\n If you do something like this:\n ```javascript\n store.query('person', { page: 1 });\n ```\n The request made to the server will look something like this:\n ```\n GET \"/api/v1/person?page=1\"\n ```\n ---\n If you do something like this:\n ```javascript\n store.query('person', { ids: [1, 2, 3] });\n ```\n The request made to the server will look something like this:\n ```\n GET \"/api/v1/person?ids%5B%5D=1&ids%5B%5D=2&ids%5B%5D=3\"\n decoded: \"/api/v1/person?ids[]=1&ids[]=2&ids[]=3\"\n ```\n This method returns a promise, which is resolved with a\n [`Collection`](/ember-data/release/classes/Collection)\n once the server returns.\n @since 1.13.0\n @method query\n @public\n @param {String} modelName\n @param {any} query an opaque query to be used by the adapter\n @param {Object} options optional, may include `adapterOptions` hash which will be passed to adapter.query\n @return {Promise} promise\n */\n query(modelName, query, options) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertDestroyingStore(this, 'query');\n }\n assert(`You need to pass a model name to the store's query method`, modelName);\n assert(`You need to pass a query hash to the store's query method`, query);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n const promise = this.request({\n op: 'query',\n data: {\n type: normalizeModelName(modelName),\n query,\n options: options || {}\n },\n cacheOptions: {\n [SkipCache]: true\n }\n });\n return promise.then(document => document.content);\n }\n\n /**\n This method makes a request for one record, where the `id` is not known\n beforehand (if the `id` is known, use [`findRecord`](../methods/findRecord?anchor=findRecord)\n instead).\n This method can be used when it is certain that the server will return a\n single object for the primary data.\n Each time this method is called a new request is made through the adapter.\n Let's assume our API provides an endpoint for the currently logged in user\n via:\n ```\n // GET /api/current_user\n {\n user: {\n id: 1234,\n username: 'admin'\n }\n }\n ```\n Since the specific `id` of the `user` is not known beforehand, we can use\n `queryRecord` to get the user:\n ```javascript\n store.queryRecord('user', {}).then(function(user) {\n let username = user.username;\n // do thing\n });\n ```\n The request is made through the adapters' `queryRecord`:\n ```app/adapters/user.js\n import Adapter from '@ember-data/adapter';\n import $ from 'jquery';\n export default class UserAdapter extends Adapter {\n queryRecord(modelName, query) {\n return $.getJSON('/api/current_user');\n }\n }\n ```\n Note: the primary use case for `store.queryRecord` is when a single record\n is queried and the `id` is not known beforehand. In all other cases\n `store.query` and using the first item of the array is likely the preferred\n way:\n ```\n // GET /users?username=unique\n {\n data: [{\n id: 1234,\n type: 'user',\n attributes: {\n username: \"unique\"\n }\n }]\n }\n ```\n ```javascript\n store.query('user', { username: 'unique' }).then(function(users) {\n return users.firstObject;\n }).then(function(user) {\n let id = user.id;\n });\n ```\n This method returns a promise, which resolves with the found record.\n If the adapter returns no data for the primary data of the payload, then\n `queryRecord` resolves with `null`:\n ```\n // GET /users?username=unique\n {\n data: null\n }\n ```\n ```javascript\n store.queryRecord('user', { username: 'unique' }).then(function(user) {\n // user is null\n });\n ```\n @since 1.13.0\n @method queryRecord\n @public\n @param {String} modelName\n @param {any} query an opaque query to be used by the adapter\n @param {Object} options optional, may include `adapterOptions` hash which will be passed to adapter.queryRecord\n @return {Promise} promise which resolves with the found record or `null`\n */\n queryRecord(modelName, query, options) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertDestroyingStore(this, 'queryRecord');\n }\n assert(`You need to pass a model name to the store's queryRecord method`, modelName);\n assert(`You need to pass a query hash to the store's queryRecord method`, query);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n const promise = this.request({\n op: 'queryRecord',\n data: {\n type: normalizeModelName(modelName),\n query,\n options: options || {}\n },\n cacheOptions: {\n [SkipCache]: true\n }\n });\n return promise.then(document => document.content);\n }\n\n /**\n `findAll` asks the adapter's `findAll` method to find the records for the\n given type, and returns a promise which will resolve with all records of\n this type present in the store, even if the adapter only returns a subset\n of them.\n ```app/routes/authors.js\n import Route from '@ember/routing/route';\n export default class AuthorsRoute extends Route {\n model(params) {\n return this.store.findAll('author');\n }\n }\n ```\n _When_ the returned promise resolves depends on the reload behavior,\n configured via the passed `options` hash and the result of the adapter's\n `shouldReloadAll` method.\n ### Reloading\n If `{ reload: true }` is passed or `adapter.shouldReloadAll` evaluates to\n `true`, then the returned promise resolves once the adapter returns data,\n regardless if there are already records in the store:\n ```js\n store.push({\n data: {\n id: 'first',\n type: 'author'\n }\n });\n // adapter#findAll resolves with\n // [\n // {\n // id: 'second',\n // type: 'author'\n // }\n // ]\n store.findAll('author', { reload: true }).then(function(authors) {\n authors.getEach('id'); // ['first', 'second']\n });\n ```\n If no reload is indicated via the above mentioned ways, then the promise\n immediately resolves with all the records currently loaded in the store.\n ### Background Reloading\n Optionally, if `adapter.shouldBackgroundReloadAll` evaluates to `true`,\n then a background reload is started. Once this resolves, the array with\n which the promise resolves, is updated automatically so it contains all the\n records in the store:\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n export default class ApplicationAdapter extends Adapter {\n shouldReloadAll(store, snapshotsArray) {\n return false;\n },\n shouldBackgroundReloadAll(store, snapshotsArray) {\n return true;\n }\n });\n // ...\n store.push({\n data: {\n id: 'first',\n type: 'author'\n }\n });\n let allAuthors;\n store.findAll('author').then(function(authors) {\n authors.getEach('id'); // ['first']\n allAuthors = authors;\n });\n // later, once adapter#findAll resolved with\n // [\n // {\n // id: 'second',\n // type: 'author'\n // }\n // ]\n allAuthors.getEach('id'); // ['first', 'second']\n ```\n If you would like to force or prevent background reloading, you can set a\n boolean value for `backgroundReload` in the options object for\n `findAll`.\n ```app/routes/post/edit.js\n import Route from '@ember/routing/route';\n export default class PostEditRoute extends Route {\n model() {\n return this.store.findAll('post', { backgroundReload: false });\n }\n }\n ```\n If you pass an object on the `adapterOptions` property of the options\n argument it will be passed to you adapter via the `snapshotRecordArray`\n ```app/routes/posts.js\n import Route from '@ember/routing/route';\n export default class PostsRoute extends Route {\n model(params) {\n return this.store.findAll('post', {\n adapterOptions: { subscribe: false }\n });\n }\n }\n ```\n ```app/adapters/post.js\n import MyCustomAdapter from './custom-adapter';\n export default class UserAdapter extends MyCustomAdapter {\n findAll(store, type, sinceToken, snapshotRecordArray) {\n if (snapshotRecordArray.adapterOptions.subscribe) {\n // ...\n }\n // ...\n }\n }\n ```\n See [peekAll](../methods/peekAll?anchor=peekAll) to get an array of current records in the\n store, without waiting until a reload is finished.\n ### Retrieving Related Model Records\n If you use an adapter such as Ember's default\n [`JSONAPIAdapter`](/ember-data/release/classes/JSONAPIAdapter)\n that supports the [JSON API specification](http://jsonapi.org/) and if your server\n endpoint supports the use of an\n ['include' query parameter](http://jsonapi.org/format/#fetching-includes),\n you can use `findAll()` to automatically retrieve additional records related to\n those requested by supplying an `include` parameter in the `options` object.\n For example, given a `post` model that has a `hasMany` relationship with a `comment`\n model, when we retrieve all of the post records we can have the server also return\n all of the posts' comments in the same request:\n ```app/routes/posts.js\n import Route from '@ember/routing/route';\n export default class PostsRoute extends Route {\n model() {\n return this.store.findAll('post', { include: 'comments' });\n }\n }\n ```\n Multiple relationships can be requested using an `include` parameter consisting of a\n comma-separated list (without white-space) while nested relationships can be specified\n using a dot-separated sequence of relationship names. So to request both the posts'\n comments and the authors of those comments the request would look like this:\n ```app/routes/posts.js\n import Route from '@ember/routing/route';\n export default class PostsRoute extends Route {\n model() {\n return this.store.findAll('post', { include: 'comments,comments.author' });\n }\n }\n ```\n See [query](../methods/query?anchor=query) to only get a subset of records from the server.\n @since 1.13.0\n @method findAll\n @public\n @param {String} modelName\n @param {Object} options\n @return {Promise} promise\n */\n findAll(modelName, options = {}) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertDestroyingStore(this, 'findAll');\n }\n assert(`You need to pass a model name to the store's findAll method`, modelName);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n const promise = this.request({\n op: 'findAll',\n data: {\n type: normalizeModelName(modelName),\n options: options || {}\n },\n cacheOptions: {\n [SkipCache]: true\n }\n });\n return promise.then(document => document.content);\n }\n\n /**\n This method returns a filtered array that contains all of the\n known records for a given type in the store.\n Note that because it's just a filter, the result will contain any\n locally created records of the type, however, it will not make a\n request to the backend to retrieve additional records. If you\n would like to request all the records from the backend please use\n [store.findAll](../methods/findAll?anchor=findAll).\n Also note that multiple calls to `peekAll` for a given type will always\n return the same `RecordArray`.\n Example\n ```javascript\n let localPosts = store.peekAll('post');\n ```\n @since 1.13.0\n @method peekAll\n @public\n @param {String} modelName\n @return {RecordArray}\n */\n peekAll(modelName) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertDestroyingStore(this, 'peekAll');\n }\n assert(`You need to pass a model name to the store's peekAll method`, modelName);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n const type = normalizeModelName(modelName);\n return this.recordArrayManager.liveArrayFor(type);\n }\n\n /**\n This method unloads all records in the store.\n It schedules unloading to happen during the next run loop.\n Optionally you can pass a type which unload all records for a given type.\n ```javascript\n store.unloadAll();\n store.unloadAll('post');\n ```\n @method unloadAll\n @public\n @param {String} modelName\n */\n unloadAll(modelName) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertDestroyedStoreOnly(this, 'unloadAll');\n }\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${String(modelName)}`, !modelName || typeof modelName === 'string');\n this._join(() => {\n if (modelName === undefined) {\n // destroy the graph before unloadAll\n // since then we avoid churning relationships\n // during unload\n this._graph?.identifiers.clear();\n this.recordArrayManager.clear();\n this._instanceCache.clear();\n } else {\n const normalizedModelName = normalizeModelName(modelName);\n this._instanceCache.clear(normalizedModelName);\n }\n });\n }\n\n /**\n Push some data for a given type into the store.\n This method expects normalized [JSON API](http://jsonapi.org/) document. This means you have to follow [JSON API specification](http://jsonapi.org/format/) with few minor adjustments:\n - record's `type` should always be in singular, dasherized form\n - members (properties) should be camelCased\n [Your primary data should be wrapped inside `data` property](http://jsonapi.org/format/#document-top-level):\n ```js\n store.push({\n data: {\n // primary data for single record of type `Person`\n id: '1',\n type: 'person',\n attributes: {\n firstName: 'Daniel',\n lastName: 'Kmak'\n }\n }\n });\n ```\n [Demo.](http://ember-twiddle.com/fb99f18cd3b4d3e2a4c7)\n `data` property can also hold an array (of records):\n ```js\n store.push({\n data: [\n // an array of records\n {\n id: '1',\n type: 'person',\n attributes: {\n firstName: 'Daniel',\n lastName: 'Kmak'\n }\n },\n {\n id: '2',\n type: 'person',\n attributes: {\n firstName: 'Tom',\n lastName: 'Dale'\n }\n }\n ]\n });\n ```\n [Demo.](http://ember-twiddle.com/69cdbeaa3702159dc355)\n There are some typical properties for `JSONAPI` payload:\n * `id` - mandatory, unique record's key\n * `type` - mandatory string which matches `model`'s dasherized name in singular form\n * `attributes` - object which holds data for record attributes - `attr`'s declared in model\n * `relationships` - object which must contain any of the following properties under each relationships' respective key (example path is `relationships.achievements.data`):\n - [`links`](http://jsonapi.org/format/#document-links)\n - [`data`](http://jsonapi.org/format/#document-resource-object-linkage) - place for primary data\n - [`meta`](http://jsonapi.org/format/#document-meta) - object which contains meta-information about relationship\n For this model:\n ```app/models/person.js\n import Model, { attr, hasMany } from '@ember-data/model';\n export default class PersonRoute extends Route {\n @attr('string') firstName;\n @attr('string') lastName;\n @hasMany('person') children;\n }\n ```\n To represent the children as IDs:\n ```js\n {\n data: {\n id: '1',\n type: 'person',\n attributes: {\n firstName: 'Tom',\n lastName: 'Dale'\n },\n relationships: {\n children: {\n data: [\n {\n id: '2',\n type: 'person'\n },\n {\n id: '3',\n type: 'person'\n },\n {\n id: '4',\n type: 'person'\n }\n ]\n }\n }\n }\n }\n ```\n [Demo.](http://ember-twiddle.com/343e1735e034091f5bde)\n To represent the children relationship as a URL:\n ```js\n {\n data: {\n id: '1',\n type: 'person',\n attributes: {\n firstName: 'Tom',\n lastName: 'Dale'\n },\n relationships: {\n children: {\n links: {\n related: '/people/1/children'\n }\n }\n }\n }\n }\n ```\n If you're streaming data or implementing an adapter, make sure\n that you have converted the incoming data into this form. The\n store's [normalize](../methods/normalize?anchor=normalize) method is a convenience\n helper for converting a json payload into the form Ember Data\n expects.\n ```js\n store.push(store.normalize('person', data));\n ```\n This method can be used both to push in brand new\n records, as well as to update existing records.\n @method push\n @public\n @param {Object} data\n @return the record(s) that was created or\n updated.\n */\n\n push(data) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertDestroyingStore(this, 'push');\n }\n const pushed = this._push(data, false);\n if (Array.isArray(pushed)) {\n return pushed.map(identifier => this._instanceCache.getRecord(identifier));\n }\n if (pushed === null) {\n return null;\n }\n return this._instanceCache.getRecord(pushed);\n }\n\n /**\n Push some data in the form of a json-api document into the store,\n without creating materialized records.\n @method _push\n @private\n @param {Object} jsonApiDoc\n @return {StableRecordIdentifier|Array|null} identifiers for the primary records that had data loaded\n */\n _push(jsonApiDoc, asyncFlush) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertDestroyingStore(this, '_push');\n }\n if (macroCondition(getOwnConfig().debug.LOG_PAYLOADS)) {\n try {\n const data = JSON.parse(JSON.stringify(jsonApiDoc));\n // eslint-disable-next-line no-console\n console.log('EmberData | Payload - push', data);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log('EmberData | Payload - push', jsonApiDoc);\n }\n }\n if (asyncFlush) {\n this._enableAsyncFlush = true;\n }\n let ret;\n this._join(() => {\n ret = this.cache.put({\n content: jsonApiDoc\n });\n });\n this._enableAsyncFlush = null;\n return 'data' in ret ? ret.data : null;\n }\n\n /**\n * Trigger a save for a Record.\n *\n * @method saveRecord\n * @public\n * @param {RecordInstance} record\n * @param options\n * @return {Promise}\n */\n saveRecord(record, options = {}) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertDestroyingStore(this, 'saveRecord');\n }\n assert(`Unable to initate save for a record in a disconnected state`, storeFor(record));\n const identifier = recordIdentifierFor(record);\n const cache = this.cache;\n if (!identifier) {\n // this commonly means we're disconnected\n // but just in case we reject here to prevent bad things.\n return Promise.reject(new Error(`Record Is Disconnected`));\n }\n // TODO we used to check if the record was destroyed here\n assert(`Cannot initiate a save request for an unloaded record: ${identifier.lid}`, this._instanceCache.recordIsLoaded(identifier));\n if (resourceIsFullyDeleted(this._instanceCache, identifier)) {\n return Promise.resolve(record);\n }\n if (!options) {\n options = {};\n }\n let operation = 'updateRecord';\n if (cache.isNew(identifier)) {\n operation = 'createRecord';\n } else if (cache.isDeleted(identifier)) {\n operation = 'deleteRecord';\n }\n const request = {\n op: operation,\n data: {\n options,\n record: identifier\n },\n records: [identifier],\n cacheOptions: {\n [SkipCache]: true\n }\n };\n\n // we lie here on the type because legacy doesn't have enough context\n cache.willCommit(identifier, {\n request\n });\n return this.request(request).then(document => document.content);\n }\n\n /**\n * Instantiation hook allowing applications or addons to configure the store\n * to utilize a custom Cache implementation.\n *\n * This hook should not be called directly by consuming applications or libraries.\n * Use `Store.cache` to access the Cache instance.\n *\n * @method createCache (hook)\n * @public\n * @param storeWrapper\n * @return {Cache}\n */\n\n /**\n * Returns the cache instance associated to this Store, instantiates the Cache\n * if necessary via `Store.createCache`\n *\n * @property {Cache} cache\n * @public\n */\n get cache() {\n let {\n cache\n } = this._instanceCache;\n if (!cache) {\n cache = this._instanceCache.cache = this.createCache(this._instanceCache._storeWrapper);\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n cache = new CacheManager(cache);\n }\n }\n return cache;\n }\n\n // @ts-expect-error\n destroy() {\n if (this.isDestroyed) {\n // @ember/test-helpers will call destroy multiple times\n return;\n }\n this.isDestroying = true;\n this._graph?.destroy();\n this._graph = undefined;\n this.notifications.destroy();\n this.recordArrayManager.destroy();\n this.identifierCache.destroy();\n this.unloadAll();\n this.isDestroyed = true;\n }\n static create(args) {\n return new this(args);\n }\n}\nlet assertDestroyingStore;\nlet assertDestroyedStoreOnly;\nif (macroCondition(getOwnConfig().env.DEBUG)) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n assertDestroyingStore = function assertDestroyingStore(store, method) {\n assert(`Attempted to call store.${method}(), but the store instance has already been destroyed.`, !(store.isDestroying || store.isDestroyed));\n };\n // eslint-disable-next-line @typescript-eslint/no-shadow\n assertDestroyedStoreOnly = function assertDestroyedStoreOnly(store, method) {\n assert(`Attempted to call store.${method}(), but the store instance has already been destroyed.`, !store.isDestroyed);\n };\n}\nfunction isMaybeIdentifier(maybeIdentifier) {\n return Boolean(maybeIdentifier !== null && typeof maybeIdentifier === 'object' && ('id' in maybeIdentifier && 'type' in maybeIdentifier && maybeIdentifier.id && maybeIdentifier.type || maybeIdentifier.lid));\n}\nfunction normalizeProperties(store, identifier, properties) {\n // assert here\n if (properties !== undefined) {\n if ('id' in properties) {\n assert(`expected id to be a string or null`, properties.id !== undefined);\n }\n assert(`You passed '${typeof properties}' as properties for record creation instead of an object.`, typeof properties === 'object' && properties !== null);\n const {\n type\n } = identifier;\n\n // convert relationship Records to RecordDatas before passing to RecordData\n const defs = store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type\n });\n if (defs !== null) {\n const keys = Object.keys(properties);\n let relationshipValue;\n for (let i = 0; i < keys.length; i++) {\n const prop = keys[i];\n const def = defs[prop];\n if (def !== undefined) {\n if (def.kind === 'hasMany') {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n assertRecordsPassedToHasMany(properties[prop]);\n }\n relationshipValue = extractIdentifiersFromRecords(properties[prop]);\n } else {\n relationshipValue = extractIdentifierFromRecord(properties[prop]);\n }\n properties[prop] = relationshipValue;\n }\n }\n }\n }\n return properties;\n}\nfunction assertRecordsPassedToHasMany(records) {\n assert(`You must pass an array of records to set a hasMany relationship`, Array.isArray(records));\n assert(`All elements of a hasMany relationship must be instances of Model, you passed ${records.map(r => `${typeof r}`).join(', ')}`, function () {\n return records.every(record => {\n try {\n recordIdentifierFor(record);\n return true;\n } catch {\n return false;\n }\n });\n }());\n}\nfunction extractIdentifiersFromRecords(records) {\n return records.map(record => extractIdentifierFromRecord(record));\n}\nfunction extractIdentifierFromRecord(recordOrPromiseRecord) {\n if (!recordOrPromiseRecord) {\n return null;\n }\n const extract = recordIdentifierFor;\n return extract(recordOrPromiseRecord);\n}\nfunction urlFromLink(link) {\n if (typeof link === 'string') return link;\n return link.href;\n}\n\n/**\n * A Document is a class that wraps the response content from a request to the API\n * returned by `Cache.put` or `Cache.peek`, converting resource-identifiers into\n * record instances.\n *\n * It is not directly instantiated by the user, and its properties should not\n * be directly modified. Whether individual properties are mutable or not is\n * determined by the record instance itself.\n *\n * @public\n * @class Document\n */\nvar _store = /*#__PURE__*/_classPrivateFieldKey(\"store\");\nvar _request = /*#__PURE__*/_classPrivateFieldKey(\"request\");\nclass Document {\n constructor(store, identifier) {\n Object.defineProperty(this, _request, {\n value: _request2\n });\n /**\n * The links object for this document, if any\n *\n * e.g.\n *\n * ```\n * {\n * self: '/articles?page[number]=3',\n * }\n * ```\n *\n * @property links\n * @type {object|undefined} - a links object\n * @public\n */\n /**\n * The primary data for this document, if any.\n *\n * If this document has no primary data (e.g. because it is an error document)\n * this property will be `undefined`.\n *\n * For collections this will be an array of record instances,\n * for single resource requests it will be a single record instance or null.\n *\n * @property data\n * @public\n * @type {object|Array|null|undefined} - a data object\n */\n /**\n * The errors returned by the API for this request, if any\n *\n * @property errors\n * @public\n * @type {object|undefined} - an errors object\n */\n /**\n * The meta object for this document, if any\n *\n * @property meta\n * @public\n * @type {object|undefined} - a meta object\n */\n /**\n * The identifier associated with this document, if any\n *\n * @property identifier\n * @public\n * @type {StableDocumentIdentifier|null}\n */\n Object.defineProperty(this, _store, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldBase(this, _store)[_store] = store;\n this.identifier = identifier;\n }\n /**\n * Fetches the related link for this document, returning a promise that resolves\n * with the document when the request completes. If no related link is present,\n * will fallback to the self link if present\n *\n * @method fetch\n * @public\n * @param {object} options\n * @return Promise\n */\n fetch(options = {}) {\n assert(`No self or related link`, this.links?.related || this.links?.self);\n options.cacheOptions = options.cacheOptions || {};\n options.cacheOptions.key = this.identifier?.lid;\n return _classPrivateFieldBase(this, _request)[_request](this.links.related ? 'related' : 'self', options);\n }\n\n /**\n * Fetches the next link for this document, returning a promise that resolves\n * with the new document when the request completes, or null if there is no\n * next link.\n *\n * @method next\n * @public\n * @param {object} options\n * @return Promise\n */\n next(options = {}) {\n return _classPrivateFieldBase(this, _request)[_request]('next', options);\n }\n\n /**\n * Fetches the prev link for this document, returning a promise that resolves\n * with the new document when the request completes, or null if there is no\n * prev link.\n *\n * @method prev\n * @public\n * @param {object} options\n * @return Promise\n */\n prev(options = {}) {\n return _classPrivateFieldBase(this, _request)[_request]('prev', options);\n }\n\n /**\n * Fetches the first link for this document, returning a promise that resolves\n * with the new document when the request completes, or null if there is no\n * first link.\n *\n * @method first\n * @public\n * @param {object} options\n * @return Promise\n */\n first(options = {}) {\n return _classPrivateFieldBase(this, _request)[_request]('first', options);\n }\n\n /**\n * Fetches the last link for this document, returning a promise that resolves\n * with the new document when the request completes, or null if there is no\n * last link.\n *\n * @method last\n * @public\n * @param {object} options\n * @return Promise\n */\n last(options = {}) {\n return _classPrivateFieldBase(this, _request)[_request]('last', options);\n }\n\n /**\n * Implemented for `JSON.stringify` support.\n *\n * Returns the JSON representation of the document wrapper.\n *\n * This is a shallow serialization, it does not deeply serialize\n * the document's contents, leaving that to the individual record\n * instances to determine how to do, if at all.\n *\n * @method toJSON\n * @public\n * @return\n */\n toJSON() {\n const data = {};\n data.identifier = this.identifier;\n if (this.data !== undefined) {\n data.data = this.data;\n }\n if (this.links !== undefined) {\n data.links = this.links;\n }\n if (this.errors !== undefined) {\n data.errors = this.errors;\n }\n if (this.meta !== undefined) {\n data.meta = this.meta;\n }\n return data;\n }\n}\nasync function _request2(link, options) {\n const href = this.links?.[link];\n if (!href) {\n return null;\n }\n options.method = options.method || 'GET';\n const response = await _classPrivateFieldBase(this, _store)[_store].request(Object.assign(options, {\n url: urlFromLink(href)\n }));\n return response.content;\n}\ndefineSignal(Document.prototype, 'data');\ndefineSignal(Document.prototype, 'links');\ndefineSignal(Document.prototype, 'errors');\ndefineSignal(Document.prototype, 'meta');\n\n/**\n * @module @ember-data/store\n */\n\n/**\n * A service which an application may provide to the store via\n * the store's `lifetimes` property to configure the behavior\n * of the CacheHandler.\n *\n * The default behavior for request lifetimes is to never expire\n * unless manually refreshed via `cacheOptions.reload` or `cacheOptions.backgroundReload`.\n *\n * Implementing this service allows you to programatically define\n * when a request should be considered expired.\n *\n * @class LifetimesService\n * @public\n */\n\nconst MUTATION_OPS = new Set(['createRecord', 'updateRecord', 'deleteRecord']);\nfunction isErrorDocument(document) {\n return 'errors' in document;\n}\nfunction maybeUpdateUiObjects(store, request, options, document, isFromCache) {\n const {\n identifier\n } = options;\n if (isErrorDocument(document)) {\n if (!identifier && !options.shouldHydrate) {\n return document;\n }\n let doc;\n if (identifier) {\n doc = store._documentCache.get(identifier);\n }\n if (!doc) {\n doc = new Document(store, identifier);\n copyDocumentProperties(doc, document);\n if (identifier) {\n store._documentCache.set(identifier, doc);\n }\n } else if (!isFromCache) {\n doc.data = undefined;\n copyDocumentProperties(doc, document);\n }\n return options.shouldHydrate ? doc : document;\n }\n if (Array.isArray(document.data)) {\n const {\n recordArrayManager\n } = store;\n if (!identifier) {\n if (!options.shouldHydrate) {\n return document;\n }\n const data = recordArrayManager.createArray({\n type: request.url,\n identifiers: document.data,\n doc: document,\n query: request\n });\n const doc = new Document(store, null);\n doc.data = data;\n doc.meta = document.meta;\n doc.links = document.links;\n return doc;\n }\n let managed = recordArrayManager._keyedArrays.get(identifier.lid);\n if (!managed) {\n managed = recordArrayManager.createArray({\n type: identifier.lid,\n identifiers: document.data,\n doc: document\n });\n recordArrayManager._keyedArrays.set(identifier.lid, managed);\n const doc = new Document(store, identifier);\n doc.data = managed;\n doc.meta = document.meta;\n doc.links = document.links;\n store._documentCache.set(identifier, doc);\n return options.shouldHydrate ? doc : document;\n } else {\n const doc = store._documentCache.get(identifier);\n if (!isFromCache) {\n recordArrayManager.populateManagedArray(managed, document.data, document);\n doc.data = managed;\n doc.meta = document.meta;\n doc.links = document.links;\n }\n return options.shouldHydrate ? doc : document;\n }\n } else {\n if (!identifier && !options.shouldHydrate) {\n return document;\n }\n const data = document.data ? store.peekRecord(document.data) : null;\n let doc;\n if (identifier) {\n doc = store._documentCache.get(identifier);\n }\n if (!doc) {\n doc = new Document(store, identifier);\n doc.data = data;\n copyDocumentProperties(doc, document);\n if (identifier) {\n store._documentCache.set(identifier, doc);\n }\n } else if (!isFromCache) {\n doc.data = data;\n copyDocumentProperties(doc, document);\n }\n return options.shouldHydrate ? doc : document;\n }\n}\nfunction calcShouldFetch(store, request, hasCachedValue, identifier) {\n const {\n cacheOptions\n } = request;\n return request.op && MUTATION_OPS.has(request.op) || cacheOptions?.reload || !hasCachedValue || (store.lifetimes && identifier ? store.lifetimes.isHardExpired(identifier, store) : false);\n}\nfunction calcShouldBackgroundFetch(store, request, willFetch, identifier) {\n const {\n cacheOptions\n } = request;\n return !willFetch && (cacheOptions?.backgroundReload || (store.lifetimes && identifier ? store.lifetimes.isSoftExpired(identifier, store) : false));\n}\nfunction isMutation(request) {\n return Boolean(request.op && MUTATION_OPS.has(request.op));\n}\nfunction fetchContentAndHydrate(next, context, identifier, shouldFetch, shouldBackgroundFetch) {\n const {\n store\n } = context.request;\n const shouldHydrate = context.request[EnableHydration] || false;\n let isMut = false;\n if (isMutation(context.request)) {\n isMut = true;\n // TODO should we handle multiple records in request.records by iteratively calling willCommit for each\n const record = context.request.data?.record || context.request.records?.[0];\n assert(`Expected to receive a list of records included in the ${context.request.op} request`, record);\n store.cache.willCommit(record, context);\n }\n if (store.lifetimes?.willRequest) {\n store.lifetimes.willRequest(context.request, identifier, store);\n }\n const promise = next(context.request).then(document => {\n store.requestManager._pending.delete(context.id);\n store._enableAsyncFlush = true;\n let response;\n store._join(() => {\n if (isMutation(context.request)) {\n const record = context.request.data?.record || context.request.records?.[0];\n response = store.cache.didCommit(record, document);\n } else {\n response = store.cache.put(document);\n }\n response = maybeUpdateUiObjects(store, context.request, {\n shouldHydrate,\n shouldFetch,\n shouldBackgroundFetch,\n identifier\n }, response, false);\n });\n store._enableAsyncFlush = null;\n if (store.lifetimes?.didRequest) {\n store.lifetimes.didRequest(context.request, document.response, identifier, store);\n }\n if (shouldFetch) {\n return response;\n } else if (shouldBackgroundFetch) {\n store.notifications._flush();\n }\n }, error => {\n store.requestManager._pending.delete(context.id);\n if (context.request.signal?.aborted) {\n throw error;\n }\n store.requestManager._pending.delete(context.id);\n store._enableAsyncFlush = true;\n let response;\n store._join(() => {\n if (isMutation(context.request)) {\n // TODO similar to didCommit we should spec this to be similar to cache.put for handling full response\n // currently we let the response remain undefiend.\n const errors = error && error.content && typeof error.content === 'object' && 'errors' in error.content && Array.isArray(error.content.errors) ? error.content.errors : undefined;\n const record = context.request.data?.record || context.request.records?.[0];\n store.cache.commitWasRejected(record, errors);\n // re-throw the original error to preserve `errors` property.\n throw error;\n } else {\n response = store.cache.put(error);\n response = maybeUpdateUiObjects(store, context.request, {\n shouldHydrate,\n shouldFetch,\n shouldBackgroundFetch,\n identifier\n }, response, false);\n }\n });\n store._enableAsyncFlush = null;\n if (identifier && store.lifetimes?.didRequest) {\n store.lifetimes.didRequest(context.request, error.response, identifier, store);\n }\n if (!shouldBackgroundFetch) {\n const newError = cloneError(error);\n newError.content = response;\n throw newError;\n } else {\n store.notifications._flush();\n }\n });\n if (!isMut) {\n return promise;\n }\n assert(`Expected a mutation`, isMutation(context.request));\n\n // for mutations we need to enqueue the promise with the requestStateService\n // TODO should we enque a request per record in records?\n const record = context.request.data?.record || context.request.records?.[0];\n return store._requestCache._enqueue(promise, {\n data: [{\n op: 'saveRecord',\n recordIdentifier: record,\n options: undefined\n }]\n });\n}\nfunction cloneError(error) {\n const cloned = new Error(error.message);\n cloned.stack = error.stack;\n cloned.error = error.error;\n return cloned;\n}\nconst CacheHandler = {\n request(context, next) {\n // if we have no cache or no cache-key skip cache handling\n if (!context.request.store || context.request.cacheOptions?.[SkipCache]) {\n return next(context.request);\n }\n const {\n store\n } = context.request;\n const identifier = store.identifierCache.getOrCreateDocumentIdentifier(context.request);\n const peeked = identifier ? store.cache.peekRequest(identifier) : null;\n\n // determine if we should skip cache\n if (calcShouldFetch(store, context.request, !!peeked, identifier)) {\n return fetchContentAndHydrate(next, context, identifier, true, false);\n }\n\n // if we have not skipped cache, determine if we should update behind the scenes\n if (calcShouldBackgroundFetch(store, context.request, false, identifier)) {\n const promise = fetchContentAndHydrate(next, context, identifier, false, true);\n store.requestManager._pending.set(context.id, promise);\n }\n const shouldHydrate = context.request[EnableHydration] || false;\n if ('error' in peeked) {\n const content = shouldHydrate ? maybeUpdateUiObjects(store, context.request, {\n shouldHydrate,\n identifier\n }, peeked.content, true) : peeked.content;\n const newError = cloneError(peeked);\n newError.content = content;\n throw newError;\n }\n return Promise.resolve(shouldHydrate ? maybeUpdateUiObjects(store, context.request, {\n shouldHydrate,\n identifier\n }, peeked.content, true) : peeked.content);\n }\n};\nfunction copyDocumentProperties(target, source) {\n if ('links' in source) {\n target.links = source.links;\n }\n if ('meta' in source) {\n target.meta = source.meta;\n }\n if ('errors' in source) {\n target.errors = source.errors;\n }\n}\nexport { ARRAY_SIGNAL as A, CacheHandler as C, IdentifierArray as I, MUTATE as M, RecordArrayManager as R, Store as S, _clearCaches as _, setIdentifierGenerationMethod as a, setIdentifierUpdateMethod as b, setIdentifierForgetMethod as c, setIdentifierResetMethod as d, coerceId as e, Collection as f, SOURCE as g, fastPush as h, isStableIdentifier as i, removeRecordDataFor as j, setRecordIdentifier as k, StoreMap as l, setCacheFor as m, notifyArray as n, normalizeModelName as o, peekCache as p, recordIdentifierFor as r, storeFor as s };","import { tagForProperty } from '@ember/-internals/metal';\nimport { consumeTag, dirtyTag } from '@glimmer/validator';\nimport { macroCondition, getOwnConfig } from '@embroider/macros';\nlet TRANSACTION = null;\nfunction createTransaction() {\n const transaction = {\n cbs: new Set(),\n props: new Set(),\n sub: new Set(),\n parent: null\n };\n if (TRANSACTION) {\n transaction.parent = TRANSACTION;\n }\n TRANSACTION = transaction;\n}\nfunction maybeConsume(tag) {\n if (tag) {\n consumeTag(tag);\n }\n}\nfunction maybeDirty(tag) {\n if (tag) {\n // @ts-expect-error - we are using Ember's Tag not Glimmer's\n dirtyTag(tag);\n }\n}\n\n/**\n * If there is a current transaction, ensures that the relevant tag (and any\n * array computed chains symbols, if applicable) will be consumed during the\n * transaction.\n *\n * If there is no current transaction, will consume the tag(s) immediately.\n *\n * @internal\n * @param obj\n */\nfunction subscribe(obj) {\n if (TRANSACTION) {\n TRANSACTION.sub.add(obj);\n } else if ('tag' in obj) {\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_COMPUTED_CHAINS)) {\n maybeConsume(obj['[]']);\n maybeConsume(obj['@length']);\n }\n consumeTag(obj.tag);\n } else {\n obj.ref;\n }\n}\nfunction updateRef(obj) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n try {\n if ('tag' in obj) {\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_COMPUTED_CHAINS)) {\n maybeDirty(obj['[]']);\n maybeDirty(obj['@length']);\n }\n // @ts-expect-error - we are using Ember's Tag not Glimmer's\n dirtyTag(obj.tag);\n } else {\n obj.ref = null;\n }\n } catch (e) {\n if (e instanceof Error) {\n if (e.message.includes('You attempted to update `undefined`')) {\n // @ts-expect-error\n const key = `<${obj._debug_base}>.${obj.key}`;\n e.message = e.message.replace('You attempted to update `undefined`', `You attempted to update ${key}`);\n e.stack = e.stack?.replace('You attempted to update `undefined`', `You attempted to update ${key}`);\n const lines = e.stack?.split(`\\n`);\n const finalLines = [];\n let lastFile = null;\n lines?.forEach(line => {\n if (line.trim().startsWith('at ')) {\n // get the last string in the line which contains the code source location\n const location = line.split(' ').at(-1);\n // remove the line and char offset info\n\n if (location.includes(':')) {\n const parts = location.split(':');\n parts.pop();\n parts.pop();\n const file = parts.join(':');\n if (file !== lastFile) {\n lastFile = file;\n finalLines.push('');\n }\n }\n finalLines.push(line);\n }\n });\n const splitstr = '`undefined` was first used:';\n const parts = e.message.split(splitstr);\n parts.splice(1, 0, `Original Stack\\n=============\\n${finalLines.join(`\\n`)}\\n\\n\\`${key}\\` was first used:`);\n e.message = parts.join('');\n }\n }\n throw e;\n }\n } else {\n if ('tag' in obj) {\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_COMPUTED_CHAINS)) {\n maybeDirty(obj['[]']);\n maybeDirty(obj['@length']);\n }\n // @ts-expect-error - we are using Ember's Tag not Glimmer's\n dirtyTag(obj.tag);\n } else {\n obj.ref = null;\n }\n }\n}\nfunction flushTransaction() {\n const transaction = TRANSACTION;\n TRANSACTION = transaction.parent;\n transaction.cbs.forEach(cb => {\n cb();\n });\n transaction.props.forEach(obj => {\n // mark this mutation as part of a transaction\n obj.t = true;\n updateRef(obj);\n });\n transaction.sub.forEach(obj => {\n if ('tag' in obj) {\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_COMPUTED_CHAINS)) {\n maybeConsume(obj['[]']);\n maybeConsume(obj['@length']);\n }\n consumeTag(obj.tag);\n } else {\n obj.ref;\n }\n });\n}\nasync function untrack() {\n const transaction = TRANSACTION;\n TRANSACTION = transaction.parent;\n\n // defer writes\n await Promise.resolve();\n transaction.cbs.forEach(cb => {\n cb();\n });\n transaction.props.forEach(obj => {\n // mark this mutation as part of a transaction\n obj.t = true;\n updateRef(obj);\n });\n}\nfunction addToTransaction(obj) {\n if (TRANSACTION) {\n TRANSACTION.props.add(obj);\n } else {\n updateRef(obj);\n }\n}\nfunction addTransactionCB(method) {\n if (TRANSACTION) {\n TRANSACTION.cbs.add(method);\n } else {\n method();\n }\n}\n\n/**\n * Run `method` without subscribing to any tracked properties\n * controlled by EmberData.\n *\n * This should rarely be used except by libraries that really\n * know what they are doing. It is most useful for wrapping\n * certain kinds of fetch/query logic from within a `Resource`\n * `hook` or other similar pattern.\n *\n * @function untracked\n * @public\n * @static\n * @for @ember-data/tracking\n * @param method\n * @return result of invoking method\n */\nfunction untracked(method) {\n createTransaction();\n const ret = method();\n void untrack();\n return ret;\n}\n\n/**\n * Run the method, subscribing to any tracked properties\n * managed by EmberData that were accessed or written during\n * the method's execution as per-normal but while allowing\n * interleaving of reads and writes.\n *\n * This is useful when for instance you want to perform\n * a mutation based on existing state that must be read first.\n *\n * @function transact\n * @public\n * @static\n * @for @ember-data/tracking\n * @param method\n * @return result of invoking method\n */\nfunction transact(method) {\n createTransaction();\n const ret = method();\n flushTransaction();\n return ret;\n}\n\n/**\n * A helpful utility for creating a new function that\n * always runs in a transaction. E.G. this \"memoizes\"\n * calling `transact(fn)`, currying args as necessary.\n *\n * @method memoTransact\n * @public\n * @static\n * @for @ember-data/tracking\n * @param method\n * @return a function that will invoke method in a transaction with any provided args and return its result\n */\nfunction memoTransact(method) {\n return function (...args) {\n createTransaction();\n const ret = method(...args);\n flushTransaction();\n return ret;\n };\n}\nconst Signals = Symbol('Signals');\n\n/**\n * use to add a signal property to the prototype of something.\n *\n * First arg is the thing to define on\n * Second arg is the property name\n * Third agg is the initial value of the property if any.\n *\n * for instance\n *\n * ```ts\n * class Model {}\n * defineSignal(Model.prototype, 'isLoading', false);\n * ```\n *\n * This is sort of like using a stage-3 decorator but works today\n * while we are still on legacy decorators.\n *\n * e.g. it is equivalent to\n *\n * ```ts\n * class Model {\n * @signal accessor isLoading = false;\n * }\n * ```\n *\n * @internal\n */\nfunction defineSignal(obj, key, v) {\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: false,\n get() {\n const signals = this[Signals] = this[Signals] || new Map();\n const existing = signals.has(key);\n const _signal = entangleSignal(signals, this, key);\n if (!existing && v !== undefined) {\n _signal.lastValue = v;\n }\n return _signal.lastValue;\n },\n set(value) {\n const signals = this[Signals] = this[Signals] || new Map();\n let _signal = signals.get(key);\n if (!_signal) {\n _signal = createSignal(this, key);\n signals.set(key, _signal);\n }\n if (_signal.lastValue !== value) {\n _signal.lastValue = value;\n addToTransaction(_signal);\n }\n }\n });\n}\nfunction createArrayTags(obj, signal) {\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_COMPUTED_CHAINS)) {\n signal['[]'] = tagForProperty(obj, '[]');\n signal['@length'] = tagForProperty(obj, 'length');\n }\n}\n\n/**\n * Create a signal for the key/object pairing.\n *\n * @internal\n * @param obj Object we're creating the signal on\n * @param key Key to create the signal for\n * @return the signal\n */\nfunction createSignal(obj, key) {\n const _signal = {\n key,\n tag: tagForProperty(obj, key),\n t: false,\n shouldReset: false,\n '[]': null,\n '@length': null,\n lastValue: undefined\n };\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n // eslint-disable-next-line no-inner-declarations\n function tryGet(prop) {\n try {\n return obj[prop];\n } catch {\n return;\n }\n }\n const modelName = tryGet('$type') ?? tryGet('modelName') ?? tryGet('constructor')?.modelName ?? '';\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n const className = obj.constructor?.name ?? obj.toString?.() ?? 'unknown';\n _signal._debug_base = `${className}${modelName && !className.startsWith('SchemaRecord') ? `:${modelName}` : ''}`;\n }\n return _signal;\n}\n\n/**\n * Create a signal for the key/object pairing and subscribes to the signal.\n *\n * Use when you need to ensure a signal exists and is subscribed to.\n *\n * @internal\n * @param signals Map of signals\n * @param obj Object we're creating the signal on\n * @param key Key to create the signal for\n * @return the signal\n */\nfunction entangleSignal(signals, obj, key) {\n let _signal = signals.get(key);\n if (!_signal) {\n _signal = createSignal(obj, key);\n signals.set(key, _signal);\n }\n subscribe(_signal);\n return _signal;\n}\nfunction getSignal(obj, key, initialState) {\n let signals = obj[Signals];\n if (!signals) {\n signals = new Map();\n obj[Signals] = signals;\n }\n let _signal = signals.get(key);\n if (!_signal) {\n _signal = createSignal(obj, key);\n _signal.shouldReset = initialState;\n signals.set(key, _signal);\n }\n return _signal;\n}\nfunction peekSignal(obj, key) {\n const signals = obj[Signals];\n if (signals) {\n return signals.get(key);\n }\n}\nexport { Signals, addToTransaction, addTransactionCB, createArrayTags, createSignal, defineSignal, entangleSignal, getSignal, memoTransact, peekSignal, subscribe, transact, untracked };","import { assert } from '@ember/debug';\nimport { createCache, getValue } from '@glimmer/tracking/primitives/cache';\nexport { createCache, getValue } from '@glimmer/tracking/primitives/cache';\nexport { memoTransact, transact, untracked } from \"./-private\";\nexport { dependentKeyCompat as compat } from '@ember/object/compat';\nfunction cached(target, key, descriptor) {\n // Error on `@cached()`, `@cached(...args)`, and `@cached propName = value;`\n assert('You attempted to use @cached(), which is not necessary nor supported. Remove the parentheses and you will be good to go!', target !== undefined);\n assert(`You attempted to use @cached on with ${arguments.length > 1 ? 'arguments' : 'an argument'} ( @cached(${Array.from(arguments).map(d => `'${d}'`).join(', ')}), which is not supported. Dependencies are automatically tracked, so you can just use ${'`@cached`'}`, typeof target === 'object' && typeof key === 'string' && typeof descriptor === 'object' && arguments.length === 3);\n assert(`The @cached decorator must be applied to getters. '${key}' is not a getter.`, typeof descriptor.get === 'function');\n const caches = new WeakMap();\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const getter = descriptor.get;\n descriptor.get = function () {\n if (!caches.has(this)) caches.set(this, createCache(getter.bind(this)));\n return getValue(caches.get(this));\n };\n}\nexport { cached };","export default class Cache {\n size = 0;\n misses = 0;\n hits = 0;\n\n constructor(limit, func, store) {\n this.limit = limit;\n this.func = func;\n this.store = store;\n this.store = store || new Map();\n }\n\n get(key) {\n let value = this.store.get(key);\n\n if (this.store.has(key)) {\n this.hits++;\n return this.store.get(key);\n } else {\n this.misses++;\n value = this.set(key, this.func(key));\n }\n\n return value;\n }\n\n set(key, value) {\n if (this.limit > this.size) {\n this.size++;\n this.store.set(key, value);\n }\n\n return value;\n }\n\n purge() {\n this.store.clear();\n this.size = 0;\n this.hits = 0;\n this.misses = 0;\n }\n\n}","/* eslint-disable no-useless-escape */\n\n/**\n @module @ember/string\n */\nimport Cache from './cache';\n// STATE within a module is frowned upon, this exists\n// to support Ember.STRINGS but shield ember internals from this legacy global\n// API.\nlet STRINGS = {};\nexport function setStrings(strings) {\n STRINGS = strings;\n}\nexport function getStrings() {\n return STRINGS;\n}\nexport function getString(name) {\n return STRINGS[name];\n}\nconst STRING_DASHERIZE_REGEXP = /[ _]/g;\nconst STRING_DASHERIZE_CACHE = new Cache(1000, key => decamelize(key).replace(STRING_DASHERIZE_REGEXP, '-'));\nconst STRING_CAMELIZE_REGEXP_1 = /(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CAMELIZE_REGEXP_2 = /(^|\\/)([A-Z])/g;\nconst CAMELIZE_CACHE = new Cache(1000, key => key.replace(STRING_CAMELIZE_REGEXP_1, (_match, _separator, chr) => chr ? chr.toUpperCase() : '').replace(STRING_CAMELIZE_REGEXP_2, (match\n/*, separator, chr */\n) => match.toLowerCase()));\nconst STRING_CLASSIFY_REGEXP_1 = /^(\\-|_)+(.)?/;\nconst STRING_CLASSIFY_REGEXP_2 = /(.)(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CLASSIFY_REGEXP_3 = /(^|\\/|\\.)([a-z])/g;\nconst CLASSIFY_CACHE = new Cache(1000, str => {\n const replace1 = (_match, _separator, chr) => chr ? `_${chr.toUpperCase()}` : '';\n\n const replace2 = (_match, initialChar, _separator, chr) => initialChar + (chr ? chr.toUpperCase() : '');\n\n const parts = str.split('/');\n\n for (let i = 0; i < parts.length; i++) {\n parts[i] = parts[i].replace(STRING_CLASSIFY_REGEXP_1, replace1).replace(STRING_CLASSIFY_REGEXP_2, replace2);\n }\n\n return parts.join('/').replace(STRING_CLASSIFY_REGEXP_3, (match\n /*, separator, chr */\n ) => match.toUpperCase());\n});\nconst STRING_UNDERSCORE_REGEXP_1 = /([a-z\\d])([A-Z]+)/g;\nconst STRING_UNDERSCORE_REGEXP_2 = /\\-|\\s+/g;\nconst UNDERSCORE_CACHE = new Cache(1000, str => str.replace(STRING_UNDERSCORE_REGEXP_1, '$1_$2').replace(STRING_UNDERSCORE_REGEXP_2, '_').toLowerCase());\nconst STRING_CAPITALIZE_REGEXP = /(^|\\/)([a-z\\u00C0-\\u024F])/g;\nconst CAPITALIZE_CACHE = new Cache(1000, str => str.replace(STRING_CAPITALIZE_REGEXP, (match\n/*, separator, chr */\n) => match.toUpperCase()));\nconst STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g;\nconst DECAMELIZE_CACHE = new Cache(1000, str => str.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase());\n/**\n Splits a string into separate units separated by spaces, eliminating any\n empty strings in the process. This is a convenience method for split that\n is mostly useful when applied to the `String.prototype`.\n\n ```javascript\n import { w } from '@ember/string';\n\n w(\"alpha beta gamma\").forEach(function(key) {\n console.log(key);\n });\n\n // > alpha\n // > beta\n // > gamma\n ```\n\n @method w\n @param {String} str The string to split\n @return {Array} array containing the split strings\n @public\n*/\n\nexport function w(str) {\n return str.split(/\\s+/);\n}\n/**\n Converts a camelized string into all lower case separated by underscores.\n\n ```javascript\n import { decamelize } from '@ember/string';\n\n decamelize('innerHTML'); // 'inner_html'\n decamelize('action_name'); // 'action_name'\n decamelize('css-class-name'); // 'css-class-name'\n decamelize('my favorite items'); // 'my favorite items'\n ```\n\n @method decamelize\n @param {String} str The string to decamelize.\n @return {String} the decamelized string.\n @public\n*/\n\nexport function decamelize(str) {\n return DECAMELIZE_CACHE.get(str);\n}\n/**\n Replaces underscores, spaces, or camelCase with dashes.\n\n ```javascript\n import { dasherize } from '@ember/string';\n\n dasherize('innerHTML'); // 'inner-html'\n dasherize('action_name'); // 'action-name'\n dasherize('css-class-name'); // 'css-class-name'\n dasherize('my favorite items'); // 'my-favorite-items'\n dasherize('privateDocs/ownerInvoice'; // 'private-docs/owner-invoice'\n ```\n\n @method dasherize\n @param {String} str The string to dasherize.\n @return {String} the dasherized string.\n @public\n*/\n\nexport function dasherize(str) {\n return STRING_DASHERIZE_CACHE.get(str);\n}\n/**\n Returns the lowerCamelCase form of a string.\n\n ```javascript\n import { camelize } from '@ember/string';\n\n camelize('innerHTML'); // 'innerHTML'\n camelize('action_name'); // 'actionName'\n camelize('css-class-name'); // 'cssClassName'\n camelize('my favorite items'); // 'myFavoriteItems'\n camelize('My Favorite Items'); // 'myFavoriteItems'\n camelize('private-docs/owner-invoice'); // 'privateDocs/ownerInvoice'\n ```\n\n @method camelize\n @param {String} str The string to camelize.\n @return {String} the camelized string.\n @public\n*/\n\nexport function camelize(str) {\n return CAMELIZE_CACHE.get(str);\n}\n/**\n Returns the UpperCamelCase form of a string.\n\n ```javascript\n import { classify } from '@ember/string';\n\n classify('innerHTML'); // 'InnerHTML'\n classify('action_name'); // 'ActionName'\n classify('css-class-name'); // 'CssClassName'\n classify('my favorite items'); // 'MyFavoriteItems'\n classify('private-docs/owner-invoice'); // 'PrivateDocs/OwnerInvoice'\n ```\n\n @method classify\n @param {String} str the string to classify\n @return {String} the classified string\n @public\n*/\n\nexport function classify(str) {\n return CLASSIFY_CACHE.get(str);\n}\n/**\n More general than decamelize. Returns the lower\\_case\\_and\\_underscored\n form of a string.\n\n ```javascript\n import { underscore } from '@ember/string';\n\n underscore('innerHTML'); // 'inner_html'\n underscore('action_name'); // 'action_name'\n underscore('css-class-name'); // 'css_class_name'\n underscore('my favorite items'); // 'my_favorite_items'\n underscore('privateDocs/ownerInvoice'); // 'private_docs/owner_invoice'\n ```\n\n @method underscore\n @param {String} str The string to underscore.\n @return {String} the underscored string.\n @public\n*/\n\nexport function underscore(str) {\n return UNDERSCORE_CACHE.get(str);\n}\n/**\n Returns the Capitalized form of a string\n\n ```javascript\n import { capitalize } from '@ember/string';\n\n capitalize('innerHTML') // 'InnerHTML'\n capitalize('action_name') // 'Action_name'\n capitalize('css-class-name') // 'Css-class-name'\n capitalize('my favorite items') // 'My favorite items'\n capitalize('privateDocs/ownerInvoice'); // 'PrivateDocs/ownerInvoice'\n ```\n\n @method capitalize\n @param {String} str The string to capitalize.\n @return {String} The capitalized string.\n @public\n*/\n\nexport function capitalize(str) {\n return CAPITALIZE_CACHE.get(str);\n}\n/*\n The following are implemented here to give users adding `@ember/string` to\n their projects a useful error message. The `ember-source` implementation of\n `@ember/string` is clobbered by adding this addon, and so the deprecation of\n the import path is not triggered. This error message is intended to help\n users discover what they need to change.\n*/\n\nexport function htmlSafe(str) {\n throw new Error('htmlSafe is not implemented in the `@ember/string` package. Please import from `@ember/template` instead.');\n}\nexport function isHTMLSafe(str) {\n throw new Error('isHTMLSafe is not implemented in the `@ember/string` package. Please import from `@ember/template` instead.');\n}","function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\nfunction _wrapRegExp() {\n _wrapRegExp = function (re, groups) {\n return new BabelRegExp(re, void 0, groups);\n };\n\n var _super = RegExp.prototype,\n _groups = new WeakMap();\n\n function BabelRegExp(re, flags, groups) {\n var _this = new RegExp(re, flags);\n\n return _groups.set(_this, groups || _groups.get(re)), _setPrototypeOf(_this, BabelRegExp.prototype);\n }\n\n function buildGroups(result, re) {\n var g = _groups.get(re);\n\n return Object.keys(g).reduce(function (groups, name) {\n return groups[name] = result[g[name]], groups;\n }, Object.create(null));\n }\n\n return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (str) {\n var result = _super.exec.call(this, str);\n\n return result && (result.groups = buildGroups(result, this)), result;\n }, BabelRegExp.prototype[Symbol.replace] = function (str, substitution) {\n if (\"string\" == typeof substitution) {\n var groups = _groups.get(this);\n\n return _super[Symbol.replace].call(this, str, substitution.replace(/\\$<([^>]+)>/g, function (_, name) {\n return \"$\" + groups[name];\n }));\n }\n\n if (\"function\" == typeof substitution) {\n var _this = this;\n\n return _super[Symbol.replace].call(this, str, function () {\n var args = arguments;\n return \"object\" != typeof args[args.length - 1] && (args = [].slice.call(args)).push(buildGroups(args, _this)), substitution.apply(this, args);\n });\n }\n\n return _super[Symbol.replace].call(this, str, substitution);\n }, _wrapRegExp.apply(this, arguments);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar noop = function noop() {};\n\nvar _WINDOW = {};\nvar _DOCUMENT = {};\nvar _MUTATION_OBSERVER = null;\nvar _PERFORMANCE = {\n mark: noop,\n measure: noop\n};\n\ntry {\n if (typeof window !== 'undefined') _WINDOW = window;\n if (typeof document !== 'undefined') _DOCUMENT = document;\n if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver;\n if (typeof performance !== 'undefined') _PERFORMANCE = performance;\n} catch (e) {}\n\nvar _ref = _WINDOW.navigator || {},\n _ref$userAgent = _ref.userAgent,\n userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\nvar WINDOW = _WINDOW;\nvar DOCUMENT = _DOCUMENT;\nvar MUTATION_OBSERVER = _MUTATION_OBSERVER;\nvar PERFORMANCE = _PERFORMANCE;\nvar IS_BROWSER = !!WINDOW.document;\nvar IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\nvar IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\nvar _familyProxy, _familyProxy2, _familyProxy3, _familyProxy4, _familyProxy5;\n\nvar NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\nvar UNITS_IN_GRID = 16;\nvar DEFAULT_CSS_PREFIX = 'fa';\nvar DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';\nvar DATA_FA_I2SVG = 'data-fa-i2svg';\nvar DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';\nvar DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending';\nvar DATA_PREFIX = 'data-prefix';\nvar DATA_ICON = 'data-icon';\nvar HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';\nvar MUTATION_APPROACH_ASYNC = 'async';\nvar TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];\nvar PRODUCTION = function () {\n try {\n return process.env.NODE_ENV === 'production';\n } catch (e) {\n return false;\n }\n}();\nvar FAMILY_CLASSIC = 'classic';\nvar FAMILY_SHARP = 'sharp';\nvar FAMILIES = [FAMILY_CLASSIC, FAMILY_SHARP];\n\nfunction familyProxy(obj) {\n // Defaults to the classic family if family is not available\n return new Proxy(obj, {\n get: function get(target, prop) {\n return prop in target ? target[prop] : target[FAMILY_CLASSIC];\n }\n });\n}\nvar PREFIX_TO_STYLE = familyProxy((_familyProxy = {}, _defineProperty(_familyProxy, FAMILY_CLASSIC, {\n 'fa': 'solid',\n 'fas': 'solid',\n 'fa-solid': 'solid',\n 'far': 'regular',\n 'fa-regular': 'regular',\n 'fal': 'light',\n 'fa-light': 'light',\n 'fat': 'thin',\n 'fa-thin': 'thin',\n 'fad': 'duotone',\n 'fa-duotone': 'duotone',\n 'fab': 'brands',\n 'fa-brands': 'brands',\n 'fak': 'kit',\n 'fakd': 'kit',\n 'fa-kit': 'kit',\n 'fa-kit-duotone': 'kit'\n}), _defineProperty(_familyProxy, FAMILY_SHARP, {\n 'fa': 'solid',\n 'fass': 'solid',\n 'fa-solid': 'solid',\n 'fasr': 'regular',\n 'fa-regular': 'regular',\n 'fasl': 'light',\n 'fa-light': 'light',\n 'fast': 'thin',\n 'fa-thin': 'thin'\n}), _familyProxy));\nvar STYLE_TO_PREFIX = familyProxy((_familyProxy2 = {}, _defineProperty(_familyProxy2, FAMILY_CLASSIC, {\n solid: 'fas',\n regular: 'far',\n light: 'fal',\n thin: 'fat',\n duotone: 'fad',\n brands: 'fab',\n kit: 'fak'\n}), _defineProperty(_familyProxy2, FAMILY_SHARP, {\n solid: 'fass',\n regular: 'fasr',\n light: 'fasl',\n thin: 'fast'\n}), _familyProxy2));\nvar PREFIX_TO_LONG_STYLE = familyProxy((_familyProxy3 = {}, _defineProperty(_familyProxy3, FAMILY_CLASSIC, {\n fab: 'fa-brands',\n fad: 'fa-duotone',\n fak: 'fa-kit',\n fal: 'fa-light',\n far: 'fa-regular',\n fas: 'fa-solid',\n fat: 'fa-thin'\n}), _defineProperty(_familyProxy3, FAMILY_SHARP, {\n fass: 'fa-solid',\n fasr: 'fa-regular',\n fasl: 'fa-light',\n fast: 'fa-thin'\n}), _familyProxy3));\nvar LONG_STYLE_TO_PREFIX = familyProxy((_familyProxy4 = {}, _defineProperty(_familyProxy4, FAMILY_CLASSIC, {\n 'fa-brands': 'fab',\n 'fa-duotone': 'fad',\n 'fa-kit': 'fak',\n 'fa-light': 'fal',\n 'fa-regular': 'far',\n 'fa-solid': 'fas',\n 'fa-thin': 'fat'\n}), _defineProperty(_familyProxy4, FAMILY_SHARP, {\n 'fa-solid': 'fass',\n 'fa-regular': 'fasr',\n 'fa-light': 'fasl',\n 'fa-thin': 'fast'\n}), _familyProxy4));\nvar ICON_SELECTION_SYNTAX_PATTERN = /fa(s|r|l|t|d|b|k|ss|sr|sl|st)?[\\-\\ ]/; // eslint-disable-line no-useless-escape\n\nvar LAYERS_TEXT_CLASSNAME = 'fa-layers-text';\nvar FONT_FAMILY_PATTERN = /Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp|Kit)?.*/i;\nvar FONT_WEIGHT_TO_PREFIX = familyProxy((_familyProxy5 = {}, _defineProperty(_familyProxy5, FAMILY_CLASSIC, {\n 900: 'fas',\n 400: 'far',\n normal: 'far',\n 300: 'fal',\n 100: 'fat'\n}), _defineProperty(_familyProxy5, FAMILY_SHARP, {\n 900: 'fass',\n 400: 'fasr',\n 300: 'fasl',\n 100: 'fast'\n}), _familyProxy5));\nvar oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\nvar oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\nvar ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];\nvar DUOTONE_CLASSES = {\n GROUP: 'duotone-group',\n SWAP_OPACITY: 'swap-opacity',\n PRIMARY: 'primary',\n SECONDARY: 'secondary'\n};\nvar prefixes = new Set();\nObject.keys(STYLE_TO_PREFIX[FAMILY_CLASSIC]).map(prefixes.add.bind(prefixes));\nObject.keys(STYLE_TO_PREFIX[FAMILY_SHARP]).map(prefixes.add.bind(prefixes));\nvar RESERVED_CLASSES = [].concat(FAMILIES, _toConsumableArray(prefixes), ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', 'beat', 'border', 'fade', 'beat-fade', 'bounce', 'flip-both', 'flip-horizontal', 'flip-vertical', 'flip', 'fw', 'inverse', 'layers-counter', 'layers-text', 'layers', 'li', 'pull-left', 'pull-right', 'pulse', 'rotate-180', 'rotate-270', 'rotate-90', 'rotate-by', 'shake', 'spin-pulse', 'spin-reverse', 'spin', 'stack-1x', 'stack-2x', 'stack', 'ul', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function (n) {\n return \"\".concat(n, \"x\");\n})).concat(oneToTwenty.map(function (n) {\n return \"w-\".concat(n);\n}));\n\nvar initial = WINDOW.FontAwesomeConfig || {};\n\nfunction getAttrConfig(attr) {\n var element = DOCUMENT.querySelector('script[' + attr + ']');\n\n if (element) {\n return element.getAttribute(attr);\n }\n}\n\nfunction coerce(val) {\n // Getting an empty string will occur if the attribute is set on the HTML tag but without a value\n // We'll assume that this is an indication that it should be toggled to true\n if (val === '') return true;\n if (val === 'false') return false;\n if (val === 'true') return true;\n return val;\n}\n\nif (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n var attrs = [['data-family-prefix', 'familyPrefix'], ['data-css-prefix', 'cssPrefix'], ['data-family-default', 'familyDefault'], ['data-style-default', 'styleDefault'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n attrs.forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n attr = _ref2[0],\n key = _ref2[1];\n\n var val = coerce(getAttrConfig(attr));\n\n if (val !== undefined && val !== null) {\n initial[key] = val;\n }\n });\n}\n\nvar _default = {\n styleDefault: 'solid',\n familyDefault: 'classic',\n cssPrefix: DEFAULT_CSS_PREFIX,\n replacementClass: DEFAULT_REPLACEMENT_CLASS,\n autoReplaceSvg: true,\n autoAddCss: true,\n autoA11y: true,\n searchPseudoElements: false,\n observeMutations: true,\n mutateApproach: 'async',\n keepOriginalSource: true,\n measurePerformance: false,\n showMissingIcons: true\n}; // familyPrefix is deprecated but we must still support it if present\n\nif (initial.familyPrefix) {\n initial.cssPrefix = initial.familyPrefix;\n}\n\nvar _config = _objectSpread2(_objectSpread2({}, _default), initial);\n\nif (!_config.autoReplaceSvg) _config.observeMutations = false;\nvar config = {};\nObject.keys(_default).forEach(function (key) {\n Object.defineProperty(config, key, {\n enumerable: true,\n set: function set(val) {\n _config[key] = val;\n\n _onChangeCb.forEach(function (cb) {\n return cb(config);\n });\n },\n get: function get() {\n return _config[key];\n }\n });\n}); // familyPrefix is deprecated as of 6.2.0 and should be removed in 7.0.0\n\nObject.defineProperty(config, 'familyPrefix', {\n enumerable: true,\n set: function set(val) {\n _config.cssPrefix = val;\n\n _onChangeCb.forEach(function (cb) {\n return cb(config);\n });\n },\n get: function get() {\n return _config.cssPrefix;\n }\n});\nWINDOW.FontAwesomeConfig = config;\nvar _onChangeCb = [];\nfunction onChange(cb) {\n _onChangeCb.push(cb);\n\n return function () {\n _onChangeCb.splice(_onChangeCb.indexOf(cb), 1);\n };\n}\n\nvar d = UNITS_IN_GRID;\nvar meaninglessTransform = {\n size: 16,\n x: 0,\n y: 0,\n rotate: 0,\n flipX: false,\n flipY: false\n};\nfunction insertCss(css) {\n if (!css || !IS_DOM) {\n return;\n }\n\n var style = DOCUMENT.createElement('style');\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n var headChildren = DOCUMENT.head.childNodes;\n var beforeChild = null;\n\n for (var i = headChildren.length - 1; i > -1; i--) {\n var child = headChildren[i];\n var tagName = (child.tagName || '').toUpperCase();\n\n if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n beforeChild = child;\n }\n }\n\n DOCUMENT.head.insertBefore(style, beforeChild);\n return css;\n}\nvar idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\nfunction nextUniqueId() {\n var size = 12;\n var id = '';\n\n while (size-- > 0) {\n id += idPool[Math.random() * 62 | 0];\n }\n\n return id;\n}\nfunction toArray(obj) {\n var array = [];\n\n for (var i = (obj || []).length >>> 0; i--;) {\n array[i] = obj[i];\n }\n\n return array;\n}\nfunction classArray(node) {\n if (node.classList) {\n return toArray(node.classList);\n } else {\n return (node.getAttribute('class') || '').split(' ').filter(function (i) {\n return i;\n });\n }\n}\nfunction htmlEscape(str) {\n return \"\".concat(str).replace(/&/g, '&').replace(/\"/g, '"').replace(/'/g, ''').replace(//g, '>');\n}\nfunction joinAttributes(attributes) {\n return Object.keys(attributes || {}).reduce(function (acc, attributeName) {\n return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n }, '').trim();\n}\nfunction joinStyles(styles) {\n return Object.keys(styles || {}).reduce(function (acc, styleName) {\n return acc + \"\".concat(styleName, \": \").concat(styles[styleName].trim(), \";\");\n }, '');\n}\nfunction transformIsMeaningful(transform) {\n return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n}\nfunction transformForSvg(_ref) {\n var transform = _ref.transform,\n containerWidth = _ref.containerWidth,\n iconWidth = _ref.iconWidth;\n var outer = {\n transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n };\n var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n var inner = {\n transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n };\n var path = {\n transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n };\n return {\n outer: outer,\n inner: inner,\n path: path\n };\n}\nfunction transformForCss(_ref2) {\n var transform = _ref2.transform,\n _ref2$width = _ref2.width,\n width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width,\n _ref2$height = _ref2.height,\n height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height,\n _ref2$startCentered = _ref2.startCentered,\n startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered;\n var val = '';\n\n if (startCentered && IS_IE) {\n val += \"translate(\".concat(transform.x / d - width / 2, \"em, \").concat(transform.y / d - height / 2, \"em) \");\n } else if (startCentered) {\n val += \"translate(calc(-50% + \".concat(transform.x / d, \"em), calc(-50% + \").concat(transform.y / d, \"em)) \");\n } else {\n val += \"translate(\".concat(transform.x / d, \"em, \").concat(transform.y / d, \"em) \");\n }\n\n val += \"scale(\".concat(transform.size / d * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d * (transform.flipY ? -1 : 1), \") \");\n val += \"rotate(\".concat(transform.rotate, \"deg) \");\n return val;\n}\n\nvar baseStyles = \":root, :host {\\n --fa-font-solid: normal 900 1em/1 \\\"Font Awesome 6 Solid\\\";\\n --fa-font-regular: normal 400 1em/1 \\\"Font Awesome 6 Regular\\\";\\n --fa-font-light: normal 300 1em/1 \\\"Font Awesome 6 Light\\\";\\n --fa-font-thin: normal 100 1em/1 \\\"Font Awesome 6 Thin\\\";\\n --fa-font-duotone: normal 900 1em/1 \\\"Font Awesome 6 Duotone\\\";\\n --fa-font-sharp-solid: normal 900 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n --fa-font-sharp-regular: normal 400 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n --fa-font-sharp-light: normal 300 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n --fa-font-sharp-thin: normal 100 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n --fa-font-brands: normal 400 1em/1 \\\"Font Awesome 6 Brands\\\";\\n}\\n\\nsvg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {\\n overflow: visible;\\n box-sizing: content-box;\\n}\\n\\n.svg-inline--fa {\\n display: var(--fa-display, inline-block);\\n height: 1em;\\n overflow: visible;\\n vertical-align: -0.125em;\\n}\\n.svg-inline--fa.fa-2xs {\\n vertical-align: 0.1em;\\n}\\n.svg-inline--fa.fa-xs {\\n vertical-align: 0em;\\n}\\n.svg-inline--fa.fa-sm {\\n vertical-align: -0.0714285705em;\\n}\\n.svg-inline--fa.fa-lg {\\n vertical-align: -0.2em;\\n}\\n.svg-inline--fa.fa-xl {\\n vertical-align: -0.25em;\\n}\\n.svg-inline--fa.fa-2xl {\\n vertical-align: -0.3125em;\\n}\\n.svg-inline--fa.fa-pull-left {\\n margin-right: var(--fa-pull-margin, 0.3em);\\n width: auto;\\n}\\n.svg-inline--fa.fa-pull-right {\\n margin-left: var(--fa-pull-margin, 0.3em);\\n width: auto;\\n}\\n.svg-inline--fa.fa-li {\\n width: var(--fa-li-width, 2em);\\n top: 0.25em;\\n}\\n.svg-inline--fa.fa-fw {\\n width: var(--fa-fw-width, 1.25em);\\n}\\n\\n.fa-layers svg.svg-inline--fa {\\n bottom: 0;\\n left: 0;\\n margin: auto;\\n position: absolute;\\n right: 0;\\n top: 0;\\n}\\n\\n.fa-layers-counter, .fa-layers-text {\\n display: inline-block;\\n position: absolute;\\n text-align: center;\\n}\\n\\n.fa-layers {\\n display: inline-block;\\n height: 1em;\\n position: relative;\\n text-align: center;\\n vertical-align: -0.125em;\\n width: 1em;\\n}\\n.fa-layers svg.svg-inline--fa {\\n -webkit-transform-origin: center center;\\n transform-origin: center center;\\n}\\n\\n.fa-layers-text {\\n left: 50%;\\n top: 50%;\\n -webkit-transform: translate(-50%, -50%);\\n transform: translate(-50%, -50%);\\n -webkit-transform-origin: center center;\\n transform-origin: center center;\\n}\\n\\n.fa-layers-counter {\\n background-color: var(--fa-counter-background-color, #ff253a);\\n border-radius: var(--fa-counter-border-radius, 1em);\\n box-sizing: border-box;\\n color: var(--fa-inverse, #fff);\\n line-height: var(--fa-counter-line-height, 1);\\n max-width: var(--fa-counter-max-width, 5em);\\n min-width: var(--fa-counter-min-width, 1.5em);\\n overflow: hidden;\\n padding: var(--fa-counter-padding, 0.25em 0.5em);\\n right: var(--fa-right, 0);\\n text-overflow: ellipsis;\\n top: var(--fa-top, 0);\\n -webkit-transform: scale(var(--fa-counter-scale, 0.25));\\n transform: scale(var(--fa-counter-scale, 0.25));\\n -webkit-transform-origin: top right;\\n transform-origin: top right;\\n}\\n\\n.fa-layers-bottom-right {\\n bottom: var(--fa-bottom, 0);\\n right: var(--fa-right, 0);\\n top: auto;\\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\\n transform: scale(var(--fa-layers-scale, 0.25));\\n -webkit-transform-origin: bottom right;\\n transform-origin: bottom right;\\n}\\n\\n.fa-layers-bottom-left {\\n bottom: var(--fa-bottom, 0);\\n left: var(--fa-left, 0);\\n right: auto;\\n top: auto;\\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\\n transform: scale(var(--fa-layers-scale, 0.25));\\n -webkit-transform-origin: bottom left;\\n transform-origin: bottom left;\\n}\\n\\n.fa-layers-top-right {\\n top: var(--fa-top, 0);\\n right: var(--fa-right, 0);\\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\\n transform: scale(var(--fa-layers-scale, 0.25));\\n -webkit-transform-origin: top right;\\n transform-origin: top right;\\n}\\n\\n.fa-layers-top-left {\\n left: var(--fa-left, 0);\\n right: auto;\\n top: var(--fa-top, 0);\\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\\n transform: scale(var(--fa-layers-scale, 0.25));\\n -webkit-transform-origin: top left;\\n transform-origin: top left;\\n}\\n\\n.fa-1x {\\n font-size: 1em;\\n}\\n\\n.fa-2x {\\n font-size: 2em;\\n}\\n\\n.fa-3x {\\n font-size: 3em;\\n}\\n\\n.fa-4x {\\n font-size: 4em;\\n}\\n\\n.fa-5x {\\n font-size: 5em;\\n}\\n\\n.fa-6x {\\n font-size: 6em;\\n}\\n\\n.fa-7x {\\n font-size: 7em;\\n}\\n\\n.fa-8x {\\n font-size: 8em;\\n}\\n\\n.fa-9x {\\n font-size: 9em;\\n}\\n\\n.fa-10x {\\n font-size: 10em;\\n}\\n\\n.fa-2xs {\\n font-size: 0.625em;\\n line-height: 0.1em;\\n vertical-align: 0.225em;\\n}\\n\\n.fa-xs {\\n font-size: 0.75em;\\n line-height: 0.0833333337em;\\n vertical-align: 0.125em;\\n}\\n\\n.fa-sm {\\n font-size: 0.875em;\\n line-height: 0.0714285718em;\\n vertical-align: 0.0535714295em;\\n}\\n\\n.fa-lg {\\n font-size: 1.25em;\\n line-height: 0.05em;\\n vertical-align: -0.075em;\\n}\\n\\n.fa-xl {\\n font-size: 1.5em;\\n line-height: 0.0416666682em;\\n vertical-align: -0.125em;\\n}\\n\\n.fa-2xl {\\n font-size: 2em;\\n line-height: 0.03125em;\\n vertical-align: -0.1875em;\\n}\\n\\n.fa-fw {\\n text-align: center;\\n width: 1.25em;\\n}\\n\\n.fa-ul {\\n list-style-type: none;\\n margin-left: var(--fa-li-margin, 2.5em);\\n padding-left: 0;\\n}\\n.fa-ul > li {\\n position: relative;\\n}\\n\\n.fa-li {\\n left: calc(var(--fa-li-width, 2em) * -1);\\n position: absolute;\\n text-align: center;\\n width: var(--fa-li-width, 2em);\\n line-height: inherit;\\n}\\n\\n.fa-border {\\n border-color: var(--fa-border-color, #eee);\\n border-radius: var(--fa-border-radius, 0.1em);\\n border-style: var(--fa-border-style, solid);\\n border-width: var(--fa-border-width, 0.08em);\\n padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\\n}\\n\\n.fa-pull-left {\\n float: left;\\n margin-right: var(--fa-pull-margin, 0.3em);\\n}\\n\\n.fa-pull-right {\\n float: right;\\n margin-left: var(--fa-pull-margin, 0.3em);\\n}\\n\\n.fa-beat {\\n -webkit-animation-name: fa-beat;\\n animation-name: fa-beat;\\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n animation-delay: var(--fa-animation-delay, 0s);\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n animation-duration: var(--fa-animation-duration, 1s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-bounce {\\n -webkit-animation-name: fa-bounce;\\n animation-name: fa-bounce;\\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n animation-delay: var(--fa-animation-delay, 0s);\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n animation-duration: var(--fa-animation-duration, 1s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\\n}\\n\\n.fa-fade {\\n -webkit-animation-name: fa-fade;\\n animation-name: fa-fade;\\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n animation-delay: var(--fa-animation-delay, 0s);\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n animation-duration: var(--fa-animation-duration, 1s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n}\\n\\n.fa-beat-fade {\\n -webkit-animation-name: fa-beat-fade;\\n animation-name: fa-beat-fade;\\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n animation-delay: var(--fa-animation-delay, 0s);\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n animation-duration: var(--fa-animation-duration, 1s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n}\\n\\n.fa-flip {\\n -webkit-animation-name: fa-flip;\\n animation-name: fa-flip;\\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n animation-delay: var(--fa-animation-delay, 0s);\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n animation-duration: var(--fa-animation-duration, 1s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-shake {\\n -webkit-animation-name: fa-shake;\\n animation-name: fa-shake;\\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n animation-delay: var(--fa-animation-delay, 0s);\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n animation-duration: var(--fa-animation-duration, 1s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, linear);\\n animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-spin {\\n -webkit-animation-name: fa-spin;\\n animation-name: fa-spin;\\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n animation-delay: var(--fa-animation-delay, 0s);\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 2s);\\n animation-duration: var(--fa-animation-duration, 2s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, linear);\\n animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-spin-reverse {\\n --fa-animation-direction: reverse;\\n}\\n\\n.fa-pulse,\\n.fa-spin-pulse {\\n -webkit-animation-name: fa-spin;\\n animation-name: fa-spin;\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n animation-duration: var(--fa-animation-duration, 1s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));\\n animation-timing-function: var(--fa-animation-timing, steps(8));\\n}\\n\\n@media (prefers-reduced-motion: reduce) {\\n .fa-beat,\\n.fa-bounce,\\n.fa-fade,\\n.fa-beat-fade,\\n.fa-flip,\\n.fa-pulse,\\n.fa-shake,\\n.fa-spin,\\n.fa-spin-pulse {\\n -webkit-animation-delay: -1ms;\\n animation-delay: -1ms;\\n -webkit-animation-duration: 1ms;\\n animation-duration: 1ms;\\n -webkit-animation-iteration-count: 1;\\n animation-iteration-count: 1;\\n -webkit-transition-delay: 0s;\\n transition-delay: 0s;\\n -webkit-transition-duration: 0s;\\n transition-duration: 0s;\\n }\\n}\\n@-webkit-keyframes fa-beat {\\n 0%, 90% {\\n -webkit-transform: scale(1);\\n transform: scale(1);\\n }\\n 45% {\\n -webkit-transform: scale(var(--fa-beat-scale, 1.25));\\n transform: scale(var(--fa-beat-scale, 1.25));\\n }\\n}\\n@keyframes fa-beat {\\n 0%, 90% {\\n -webkit-transform: scale(1);\\n transform: scale(1);\\n }\\n 45% {\\n -webkit-transform: scale(var(--fa-beat-scale, 1.25));\\n transform: scale(var(--fa-beat-scale, 1.25));\\n }\\n}\\n@-webkit-keyframes fa-bounce {\\n 0% {\\n -webkit-transform: scale(1, 1) translateY(0);\\n transform: scale(1, 1) translateY(0);\\n }\\n 10% {\\n -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\\n }\\n 30% {\\n -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\\n }\\n 50% {\\n -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\\n }\\n 57% {\\n -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\\n }\\n 64% {\\n -webkit-transform: scale(1, 1) translateY(0);\\n transform: scale(1, 1) translateY(0);\\n }\\n 100% {\\n -webkit-transform: scale(1, 1) translateY(0);\\n transform: scale(1, 1) translateY(0);\\n }\\n}\\n@keyframes fa-bounce {\\n 0% {\\n -webkit-transform: scale(1, 1) translateY(0);\\n transform: scale(1, 1) translateY(0);\\n }\\n 10% {\\n -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\\n }\\n 30% {\\n -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\\n }\\n 50% {\\n -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\\n }\\n 57% {\\n -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\\n }\\n 64% {\\n -webkit-transform: scale(1, 1) translateY(0);\\n transform: scale(1, 1) translateY(0);\\n }\\n 100% {\\n -webkit-transform: scale(1, 1) translateY(0);\\n transform: scale(1, 1) translateY(0);\\n }\\n}\\n@-webkit-keyframes fa-fade {\\n 50% {\\n opacity: var(--fa-fade-opacity, 0.4);\\n }\\n}\\n@keyframes fa-fade {\\n 50% {\\n opacity: var(--fa-fade-opacity, 0.4);\\n }\\n}\\n@-webkit-keyframes fa-beat-fade {\\n 0%, 100% {\\n opacity: var(--fa-beat-fade-opacity, 0.4);\\n -webkit-transform: scale(1);\\n transform: scale(1);\\n }\\n 50% {\\n opacity: 1;\\n -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\\n transform: scale(var(--fa-beat-fade-scale, 1.125));\\n }\\n}\\n@keyframes fa-beat-fade {\\n 0%, 100% {\\n opacity: var(--fa-beat-fade-opacity, 0.4);\\n -webkit-transform: scale(1);\\n transform: scale(1);\\n }\\n 50% {\\n opacity: 1;\\n -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\\n transform: scale(var(--fa-beat-fade-scale, 1.125));\\n }\\n}\\n@-webkit-keyframes fa-flip {\\n 50% {\\n -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\\n }\\n}\\n@keyframes fa-flip {\\n 50% {\\n -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\\n }\\n}\\n@-webkit-keyframes fa-shake {\\n 0% {\\n -webkit-transform: rotate(-15deg);\\n transform: rotate(-15deg);\\n }\\n 4% {\\n -webkit-transform: rotate(15deg);\\n transform: rotate(15deg);\\n }\\n 8%, 24% {\\n -webkit-transform: rotate(-18deg);\\n transform: rotate(-18deg);\\n }\\n 12%, 28% {\\n -webkit-transform: rotate(18deg);\\n transform: rotate(18deg);\\n }\\n 16% {\\n -webkit-transform: rotate(-22deg);\\n transform: rotate(-22deg);\\n }\\n 20% {\\n -webkit-transform: rotate(22deg);\\n transform: rotate(22deg);\\n }\\n 32% {\\n -webkit-transform: rotate(-12deg);\\n transform: rotate(-12deg);\\n }\\n 36% {\\n -webkit-transform: rotate(12deg);\\n transform: rotate(12deg);\\n }\\n 40%, 100% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n}\\n@keyframes fa-shake {\\n 0% {\\n -webkit-transform: rotate(-15deg);\\n transform: rotate(-15deg);\\n }\\n 4% {\\n -webkit-transform: rotate(15deg);\\n transform: rotate(15deg);\\n }\\n 8%, 24% {\\n -webkit-transform: rotate(-18deg);\\n transform: rotate(-18deg);\\n }\\n 12%, 28% {\\n -webkit-transform: rotate(18deg);\\n transform: rotate(18deg);\\n }\\n 16% {\\n -webkit-transform: rotate(-22deg);\\n transform: rotate(-22deg);\\n }\\n 20% {\\n -webkit-transform: rotate(22deg);\\n transform: rotate(22deg);\\n }\\n 32% {\\n -webkit-transform: rotate(-12deg);\\n transform: rotate(-12deg);\\n }\\n 36% {\\n -webkit-transform: rotate(12deg);\\n transform: rotate(12deg);\\n }\\n 40%, 100% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n}\\n@-webkit-keyframes fa-spin {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n@keyframes fa-spin {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n.fa-rotate-90 {\\n -webkit-transform: rotate(90deg);\\n transform: rotate(90deg);\\n}\\n\\n.fa-rotate-180 {\\n -webkit-transform: rotate(180deg);\\n transform: rotate(180deg);\\n}\\n\\n.fa-rotate-270 {\\n -webkit-transform: rotate(270deg);\\n transform: rotate(270deg);\\n}\\n\\n.fa-flip-horizontal {\\n -webkit-transform: scale(-1, 1);\\n transform: scale(-1, 1);\\n}\\n\\n.fa-flip-vertical {\\n -webkit-transform: scale(1, -1);\\n transform: scale(1, -1);\\n}\\n\\n.fa-flip-both,\\n.fa-flip-horizontal.fa-flip-vertical {\\n -webkit-transform: scale(-1, -1);\\n transform: scale(-1, -1);\\n}\\n\\n.fa-rotate-by {\\n -webkit-transform: rotate(var(--fa-rotate-angle, 0));\\n transform: rotate(var(--fa-rotate-angle, 0));\\n}\\n\\n.fa-stack {\\n display: inline-block;\\n vertical-align: middle;\\n height: 2em;\\n position: relative;\\n width: 2.5em;\\n}\\n\\n.fa-stack-1x,\\n.fa-stack-2x {\\n bottom: 0;\\n left: 0;\\n margin: auto;\\n position: absolute;\\n right: 0;\\n top: 0;\\n z-index: var(--fa-stack-z-index, auto);\\n}\\n\\n.svg-inline--fa.fa-stack-1x {\\n height: 1em;\\n width: 1.25em;\\n}\\n.svg-inline--fa.fa-stack-2x {\\n height: 2em;\\n width: 2.5em;\\n}\\n\\n.fa-inverse {\\n color: var(--fa-inverse, #fff);\\n}\\n\\n.sr-only,\\n.fa-sr-only {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip: rect(0, 0, 0, 0);\\n white-space: nowrap;\\n border-width: 0;\\n}\\n\\n.sr-only-focusable:not(:focus),\\n.fa-sr-only-focusable:not(:focus) {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip: rect(0, 0, 0, 0);\\n white-space: nowrap;\\n border-width: 0;\\n}\\n\\n.svg-inline--fa .fa-primary {\\n fill: var(--fa-primary-color, currentColor);\\n opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa .fa-secondary {\\n fill: var(--fa-secondary-color, currentColor);\\n opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-primary {\\n opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\\n opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa mask .fa-primary,\\n.svg-inline--fa mask .fa-secondary {\\n fill: black;\\n}\\n\\n.fad.fa-inverse,\\n.fa-duotone.fa-inverse {\\n color: var(--fa-inverse, #fff);\\n}\";\n\nfunction css() {\n var dcp = DEFAULT_CSS_PREFIX;\n var drc = DEFAULT_REPLACEMENT_CLASS;\n var fp = config.cssPrefix;\n var rc = config.replacementClass;\n var s = baseStyles;\n\n if (fp !== dcp || rc !== drc) {\n var dPatt = new RegExp(\"\\\\.\".concat(dcp, \"\\\\-\"), 'g');\n var customPropPatt = new RegExp(\"\\\\--\".concat(dcp, \"\\\\-\"), 'g');\n var rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(customPropPatt, \"--\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n }\n\n return s;\n}\n\nvar _cssInserted = false;\n\nfunction ensureCss() {\n if (config.autoAddCss && !_cssInserted) {\n insertCss(css());\n _cssInserted = true;\n }\n}\n\nvar InjectCSS = {\n mixout: function mixout() {\n return {\n dom: {\n css: css,\n insertCss: ensureCss\n }\n };\n },\n hooks: function hooks() {\n return {\n beforeDOMElementCreation: function beforeDOMElementCreation() {\n ensureCss();\n },\n beforeI2svg: function beforeI2svg() {\n ensureCss();\n }\n };\n }\n};\n\nvar w = WINDOW || {};\nif (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\nif (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\nif (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\nif (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\nvar namespace = w[NAMESPACE_IDENTIFIER];\n\nvar functions = [];\n\nvar listener = function listener() {\n DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n loaded = 1;\n functions.map(function (fn) {\n return fn();\n });\n};\n\nvar loaded = false;\n\nif (IS_DOM) {\n loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n}\n\nfunction domready (fn) {\n if (!IS_DOM) return;\n loaded ? setTimeout(fn, 0) : functions.push(fn);\n}\n\nfunction toHtml(abstractNodes) {\n var tag = abstractNodes.tag,\n _abstractNodes$attrib = abstractNodes.attributes,\n attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib,\n _abstractNodes$childr = abstractNodes.children,\n children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr;\n\n if (typeof abstractNodes === 'string') {\n return htmlEscape(abstractNodes);\n } else {\n return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"\");\n }\n}\n\nfunction iconFromMapping(mapping, prefix, iconName) {\n if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n return {\n prefix: prefix,\n iconName: iconName,\n icon: mapping[prefix][iconName]\n };\n }\n}\n\n/**\n * Internal helper to bind a function known to have 4 arguments\n * to a given context.\n */\n\nvar bindInternal4 = function bindInternal4(func, thisContext) {\n return function (a, b, c, d) {\n return func.call(thisContext, a, b, c, d);\n };\n};\n\n/**\n * # Reduce\n *\n * A fast object `.reduce()` implementation.\n *\n * @param {Object} subject The object to reduce over.\n * @param {Function} fn The reducer function.\n * @param {mixed} initialValue The initial value for the reducer, defaults to subject[0].\n * @param {Object} thisContext The context for the reducer.\n * @return {mixed} The final result.\n */\n\n\nvar reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n var keys = Object.keys(subject),\n length = keys.length,\n iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n i,\n key,\n result;\n\n if (initialValue === undefined) {\n i = 1;\n result = subject[keys[0]];\n } else {\n i = 0;\n result = initialValue;\n }\n\n for (; i < length; i++) {\n key = keys[i];\n result = iterator(result, subject[key], key, subject);\n }\n\n return result;\n};\n\n/**\n * ucs2decode() and codePointAt() are both works of Mathias Bynens and licensed under MIT\n *\n * Copyright Mathias Bynens \n\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\nfunction ucs2decode(string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n\n while (counter < length) {\n var value = string.charCodeAt(counter++);\n\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n var extra = string.charCodeAt(counter++);\n\n if ((extra & 0xFC00) == 0xDC00) {\n // eslint-disable-line eqeqeq\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n\n return output;\n}\n\nfunction toHex(unicode) {\n var decoded = ucs2decode(unicode);\n return decoded.length === 1 ? decoded[0].toString(16) : null;\n}\nfunction codePointAt(string, index) {\n var size = string.length;\n var first = string.charCodeAt(index);\n var second;\n\n if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) {\n second = string.charCodeAt(index + 1);\n\n if (second >= 0xDC00 && second <= 0xDFFF) {\n return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n\n return first;\n}\n\nfunction normalizeIcons(icons) {\n return Object.keys(icons).reduce(function (acc, iconName) {\n var icon = icons[iconName];\n var expanded = !!icon.icon;\n\n if (expanded) {\n acc[icon.iconName] = icon.icon;\n } else {\n acc[iconName] = icon;\n }\n\n return acc;\n }, {});\n}\n\nfunction defineIcons(prefix, icons) {\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _params$skipHooks = params.skipHooks,\n skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n var normalized = normalizeIcons(icons);\n\n if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n namespace.hooks.addPack(prefix, normalizeIcons(icons));\n } else {\n namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n }\n /**\n * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n * for `fas` so we'll ease the upgrade process for our users by automatically defining\n * this as well.\n */\n\n\n if (prefix === 'fas') {\n defineIcons('fa', icons);\n }\n}\n\nvar duotonePathRe = [/*#__PURE__*/_wrapRegExp(/path d=\"((?:(?!\")[\\s\\S])+)\".*path d=\"((?:(?!\")[\\s\\S])+)\"/, {\n d1: 1,\n d2: 2\n}), /*#__PURE__*/_wrapRegExp(/path class=\"((?:(?!\")[\\s\\S])+)\".*d=\"((?:(?!\")[\\s\\S])+)\".*path class=\"((?:(?!\")[\\s\\S])+)\".*d=\"((?:(?!\")[\\s\\S])+)\"/, {\n cls1: 1,\n d1: 2,\n cls2: 3,\n d2: 4\n}), /*#__PURE__*/_wrapRegExp(/path class=\"((?:(?!\")[\\s\\S])+)\".*d=\"((?:(?!\")[\\s\\S])+)\"/, {\n cls1: 1,\n d1: 2\n})];\n\nvar _LONG_STYLE, _PREFIXES, _PREFIXES_FOR_FAMILY;\nvar styles = namespace.styles,\n shims = namespace.shims;\nvar LONG_STYLE = (_LONG_STYLE = {}, _defineProperty(_LONG_STYLE, FAMILY_CLASSIC, Object.values(PREFIX_TO_LONG_STYLE[FAMILY_CLASSIC])), _defineProperty(_LONG_STYLE, FAMILY_SHARP, Object.values(PREFIX_TO_LONG_STYLE[FAMILY_SHARP])), _LONG_STYLE);\nvar _defaultUsablePrefix = null;\nvar _byUnicode = {};\nvar _byLigature = {};\nvar _byOldName = {};\nvar _byOldUnicode = {};\nvar _byAlias = {};\nvar PREFIXES = (_PREFIXES = {}, _defineProperty(_PREFIXES, FAMILY_CLASSIC, Object.keys(PREFIX_TO_STYLE[FAMILY_CLASSIC])), _defineProperty(_PREFIXES, FAMILY_SHARP, Object.keys(PREFIX_TO_STYLE[FAMILY_SHARP])), _PREFIXES);\n\nfunction isReserved(name) {\n return ~RESERVED_CLASSES.indexOf(name);\n}\n\nfunction getIconName(cssPrefix, cls) {\n var parts = cls.split('-');\n var prefix = parts[0];\n var iconName = parts.slice(1).join('-');\n\n if (prefix === cssPrefix && iconName !== '' && !isReserved(iconName)) {\n return iconName;\n } else {\n return null;\n }\n}\nvar build = function build() {\n var lookup = function lookup(reducer) {\n return reduce(styles, function (o, style, prefix) {\n o[prefix] = reduce(style, reducer, {});\n return o;\n }, {});\n };\n\n _byUnicode = lookup(function (acc, icon, iconName) {\n if (icon[3]) {\n acc[icon[3]] = iconName;\n }\n\n if (icon[2]) {\n var aliases = icon[2].filter(function (a) {\n return typeof a === 'number';\n });\n aliases.forEach(function (alias) {\n acc[alias.toString(16)] = iconName;\n });\n }\n\n return acc;\n });\n _byLigature = lookup(function (acc, icon, iconName) {\n acc[iconName] = iconName;\n\n if (icon[2]) {\n var aliases = icon[2].filter(function (a) {\n return typeof a === 'string';\n });\n aliases.forEach(function (alias) {\n acc[alias] = iconName;\n });\n }\n\n return acc;\n });\n _byAlias = lookup(function (acc, icon, iconName) {\n var aliases = icon[2];\n acc[iconName] = iconName;\n aliases.forEach(function (alias) {\n acc[alias] = iconName;\n });\n return acc;\n }); // If we have a Kit, we can't determine if regular is available since we\n // could be auto-fetching it. We'll have to assume that it is available.\n\n var hasRegular = 'far' in styles || config.autoFetchSvg;\n var shimLookups = reduce(shims, function (acc, shim) {\n var maybeNameMaybeUnicode = shim[0];\n var prefix = shim[1];\n var iconName = shim[2];\n\n if (prefix === 'far' && !hasRegular) {\n prefix = 'fas';\n }\n\n if (typeof maybeNameMaybeUnicode === 'string') {\n acc.names[maybeNameMaybeUnicode] = {\n prefix: prefix,\n iconName: iconName\n };\n }\n\n if (typeof maybeNameMaybeUnicode === 'number') {\n acc.unicodes[maybeNameMaybeUnicode.toString(16)] = {\n prefix: prefix,\n iconName: iconName\n };\n }\n\n return acc;\n }, {\n names: {},\n unicodes: {}\n });\n _byOldName = shimLookups.names;\n _byOldUnicode = shimLookups.unicodes;\n _defaultUsablePrefix = getCanonicalPrefix(config.styleDefault, {\n family: config.familyDefault\n });\n};\nonChange(function (c) {\n _defaultUsablePrefix = getCanonicalPrefix(c.styleDefault, {\n family: config.familyDefault\n });\n});\nbuild();\nfunction byUnicode(prefix, unicode) {\n return (_byUnicode[prefix] || {})[unicode];\n}\nfunction byLigature(prefix, ligature) {\n return (_byLigature[prefix] || {})[ligature];\n}\nfunction byAlias(prefix, alias) {\n return (_byAlias[prefix] || {})[alias];\n}\nfunction byOldName(name) {\n return _byOldName[name] || {\n prefix: null,\n iconName: null\n };\n}\nfunction byOldUnicode(unicode) {\n var oldUnicode = _byOldUnicode[unicode];\n var newUnicode = byUnicode('fas', unicode);\n return oldUnicode || (newUnicode ? {\n prefix: 'fas',\n iconName: newUnicode\n } : null) || {\n prefix: null,\n iconName: null\n };\n}\nfunction getDefaultUsablePrefix() {\n return _defaultUsablePrefix;\n}\nvar emptyCanonicalIcon = function emptyCanonicalIcon() {\n return {\n prefix: null,\n iconName: null,\n rest: []\n };\n};\nfunction getCanonicalPrefix(styleOrPrefix) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$family = params.family,\n family = _params$family === void 0 ? FAMILY_CLASSIC : _params$family;\n var style = PREFIX_TO_STYLE[family][styleOrPrefix];\n var prefix = STYLE_TO_PREFIX[family][styleOrPrefix] || STYLE_TO_PREFIX[family][style];\n var defined = styleOrPrefix in namespace.styles ? styleOrPrefix : null;\n return prefix || defined || null;\n}\nvar PREFIXES_FOR_FAMILY = (_PREFIXES_FOR_FAMILY = {}, _defineProperty(_PREFIXES_FOR_FAMILY, FAMILY_CLASSIC, Object.keys(PREFIX_TO_LONG_STYLE[FAMILY_CLASSIC])), _defineProperty(_PREFIXES_FOR_FAMILY, FAMILY_SHARP, Object.keys(PREFIX_TO_LONG_STYLE[FAMILY_SHARP])), _PREFIXES_FOR_FAMILY);\nfunction getCanonicalIcon(values) {\n var _famProps;\n\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$skipLookups = params.skipLookups,\n skipLookups = _params$skipLookups === void 0 ? false : _params$skipLookups;\n var famProps = (_famProps = {}, _defineProperty(_famProps, FAMILY_CLASSIC, \"\".concat(config.cssPrefix, \"-\").concat(FAMILY_CLASSIC)), _defineProperty(_famProps, FAMILY_SHARP, \"\".concat(config.cssPrefix, \"-\").concat(FAMILY_SHARP)), _famProps);\n var givenPrefix = null;\n var family = FAMILY_CLASSIC;\n\n if (values.includes(famProps[FAMILY_CLASSIC]) || values.some(function (v) {\n return PREFIXES_FOR_FAMILY[FAMILY_CLASSIC].includes(v);\n })) {\n family = FAMILY_CLASSIC;\n }\n\n if (values.includes(famProps[FAMILY_SHARP]) || values.some(function (v) {\n return PREFIXES_FOR_FAMILY[FAMILY_SHARP].includes(v);\n })) {\n family = FAMILY_SHARP;\n }\n\n var canonical = values.reduce(function (acc, cls) {\n var iconName = getIconName(config.cssPrefix, cls);\n\n if (styles[cls]) {\n cls = LONG_STYLE[family].includes(cls) ? LONG_STYLE_TO_PREFIX[family][cls] : cls;\n givenPrefix = cls;\n acc.prefix = cls;\n } else if (PREFIXES[family].indexOf(cls) > -1) {\n givenPrefix = cls;\n acc.prefix = getCanonicalPrefix(cls, {\n family: family\n });\n } else if (iconName) {\n acc.iconName = iconName;\n } else if (cls !== config.replacementClass && cls !== famProps[FAMILY_CLASSIC] && cls !== famProps[FAMILY_SHARP]) {\n acc.rest.push(cls);\n }\n\n if (!skipLookups && acc.prefix && acc.iconName) {\n var shim = givenPrefix === 'fa' ? byOldName(acc.iconName) : {};\n var aliasIconName = byAlias(acc.prefix, acc.iconName);\n\n if (shim.prefix) {\n givenPrefix = null;\n }\n\n acc.iconName = shim.iconName || aliasIconName || acc.iconName;\n acc.prefix = shim.prefix || acc.prefix;\n\n if (acc.prefix === 'far' && !styles['far'] && styles['fas'] && !config.autoFetchSvg) {\n // Allow a fallback from the regular style to solid if regular is not available\n // but only if we aren't auto-fetching SVGs\n acc.prefix = 'fas';\n }\n }\n\n return acc;\n }, emptyCanonicalIcon());\n\n if (values.includes('fa-brands') || values.includes('fab')) {\n canonical.prefix = 'fab';\n }\n\n if (values.includes('fa-duotone') || values.includes('fad')) {\n canonical.prefix = 'fad';\n }\n\n if (!canonical.prefix && family === FAMILY_SHARP && (styles['fass'] || config.autoFetchSvg)) {\n canonical.prefix = 'fass';\n canonical.iconName = byAlias(canonical.prefix, canonical.iconName) || canonical.iconName;\n }\n\n if (canonical.prefix === 'fa' || givenPrefix === 'fa') {\n // The fa prefix is not canonical. So if it has made it through until this point\n // we will shift it to the correct prefix.\n canonical.prefix = getDefaultUsablePrefix() || 'fas';\n }\n\n return canonical;\n}\n\nvar Library = /*#__PURE__*/function () {\n function Library() {\n _classCallCheck(this, Library);\n\n this.definitions = {};\n }\n\n _createClass(Library, [{\n key: \"add\",\n value: function add() {\n var _this = this;\n\n for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n definitions[_key] = arguments[_key];\n }\n\n var additions = definitions.reduce(this._pullDefinitions, {});\n Object.keys(additions).forEach(function (key) {\n _this.definitions[key] = _objectSpread2(_objectSpread2({}, _this.definitions[key] || {}), additions[key]);\n defineIcons(key, additions[key]); // TODO can we stop doing this? We can't get the icons by 'fa-solid' any longer so this probably needs to change\n\n var longPrefix = PREFIX_TO_LONG_STYLE[FAMILY_CLASSIC][key];\n if (longPrefix) defineIcons(longPrefix, additions[key]);\n build();\n });\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.definitions = {};\n }\n }, {\n key: \"_pullDefinitions\",\n value: function _pullDefinitions(additions, definition) {\n var normalized = definition.prefix && definition.iconName && definition.icon ? {\n 0: definition\n } : definition;\n Object.keys(normalized).map(function (key) {\n var _normalized$key = normalized[key],\n prefix = _normalized$key.prefix,\n iconName = _normalized$key.iconName,\n icon = _normalized$key.icon;\n var aliases = icon[2];\n if (!additions[prefix]) additions[prefix] = {};\n\n if (aliases.length > 0) {\n aliases.forEach(function (alias) {\n if (typeof alias === 'string') {\n additions[prefix][alias] = icon;\n }\n });\n }\n\n additions[prefix][iconName] = icon;\n });\n return additions;\n }\n }]);\n\n return Library;\n}();\n\nvar _plugins = [];\nvar _hooks = {};\nvar providers = {};\nvar defaultProviderKeys = Object.keys(providers);\nfunction registerPlugins(nextPlugins, _ref) {\n var obj = _ref.mixoutsTo;\n _plugins = nextPlugins;\n _hooks = {};\n Object.keys(providers).forEach(function (k) {\n if (defaultProviderKeys.indexOf(k) === -1) {\n delete providers[k];\n }\n });\n\n _plugins.forEach(function (plugin) {\n var mixout = plugin.mixout ? plugin.mixout() : {};\n Object.keys(mixout).forEach(function (tk) {\n if (typeof mixout[tk] === 'function') {\n obj[tk] = mixout[tk];\n }\n\n if (_typeof(mixout[tk]) === 'object') {\n Object.keys(mixout[tk]).forEach(function (sk) {\n if (!obj[tk]) {\n obj[tk] = {};\n }\n\n obj[tk][sk] = mixout[tk][sk];\n });\n }\n });\n\n if (plugin.hooks) {\n var hooks = plugin.hooks();\n Object.keys(hooks).forEach(function (hook) {\n if (!_hooks[hook]) {\n _hooks[hook] = [];\n }\n\n _hooks[hook].push(hooks[hook]);\n });\n }\n\n if (plugin.provides) {\n plugin.provides(providers);\n }\n });\n\n return obj;\n}\nfunction chainHooks(hook, accumulator) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var hookFns = _hooks[hook] || [];\n hookFns.forEach(function (hookFn) {\n accumulator = hookFn.apply(null, [accumulator].concat(args)); // eslint-disable-line no-useless-call\n });\n return accumulator;\n}\nfunction callHooks(hook) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n var hookFns = _hooks[hook] || [];\n hookFns.forEach(function (hookFn) {\n hookFn.apply(null, args);\n });\n return undefined;\n}\nfunction callProvided() {\n var hook = arguments[0];\n var args = Array.prototype.slice.call(arguments, 1);\n return providers[hook] ? providers[hook].apply(null, args) : undefined;\n}\n\nfunction findIconDefinition(iconLookup) {\n if (iconLookup.prefix === 'fa') {\n iconLookup.prefix = 'fas';\n }\n\n var iconName = iconLookup.iconName;\n var prefix = iconLookup.prefix || getDefaultUsablePrefix();\n if (!iconName) return;\n iconName = byAlias(prefix, iconName) || iconName;\n return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n}\nvar library = new Library();\nvar noAuto = function noAuto() {\n config.autoReplaceSvg = false;\n config.observeMutations = false;\n callHooks('noAuto');\n};\nvar dom = {\n i2svg: function i2svg() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (IS_DOM) {\n callHooks('beforeI2svg', params);\n callProvided('pseudoElements2svg', params);\n return callProvided('i2svg', params);\n } else {\n return Promise.reject('Operation requires a DOM of some kind.');\n }\n },\n watch: function watch() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var autoReplaceSvgRoot = params.autoReplaceSvgRoot;\n\n if (config.autoReplaceSvg === false) {\n config.autoReplaceSvg = true;\n }\n\n config.observeMutations = true;\n domready(function () {\n autoReplace({\n autoReplaceSvgRoot: autoReplaceSvgRoot\n });\n callHooks('watch', params);\n });\n }\n};\nvar parse = {\n icon: function icon(_icon) {\n if (_icon === null) {\n return null;\n }\n\n if (_typeof(_icon) === 'object' && _icon.prefix && _icon.iconName) {\n return {\n prefix: _icon.prefix,\n iconName: byAlias(_icon.prefix, _icon.iconName) || _icon.iconName\n };\n }\n\n if (Array.isArray(_icon) && _icon.length === 2) {\n var iconName = _icon[1].indexOf('fa-') === 0 ? _icon[1].slice(3) : _icon[1];\n var prefix = getCanonicalPrefix(_icon[0]);\n return {\n prefix: prefix,\n iconName: byAlias(prefix, iconName) || iconName\n };\n }\n\n if (typeof _icon === 'string' && (_icon.indexOf(\"\".concat(config.cssPrefix, \"-\")) > -1 || _icon.match(ICON_SELECTION_SYNTAX_PATTERN))) {\n var canonicalIcon = getCanonicalIcon(_icon.split(' '), {\n skipLookups: true\n });\n return {\n prefix: canonicalIcon.prefix || getDefaultUsablePrefix(),\n iconName: byAlias(canonicalIcon.prefix, canonicalIcon.iconName) || canonicalIcon.iconName\n };\n }\n\n if (typeof _icon === 'string') {\n var _prefix = getDefaultUsablePrefix();\n\n return {\n prefix: _prefix,\n iconName: byAlias(_prefix, _icon) || _icon\n };\n }\n }\n};\nvar api = {\n noAuto: noAuto,\n config: config,\n dom: dom,\n parse: parse,\n library: library,\n findIconDefinition: findIconDefinition,\n toHtml: toHtml\n};\n\nvar autoReplace = function autoReplace() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _params$autoReplaceSv = params.autoReplaceSvgRoot,\n autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv;\n if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n node: autoReplaceSvgRoot\n });\n};\n\nfunction domVariants(val, abstractCreator) {\n Object.defineProperty(val, 'abstract', {\n get: abstractCreator\n });\n Object.defineProperty(val, 'html', {\n get: function get() {\n return val.abstract.map(function (a) {\n return toHtml(a);\n });\n }\n });\n Object.defineProperty(val, 'node', {\n get: function get() {\n if (!IS_DOM) return;\n var container = DOCUMENT.createElement('div');\n container.innerHTML = val.html;\n return container.children;\n }\n });\n return val;\n}\n\nfunction asIcon (_ref) {\n var children = _ref.children,\n main = _ref.main,\n mask = _ref.mask,\n attributes = _ref.attributes,\n styles = _ref.styles,\n transform = _ref.transform;\n\n if (transformIsMeaningful(transform) && main.found && !mask.found) {\n var width = main.width,\n height = main.height;\n var offset = {\n x: width / height / 2,\n y: 0.5\n };\n attributes['style'] = joinStyles(_objectSpread2(_objectSpread2({}, styles), {}, {\n 'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n }));\n }\n\n return [{\n tag: 'svg',\n attributes: attributes,\n children: children\n }];\n}\n\nfunction asSymbol (_ref) {\n var prefix = _ref.prefix,\n iconName = _ref.iconName,\n children = _ref.children,\n attributes = _ref.attributes,\n symbol = _ref.symbol;\n var id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.cssPrefix, \"-\").concat(iconName) : symbol;\n return [{\n tag: 'svg',\n attributes: {\n style: 'display: none;'\n },\n children: [{\n tag: 'symbol',\n attributes: _objectSpread2(_objectSpread2({}, attributes), {}, {\n id: id\n }),\n children: children\n }]\n }];\n}\n\nfunction makeInlineSvgAbstract(params) {\n var _params$icons = params.icons,\n main = _params$icons.main,\n mask = _params$icons.mask,\n prefix = params.prefix,\n iconName = params.iconName,\n transform = params.transform,\n symbol = params.symbol,\n title = params.title,\n maskId = params.maskId,\n titleId = params.titleId,\n extra = params.extra,\n _params$watchable = params.watchable,\n watchable = _params$watchable === void 0 ? false : _params$watchable;\n\n var _ref = mask.found ? mask : main,\n width = _ref.width,\n height = _ref.height;\n\n var isUploadedIcon = prefix === 'fak';\n var attrClass = [config.replacementClass, iconName ? \"\".concat(config.cssPrefix, \"-\").concat(iconName) : ''].filter(function (c) {\n return extra.classes.indexOf(c) === -1;\n }).filter(function (c) {\n return c !== '' || !!c;\n }).concat(extra.classes).join(' ');\n var content = {\n children: [],\n attributes: _objectSpread2(_objectSpread2({}, extra.attributes), {}, {\n 'data-prefix': prefix,\n 'data-icon': iconName,\n 'class': attrClass,\n 'role': extra.attributes.role || 'img',\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n })\n };\n var uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf('fa-fw') ? {\n width: \"\".concat(width / height * 16 * 0.0625, \"em\")\n } : {};\n\n if (watchable) {\n content.attributes[DATA_FA_I2SVG] = '';\n }\n\n if (title) {\n content.children.push({\n tag: 'title',\n attributes: {\n id: content.attributes['aria-labelledby'] || \"title-\".concat(titleId || nextUniqueId())\n },\n children: [title]\n });\n delete content.attributes.title;\n }\n\n var args = _objectSpread2(_objectSpread2({}, content), {}, {\n prefix: prefix,\n iconName: iconName,\n main: main,\n mask: mask,\n maskId: maskId,\n transform: transform,\n symbol: symbol,\n styles: _objectSpread2(_objectSpread2({}, uploadedIconWidthStyle), extra.styles)\n });\n\n var _ref2 = mask.found && main.found ? callProvided('generateAbstractMask', args) || {\n children: [],\n attributes: {}\n } : callProvided('generateAbstractIcon', args) || {\n children: [],\n attributes: {}\n },\n children = _ref2.children,\n attributes = _ref2.attributes;\n\n args.children = children;\n args.attributes = attributes;\n\n if (symbol) {\n return asSymbol(args);\n } else {\n return asIcon(args);\n }\n}\nfunction makeLayersTextAbstract(params) {\n var content = params.content,\n width = params.width,\n height = params.height,\n transform = params.transform,\n title = params.title,\n extra = params.extra,\n _params$watchable2 = params.watchable,\n watchable = _params$watchable2 === void 0 ? false : _params$watchable2;\n\n var attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n 'title': title\n } : {}), {}, {\n 'class': extra.classes.join(' ')\n });\n\n if (watchable) {\n attributes[DATA_FA_I2SVG] = '';\n }\n\n var styles = _objectSpread2({}, extra.styles);\n\n if (transformIsMeaningful(transform)) {\n styles['transform'] = transformForCss({\n transform: transform,\n startCentered: true,\n width: width,\n height: height\n });\n styles['-webkit-transform'] = styles['transform'];\n }\n\n var styleString = joinStyles(styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var val = [];\n val.push({\n tag: 'span',\n attributes: attributes,\n children: [content]\n });\n\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n\n return val;\n}\nfunction makeLayersCounterAbstract(params) {\n var content = params.content,\n title = params.title,\n extra = params.extra;\n\n var attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n 'title': title\n } : {}), {}, {\n 'class': extra.classes.join(' ')\n });\n\n var styleString = joinStyles(extra.styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var val = [];\n val.push({\n tag: 'span',\n attributes: attributes,\n children: [content]\n });\n\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n\n return val;\n}\n\nvar styles$1 = namespace.styles;\nfunction asFoundIcon(icon) {\n var width = icon[0];\n var height = icon[1];\n\n var _icon$slice = icon.slice(4),\n _icon$slice2 = _slicedToArray(_icon$slice, 1),\n vectorData = _icon$slice2[0];\n\n var element = null;\n\n if (Array.isArray(vectorData)) {\n element = {\n tag: 'g',\n attributes: {\n class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.GROUP)\n },\n children: [{\n tag: 'path',\n attributes: {\n class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.SECONDARY),\n fill: 'currentColor',\n d: vectorData[0]\n }\n }, {\n tag: 'path',\n attributes: {\n class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.PRIMARY),\n fill: 'currentColor',\n d: vectorData[1]\n }\n }]\n };\n } else {\n element = {\n tag: 'path',\n attributes: {\n fill: 'currentColor',\n d: vectorData\n }\n };\n }\n\n return {\n found: true,\n width: width,\n height: height,\n icon: element\n };\n}\nvar missingIconResolutionMixin = {\n found: false,\n width: 512,\n height: 512\n};\n\nfunction maybeNotifyMissing(iconName, prefix) {\n if (!PRODUCTION && !config.showMissingIcons && iconName) {\n console.error(\"Icon with name \\\"\".concat(iconName, \"\\\" and prefix \\\"\").concat(prefix, \"\\\" is missing.\"));\n }\n}\n\nfunction findIcon(iconName, prefix) {\n var givenPrefix = prefix;\n\n if (prefix === 'fa' && config.styleDefault !== null) {\n prefix = getDefaultUsablePrefix();\n }\n\n return new Promise(function (resolve, reject) {\n var val = {\n found: false,\n width: 512,\n height: 512,\n icon: callProvided('missingIconAbstract') || {}\n };\n\n if (givenPrefix === 'fa') {\n var shim = byOldName(iconName) || {};\n iconName = shim.iconName || iconName;\n prefix = shim.prefix || prefix;\n }\n\n if (iconName && prefix && styles$1[prefix] && styles$1[prefix][iconName]) {\n var icon = styles$1[prefix][iconName];\n return resolve(asFoundIcon(icon));\n }\n\n maybeNotifyMissing(iconName, prefix);\n resolve(_objectSpread2(_objectSpread2({}, missingIconResolutionMixin), {}, {\n icon: config.showMissingIcons && iconName ? callProvided('missingIconAbstract') || {} : {}\n }));\n });\n}\n\nvar noop$1 = function noop() {};\n\nvar p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n mark: noop$1,\n measure: noop$1\n};\nvar preamble = \"FA \\\"6.5.2\\\"\";\n\nvar begin = function begin(name) {\n p.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n return function () {\n return end(name);\n };\n};\n\nvar end = function end(name) {\n p.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n p.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n};\n\nvar perf = {\n begin: begin,\n end: end\n};\n\nvar noop$2 = function noop() {};\n\nfunction isWatched(node) {\n var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n return typeof i2svg === 'string';\n}\n\nfunction hasPrefixAndIcon(node) {\n var prefix = node.getAttribute ? node.getAttribute(DATA_PREFIX) : null;\n var icon = node.getAttribute ? node.getAttribute(DATA_ICON) : null;\n return prefix && icon;\n}\n\nfunction hasBeenReplaced(node) {\n return node && node.classList && node.classList.contains && node.classList.contains(config.replacementClass);\n}\n\nfunction getMutator() {\n if (config.autoReplaceSvg === true) {\n return mutators.replace;\n }\n\n var mutator = mutators[config.autoReplaceSvg];\n return mutator || mutators.replace;\n}\n\nfunction createElementNS(tag) {\n return DOCUMENT.createElementNS('http://www.w3.org/2000/svg', tag);\n}\n\nfunction createElement(tag) {\n return DOCUMENT.createElement(tag);\n}\n\nfunction convertSVG(abstractObj) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$ceFn = params.ceFn,\n ceFn = _params$ceFn === void 0 ? abstractObj.tag === 'svg' ? createElementNS : createElement : _params$ceFn;\n\n if (typeof abstractObj === 'string') {\n return DOCUMENT.createTextNode(abstractObj);\n }\n\n var tag = ceFn(abstractObj.tag);\n Object.keys(abstractObj.attributes || []).forEach(function (key) {\n tag.setAttribute(key, abstractObj.attributes[key]);\n });\n var children = abstractObj.children || [];\n children.forEach(function (child) {\n tag.appendChild(convertSVG(child, {\n ceFn: ceFn\n }));\n });\n return tag;\n}\n\nfunction nodeAsComment(node) {\n var comment = \" \".concat(node.outerHTML, \" \");\n /* BEGIN.ATTRIBUTION */\n\n comment = \"\".concat(comment, \"Font Awesome fontawesome.com \");\n /* END.ATTRIBUTION */\n\n return comment;\n}\n\nvar mutators = {\n replace: function replace(mutation) {\n var node = mutation[0];\n\n if (node.parentNode) {\n mutation[1].forEach(function (_abstract) {\n node.parentNode.insertBefore(convertSVG(_abstract), node);\n });\n\n if (node.getAttribute(DATA_FA_I2SVG) === null && config.keepOriginalSource) {\n var comment = DOCUMENT.createComment(nodeAsComment(node));\n node.parentNode.replaceChild(comment, node);\n } else {\n node.remove();\n }\n }\n },\n nest: function nest(mutation) {\n var node = mutation[0];\n var _abstract2 = mutation[1]; // If we already have a replaced node we do not want to continue nesting within it.\n // Short-circuit to the standard replacement\n\n if (~classArray(node).indexOf(config.replacementClass)) {\n return mutators.replace(mutation);\n }\n\n var forSvg = new RegExp(\"\".concat(config.cssPrefix, \"-.*\"));\n delete _abstract2[0].attributes.id;\n\n if (_abstract2[0].attributes.class) {\n var splitClasses = _abstract2[0].attributes.class.split(' ').reduce(function (acc, cls) {\n if (cls === config.replacementClass || cls.match(forSvg)) {\n acc.toSvg.push(cls);\n } else {\n acc.toNode.push(cls);\n }\n\n return acc;\n }, {\n toNode: [],\n toSvg: []\n });\n\n _abstract2[0].attributes.class = splitClasses.toSvg.join(' ');\n\n if (splitClasses.toNode.length === 0) {\n node.removeAttribute('class');\n } else {\n node.setAttribute('class', splitClasses.toNode.join(' '));\n }\n }\n\n var newInnerHTML = _abstract2.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n\n node.setAttribute(DATA_FA_I2SVG, '');\n node.innerHTML = newInnerHTML;\n }\n};\n\nfunction performOperationSync(op) {\n op();\n}\n\nfunction perform(mutations, callback) {\n var callbackFunction = typeof callback === 'function' ? callback : noop$2;\n\n if (mutations.length === 0) {\n callbackFunction();\n } else {\n var frame = performOperationSync;\n\n if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {\n frame = WINDOW.requestAnimationFrame || performOperationSync;\n }\n\n frame(function () {\n var mutator = getMutator();\n var mark = perf.begin('mutate');\n mutations.map(mutator);\n mark();\n callbackFunction();\n });\n }\n}\nvar disabled = false;\nfunction disableObservation() {\n disabled = true;\n}\nfunction enableObservation() {\n disabled = false;\n}\nvar mo = null;\nfunction observe(options) {\n if (!MUTATION_OBSERVER) {\n return;\n }\n\n if (!config.observeMutations) {\n return;\n }\n\n var _options$treeCallback = options.treeCallback,\n treeCallback = _options$treeCallback === void 0 ? noop$2 : _options$treeCallback,\n _options$nodeCallback = options.nodeCallback,\n nodeCallback = _options$nodeCallback === void 0 ? noop$2 : _options$nodeCallback,\n _options$pseudoElemen = options.pseudoElementsCallback,\n pseudoElementsCallback = _options$pseudoElemen === void 0 ? noop$2 : _options$pseudoElemen,\n _options$observeMutat = options.observeMutationsRoot,\n observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat;\n mo = new MUTATION_OBSERVER(function (objects) {\n if (disabled) return;\n var defaultPrefix = getDefaultUsablePrefix();\n toArray(objects).forEach(function (mutationRecord) {\n if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n if (config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target);\n }\n\n treeCallback(mutationRecord.target);\n }\n\n if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target.parentNode);\n }\n\n if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n if (mutationRecord.attributeName === 'class' && hasPrefixAndIcon(mutationRecord.target)) {\n var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),\n prefix = _getCanonicalIcon.prefix,\n iconName = _getCanonicalIcon.iconName;\n\n mutationRecord.target.setAttribute(DATA_PREFIX, prefix || defaultPrefix);\n if (iconName) mutationRecord.target.setAttribute(DATA_ICON, iconName);\n } else if (hasBeenReplaced(mutationRecord.target)) {\n nodeCallback(mutationRecord.target);\n }\n }\n });\n });\n if (!IS_DOM) return;\n mo.observe(observeMutationsRoot, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true\n });\n}\nfunction disconnect() {\n if (!mo) return;\n mo.disconnect();\n}\n\nfunction styleParser (node) {\n var style = node.getAttribute('style');\n var val = [];\n\n if (style) {\n val = style.split(';').reduce(function (acc, style) {\n var styles = style.split(':');\n var prop = styles[0];\n var value = styles.slice(1);\n\n if (prop && value.length > 0) {\n acc[prop] = value.join(':').trim();\n }\n\n return acc;\n }, {});\n }\n\n return val;\n}\n\nfunction classParser (node) {\n var existingPrefix = node.getAttribute('data-prefix');\n var existingIconName = node.getAttribute('data-icon');\n var innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n var val = getCanonicalIcon(classArray(node));\n\n if (!val.prefix) {\n val.prefix = getDefaultUsablePrefix();\n }\n\n if (existingPrefix && existingIconName) {\n val.prefix = existingPrefix;\n val.iconName = existingIconName;\n }\n\n if (val.iconName && val.prefix) {\n return val;\n }\n\n if (val.prefix && innerText.length > 0) {\n val.iconName = byLigature(val.prefix, node.innerText) || byUnicode(val.prefix, toHex(node.innerText));\n }\n\n if (!val.iconName && config.autoFetchSvg && node.firstChild && node.firstChild.nodeType === Node.TEXT_NODE) {\n val.iconName = node.firstChild.data;\n }\n\n return val;\n}\n\nfunction attributesParser (node) {\n var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {\n if (acc.name !== 'class' && acc.name !== 'style') {\n acc[attr.name] = attr.value;\n }\n\n return acc;\n }, {});\n var title = node.getAttribute('title');\n var titleId = node.getAttribute('data-fa-title-id');\n\n if (config.autoA11y) {\n if (title) {\n extraAttributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n } else {\n extraAttributes['aria-hidden'] = 'true';\n extraAttributes['focusable'] = 'false';\n }\n }\n\n return extraAttributes;\n}\n\nfunction blankMeta() {\n return {\n iconName: null,\n title: null,\n titleId: null,\n prefix: null,\n transform: meaninglessTransform,\n symbol: false,\n mask: {\n iconName: null,\n prefix: null,\n rest: []\n },\n maskId: null,\n extra: {\n classes: [],\n styles: {},\n attributes: {}\n }\n };\n}\nfunction parseMeta(node) {\n var parser = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n styleParser: true\n };\n\n var _classParser = classParser(node),\n iconName = _classParser.iconName,\n prefix = _classParser.prefix,\n extraClasses = _classParser.rest;\n\n var extraAttributes = attributesParser(node);\n var pluginMeta = chainHooks('parseNodeAttributes', {}, node);\n var extraStyles = parser.styleParser ? styleParser(node) : [];\n return _objectSpread2({\n iconName: iconName,\n title: node.getAttribute('title'),\n titleId: node.getAttribute('data-fa-title-id'),\n prefix: prefix,\n transform: meaninglessTransform,\n mask: {\n iconName: null,\n prefix: null,\n rest: []\n },\n maskId: null,\n symbol: false,\n extra: {\n classes: extraClasses,\n styles: extraStyles,\n attributes: extraAttributes\n }\n }, pluginMeta);\n}\n\nvar styles$2 = namespace.styles;\n\nfunction generateMutation(node) {\n var nodeMeta = config.autoReplaceSvg === 'nest' ? parseMeta(node, {\n styleParser: false\n }) : parseMeta(node);\n\n if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n return callProvided('generateLayersText', node, nodeMeta);\n } else {\n return callProvided('generateSvgReplacementMutation', node, nodeMeta);\n }\n}\n\nvar knownPrefixes = new Set();\nFAMILIES.map(function (family) {\n knownPrefixes.add(\"fa-\".concat(family));\n});\nObject.keys(PREFIX_TO_STYLE[FAMILY_CLASSIC]).map(knownPrefixes.add.bind(knownPrefixes));\nObject.keys(PREFIX_TO_STYLE[FAMILY_SHARP]).map(knownPrefixes.add.bind(knownPrefixes));\nknownPrefixes = _toConsumableArray(knownPrefixes);\n\nfunction onTree(root) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n if (!IS_DOM) return Promise.resolve();\n var htmlClassList = DOCUMENT.documentElement.classList;\n\n var hclAdd = function hclAdd(suffix) {\n return htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n };\n\n var hclRemove = function hclRemove(suffix) {\n return htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n };\n\n var prefixes = config.autoFetchSvg ? knownPrefixes : FAMILIES.map(function (f) {\n return \"fa-\".concat(f);\n }).concat(Object.keys(styles$2));\n\n if (!prefixes.includes('fa')) {\n prefixes.push('fa');\n }\n\n var prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(function (p) {\n return \".\".concat(p, \":not([\").concat(DATA_FA_I2SVG, \"])\");\n })).join(', ');\n\n if (prefixesDomQuery.length === 0) {\n return Promise.resolve();\n }\n\n var candidates = [];\n\n try {\n candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n } catch (e) {// noop\n }\n\n if (candidates.length > 0) {\n hclAdd('pending');\n hclRemove('complete');\n } else {\n return Promise.resolve();\n }\n\n var mark = perf.begin('onTree');\n var mutations = candidates.reduce(function (acc, node) {\n try {\n var mutation = generateMutation(node);\n\n if (mutation) {\n acc.push(mutation);\n }\n } catch (e) {\n if (!PRODUCTION) {\n if (e.name === 'MissingIcon') {\n console.error(e);\n }\n }\n }\n\n return acc;\n }, []);\n return new Promise(function (resolve, reject) {\n Promise.all(mutations).then(function (resolvedMutations) {\n perform(resolvedMutations, function () {\n hclAdd('active');\n hclAdd('complete');\n hclRemove('pending');\n if (typeof callback === 'function') callback();\n mark();\n resolve();\n });\n }).catch(function (e) {\n mark();\n reject(e);\n });\n });\n}\n\nfunction onNode(node) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n generateMutation(node).then(function (mutation) {\n if (mutation) {\n perform([mutation], callback);\n }\n });\n}\n\nfunction resolveIcons(next) {\n return function (maybeIconDefinition) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n var mask = params.mask;\n\n if (mask) {\n mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n }\n\n return next(iconDefinition, _objectSpread2(_objectSpread2({}, params), {}, {\n mask: mask\n }));\n };\n}\n\nvar render = function render(iconDefinition) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$transform = params.transform,\n transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n _params$symbol = params.symbol,\n symbol = _params$symbol === void 0 ? false : _params$symbol,\n _params$mask = params.mask,\n mask = _params$mask === void 0 ? null : _params$mask,\n _params$maskId = params.maskId,\n maskId = _params$maskId === void 0 ? null : _params$maskId,\n _params$title = params.title,\n title = _params$title === void 0 ? null : _params$title,\n _params$titleId = params.titleId,\n titleId = _params$titleId === void 0 ? null : _params$titleId,\n _params$classes = params.classes,\n classes = _params$classes === void 0 ? [] : _params$classes,\n _params$attributes = params.attributes,\n attributes = _params$attributes === void 0 ? {} : _params$attributes,\n _params$styles = params.styles,\n styles = _params$styles === void 0 ? {} : _params$styles;\n if (!iconDefinition) return;\n var prefix = iconDefinition.prefix,\n iconName = iconDefinition.iconName,\n icon = iconDefinition.icon;\n return domVariants(_objectSpread2({\n type: 'icon'\n }, iconDefinition), function () {\n callHooks('beforeDOMElementCreation', {\n iconDefinition: iconDefinition,\n params: params\n });\n\n if (config.autoA11y) {\n if (title) {\n attributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n } else {\n attributes['aria-hidden'] = 'true';\n attributes['focusable'] = 'false';\n }\n }\n\n return makeInlineSvgAbstract({\n icons: {\n main: asFoundIcon(icon),\n mask: mask ? asFoundIcon(mask.icon) : {\n found: false,\n width: null,\n height: null,\n icon: {}\n }\n },\n prefix: prefix,\n iconName: iconName,\n transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n symbol: symbol,\n title: title,\n maskId: maskId,\n titleId: titleId,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: classes\n }\n });\n });\n};\nvar ReplaceElements = {\n mixout: function mixout() {\n return {\n icon: resolveIcons(render)\n };\n },\n hooks: function hooks() {\n return {\n mutationObserverCallbacks: function mutationObserverCallbacks(accumulator) {\n accumulator.treeCallback = onTree;\n accumulator.nodeCallback = onNode;\n return accumulator;\n }\n };\n },\n provides: function provides(providers$$1) {\n providers$$1.i2svg = function (params) {\n var _params$node = params.node,\n node = _params$node === void 0 ? DOCUMENT : _params$node,\n _params$callback = params.callback,\n callback = _params$callback === void 0 ? function () {} : _params$callback;\n return onTree(node, callback);\n };\n\n providers$$1.generateSvgReplacementMutation = function (node, nodeMeta) {\n var iconName = nodeMeta.iconName,\n title = nodeMeta.title,\n titleId = nodeMeta.titleId,\n prefix = nodeMeta.prefix,\n transform = nodeMeta.transform,\n symbol = nodeMeta.symbol,\n mask = nodeMeta.mask,\n maskId = nodeMeta.maskId,\n extra = nodeMeta.extra;\n return new Promise(function (resolve, reject) {\n Promise.all([findIcon(iconName, prefix), mask.iconName ? findIcon(mask.iconName, mask.prefix) : Promise.resolve({\n found: false,\n width: 512,\n height: 512,\n icon: {}\n })]).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n main = _ref2[0],\n mask = _ref2[1];\n\n resolve([node, makeInlineSvgAbstract({\n icons: {\n main: main,\n mask: mask\n },\n prefix: prefix,\n iconName: iconName,\n transform: transform,\n symbol: symbol,\n maskId: maskId,\n title: title,\n titleId: titleId,\n extra: extra,\n watchable: true\n })]);\n }).catch(reject);\n });\n };\n\n providers$$1.generateAbstractIcon = function (_ref3) {\n var children = _ref3.children,\n attributes = _ref3.attributes,\n main = _ref3.main,\n transform = _ref3.transform,\n styles = _ref3.styles;\n var styleString = joinStyles(styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var nextChild;\n\n if (transformIsMeaningful(transform)) {\n nextChild = callProvided('generateAbstractTransformGrouping', {\n main: main,\n transform: transform,\n containerWidth: main.width,\n iconWidth: main.width\n });\n }\n\n children.push(nextChild || main.icon);\n return {\n children: children,\n attributes: attributes\n };\n };\n }\n};\n\nvar Layers = {\n mixout: function mixout() {\n return {\n layer: function layer(assembler) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$classes = params.classes,\n classes = _params$classes === void 0 ? [] : _params$classes;\n return domVariants({\n type: 'layer'\n }, function () {\n callHooks('beforeDOMElementCreation', {\n assembler: assembler,\n params: params\n });\n var children = [];\n assembler(function (args) {\n Array.isArray(args) ? args.map(function (a) {\n children = children.concat(a.abstract);\n }) : children = children.concat(args.abstract);\n });\n return [{\n tag: 'span',\n attributes: {\n class: [\"\".concat(config.cssPrefix, \"-layers\")].concat(_toConsumableArray(classes)).join(' ')\n },\n children: children\n }];\n });\n }\n };\n }\n};\n\nvar LayersCounter = {\n mixout: function mixout() {\n return {\n counter: function counter(content) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$title = params.title,\n title = _params$title === void 0 ? null : _params$title,\n _params$classes = params.classes,\n classes = _params$classes === void 0 ? [] : _params$classes,\n _params$attributes = params.attributes,\n attributes = _params$attributes === void 0 ? {} : _params$attributes,\n _params$styles = params.styles,\n styles = _params$styles === void 0 ? {} : _params$styles;\n return domVariants({\n type: 'counter',\n content: content\n }, function () {\n callHooks('beforeDOMElementCreation', {\n content: content,\n params: params\n });\n return makeLayersCounterAbstract({\n content: content.toString(),\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: [\"\".concat(config.cssPrefix, \"-layers-counter\")].concat(_toConsumableArray(classes))\n }\n });\n });\n }\n };\n }\n};\n\nvar LayersText = {\n mixout: function mixout() {\n return {\n text: function text(content) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$transform = params.transform,\n transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n _params$title = params.title,\n title = _params$title === void 0 ? null : _params$title,\n _params$classes = params.classes,\n classes = _params$classes === void 0 ? [] : _params$classes,\n _params$attributes = params.attributes,\n attributes = _params$attributes === void 0 ? {} : _params$attributes,\n _params$styles = params.styles,\n styles = _params$styles === void 0 ? {} : _params$styles;\n return domVariants({\n type: 'text',\n content: content\n }, function () {\n callHooks('beforeDOMElementCreation', {\n content: content,\n params: params\n });\n return makeLayersTextAbstract({\n content: content,\n transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: [\"\".concat(config.cssPrefix, \"-layers-text\")].concat(_toConsumableArray(classes))\n }\n });\n });\n }\n };\n },\n provides: function provides(providers$$1) {\n providers$$1.generateLayersText = function (node, nodeMeta) {\n var title = nodeMeta.title,\n transform = nodeMeta.transform,\n extra = nodeMeta.extra;\n var width = null;\n var height = null;\n\n if (IS_IE) {\n var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n var boundingClientRect = node.getBoundingClientRect();\n width = boundingClientRect.width / computedFontSize;\n height = boundingClientRect.height / computedFontSize;\n }\n\n if (config.autoA11y && !title) {\n extra.attributes['aria-hidden'] = 'true';\n }\n\n return Promise.resolve([node, makeLayersTextAbstract({\n content: node.innerHTML,\n width: width,\n height: height,\n transform: transform,\n title: title,\n extra: extra,\n watchable: true\n })]);\n };\n }\n};\n\nvar CLEAN_CONTENT_PATTERN = new RegExp(\"\\\"\", 'ug');\nvar SECONDARY_UNICODE_RANGE = [1105920, 1112319];\nfunction hexValueFromContent(content) {\n var cleaned = content.replace(CLEAN_CONTENT_PATTERN, '');\n var codePoint = codePointAt(cleaned, 0);\n var isPrependTen = codePoint >= SECONDARY_UNICODE_RANGE[0] && codePoint <= SECONDARY_UNICODE_RANGE[1];\n var isDoubled = cleaned.length === 2 ? cleaned[0] === cleaned[1] : false;\n return {\n value: isDoubled ? toHex(cleaned[0]) : toHex(cleaned),\n isSecondary: isPrependTen || isDoubled\n };\n}\n\nfunction replaceForPosition(node, position) {\n var pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n return new Promise(function (resolve, reject) {\n if (node.getAttribute(pendingAttribute) !== null) {\n // This node is already being processed\n return resolve();\n }\n\n var children = toArray(node.children);\n var alreadyProcessedPseudoElement = children.filter(function (c) {\n return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position;\n })[0];\n var styles = WINDOW.getComputedStyle(node, position);\n var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN);\n var fontWeight = styles.getPropertyValue('font-weight');\n var content = styles.getPropertyValue('content');\n\n if (alreadyProcessedPseudoElement && !fontFamily) {\n // If we've already processed it but the current computed style does not result in a font-family,\n // that probably means that a class name that was previously present to make the icon has been\n // removed. So we now should delete the icon.\n node.removeChild(alreadyProcessedPseudoElement);\n return resolve();\n } else if (fontFamily && content !== 'none' && content !== '') {\n var _content = styles.getPropertyValue('content');\n\n var family = ~['Sharp'].indexOf(fontFamily[2]) ? FAMILY_SHARP : FAMILY_CLASSIC;\n var prefix = ~['Solid', 'Regular', 'Light', 'Thin', 'Duotone', 'Brands', 'Kit'].indexOf(fontFamily[2]) ? STYLE_TO_PREFIX[family][fontFamily[2].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[family][fontWeight];\n\n var _hexValueFromContent = hexValueFromContent(_content),\n hexValue = _hexValueFromContent.value,\n isSecondary = _hexValueFromContent.isSecondary;\n\n var isV4 = fontFamily[0].startsWith('FontAwesome');\n var iconName = byUnicode(prefix, hexValue);\n var iconIdentifier = iconName;\n\n if (isV4) {\n var iconName4 = byOldUnicode(hexValue);\n\n if (iconName4.iconName && iconName4.prefix) {\n iconName = iconName4.iconName;\n prefix = iconName4.prefix;\n }\n } // Only convert the pseudo element in this ::before/::after position into an icon if we haven't\n // already done so with the same prefix and iconName\n\n\n if (iconName && !isSecondary && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {\n node.setAttribute(pendingAttribute, iconIdentifier);\n\n if (alreadyProcessedPseudoElement) {\n // Delete the old one, since we're replacing it with a new one\n node.removeChild(alreadyProcessedPseudoElement);\n }\n\n var meta = blankMeta();\n var extra = meta.extra;\n extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n findIcon(iconName, prefix).then(function (main) {\n var _abstract = makeInlineSvgAbstract(_objectSpread2(_objectSpread2({}, meta), {}, {\n icons: {\n main: main,\n mask: emptyCanonicalIcon()\n },\n prefix: prefix,\n iconName: iconIdentifier,\n extra: extra,\n watchable: true\n }));\n\n var element = DOCUMENT.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\n if (position === '::before') {\n node.insertBefore(element, node.firstChild);\n } else {\n node.appendChild(element);\n }\n\n element.outerHTML = _abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n node.removeAttribute(pendingAttribute);\n resolve();\n }).catch(reject);\n } else {\n resolve();\n }\n } else {\n resolve();\n }\n });\n}\n\nfunction replace(node) {\n return Promise.all([replaceForPosition(node, '::before'), replaceForPosition(node, '::after')]);\n}\n\nfunction processable(node) {\n return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n}\n\nfunction searchPseudoElements(root) {\n if (!IS_DOM) return;\n return new Promise(function (resolve, reject) {\n var operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\n var end = perf.begin('searchPseudoElements');\n disableObservation();\n Promise.all(operations).then(function () {\n end();\n enableObservation();\n resolve();\n }).catch(function () {\n end();\n enableObservation();\n reject();\n });\n });\n}\n\nvar PseudoElements = {\n hooks: function hooks() {\n return {\n mutationObserverCallbacks: function mutationObserverCallbacks(accumulator) {\n accumulator.pseudoElementsCallback = searchPseudoElements;\n return accumulator;\n }\n };\n },\n provides: function provides(providers$$1) {\n providers$$1.pseudoElements2svg = function (params) {\n var _params$node = params.node,\n node = _params$node === void 0 ? DOCUMENT : _params$node;\n\n if (config.searchPseudoElements) {\n searchPseudoElements(node);\n }\n };\n }\n};\n\nvar _unwatched = false;\nvar MutationObserver$1 = {\n mixout: function mixout() {\n return {\n dom: {\n unwatch: function unwatch() {\n disableObservation();\n _unwatched = true;\n }\n }\n };\n },\n hooks: function hooks() {\n return {\n bootstrap: function bootstrap() {\n observe(chainHooks('mutationObserverCallbacks', {}));\n },\n noAuto: function noAuto() {\n disconnect();\n },\n watch: function watch(params) {\n var observeMutationsRoot = params.observeMutationsRoot;\n\n if (_unwatched) {\n enableObservation();\n } else {\n observe(chainHooks('mutationObserverCallbacks', {\n observeMutationsRoot: observeMutationsRoot\n }));\n }\n }\n };\n }\n};\n\nvar parseTransformString = function parseTransformString(transformString) {\n var transform = {\n size: 16,\n x: 0,\n y: 0,\n flipX: false,\n flipY: false,\n rotate: 0\n };\n return transformString.toLowerCase().split(' ').reduce(function (acc, n) {\n var parts = n.toLowerCase().split('-');\n var first = parts[0];\n var rest = parts.slice(1).join('-');\n\n if (first && rest === 'h') {\n acc.flipX = true;\n return acc;\n }\n\n if (first && rest === 'v') {\n acc.flipY = true;\n return acc;\n }\n\n rest = parseFloat(rest);\n\n if (isNaN(rest)) {\n return acc;\n }\n\n switch (first) {\n case 'grow':\n acc.size = acc.size + rest;\n break;\n\n case 'shrink':\n acc.size = acc.size - rest;\n break;\n\n case 'left':\n acc.x = acc.x - rest;\n break;\n\n case 'right':\n acc.x = acc.x + rest;\n break;\n\n case 'up':\n acc.y = acc.y - rest;\n break;\n\n case 'down':\n acc.y = acc.y + rest;\n break;\n\n case 'rotate':\n acc.rotate = acc.rotate + rest;\n break;\n }\n\n return acc;\n }, transform);\n};\nvar PowerTransforms = {\n mixout: function mixout() {\n return {\n parse: {\n transform: function transform(transformString) {\n return parseTransformString(transformString);\n }\n }\n };\n },\n hooks: function hooks() {\n return {\n parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n var transformString = node.getAttribute('data-fa-transform');\n\n if (transformString) {\n accumulator.transform = parseTransformString(transformString);\n }\n\n return accumulator;\n }\n };\n },\n provides: function provides(providers) {\n providers.generateAbstractTransformGrouping = function (_ref) {\n var main = _ref.main,\n transform = _ref.transform,\n containerWidth = _ref.containerWidth,\n iconWidth = _ref.iconWidth;\n var outer = {\n transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n };\n var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n var inner = {\n transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n };\n var path = {\n transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n };\n var operations = {\n outer: outer,\n inner: inner,\n path: path\n };\n return {\n tag: 'g',\n attributes: _objectSpread2({}, operations.outer),\n children: [{\n tag: 'g',\n attributes: _objectSpread2({}, operations.inner),\n children: [{\n tag: main.icon.tag,\n children: main.icon.children,\n attributes: _objectSpread2(_objectSpread2({}, main.icon.attributes), operations.path)\n }]\n }]\n };\n };\n }\n};\n\nvar ALL_SPACE = {\n x: 0,\n y: 0,\n width: '100%',\n height: '100%'\n};\n\nfunction fillBlack(_abstract) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (_abstract.attributes && (_abstract.attributes.fill || force)) {\n _abstract.attributes.fill = 'black';\n }\n\n return _abstract;\n}\n\nfunction deGroup(_abstract2) {\n if (_abstract2.tag === 'g') {\n return _abstract2.children;\n } else {\n return [_abstract2];\n }\n}\n\nvar Masks = {\n hooks: function hooks() {\n return {\n parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n var maskData = node.getAttribute('data-fa-mask');\n var mask = !maskData ? emptyCanonicalIcon() : getCanonicalIcon(maskData.split(' ').map(function (i) {\n return i.trim();\n }));\n\n if (!mask.prefix) {\n mask.prefix = getDefaultUsablePrefix();\n }\n\n accumulator.mask = mask;\n accumulator.maskId = node.getAttribute('data-fa-mask-id');\n return accumulator;\n }\n };\n },\n provides: function provides(providers) {\n providers.generateAbstractMask = function (_ref) {\n var children = _ref.children,\n attributes = _ref.attributes,\n main = _ref.main,\n mask = _ref.mask,\n explicitMaskId = _ref.maskId,\n transform = _ref.transform;\n var mainWidth = main.width,\n mainPath = main.icon;\n var maskWidth = mask.width,\n maskPath = mask.icon;\n var trans = transformForSvg({\n transform: transform,\n containerWidth: maskWidth,\n iconWidth: mainWidth\n });\n var maskRect = {\n tag: 'rect',\n attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n fill: 'white'\n })\n };\n var maskInnerGroupChildrenMixin = mainPath.children ? {\n children: mainPath.children.map(fillBlack)\n } : {};\n var maskInnerGroup = {\n tag: 'g',\n attributes: _objectSpread2({}, trans.inner),\n children: [fillBlack(_objectSpread2({\n tag: mainPath.tag,\n attributes: _objectSpread2(_objectSpread2({}, mainPath.attributes), trans.path)\n }, maskInnerGroupChildrenMixin))]\n };\n var maskOuterGroup = {\n tag: 'g',\n attributes: _objectSpread2({}, trans.outer),\n children: [maskInnerGroup]\n };\n var maskId = \"mask-\".concat(explicitMaskId || nextUniqueId());\n var clipId = \"clip-\".concat(explicitMaskId || nextUniqueId());\n var maskTag = {\n tag: 'mask',\n attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n id: maskId,\n maskUnits: 'userSpaceOnUse',\n maskContentUnits: 'userSpaceOnUse'\n }),\n children: [maskRect, maskOuterGroup]\n };\n var defs = {\n tag: 'defs',\n children: [{\n tag: 'clipPath',\n attributes: {\n id: clipId\n },\n children: deGroup(maskPath)\n }, maskTag]\n };\n children.push(defs, {\n tag: 'rect',\n attributes: _objectSpread2({\n fill: 'currentColor',\n 'clip-path': \"url(#\".concat(clipId, \")\"),\n mask: \"url(#\".concat(maskId, \")\")\n }, ALL_SPACE)\n });\n return {\n children: children,\n attributes: attributes\n };\n };\n }\n};\n\nvar MissingIconIndicator = {\n provides: function provides(providers) {\n var reduceMotion = false;\n\n if (WINDOW.matchMedia) {\n reduceMotion = WINDOW.matchMedia('(prefers-reduced-motion: reduce)').matches;\n }\n\n providers.missingIconAbstract = function () {\n var gChildren = [];\n var FILL = {\n fill: 'currentColor'\n };\n var ANIMATION_BASE = {\n attributeType: 'XML',\n repeatCount: 'indefinite',\n dur: '2s'\n }; // Ring\n\n gChildren.push({\n tag: 'path',\n attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n })\n });\n\n var OPACITY_ANIMATE = _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n attributeName: 'opacity'\n });\n\n var dot = {\n tag: 'circle',\n attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n cx: '256',\n cy: '364',\n r: '28'\n }),\n children: []\n };\n\n if (!reduceMotion) {\n dot.children.push({\n tag: 'animate',\n attributes: _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n attributeName: 'r',\n values: '28;14;28;28;14;28;'\n })\n }, {\n tag: 'animate',\n attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n values: '1;0;1;1;0;1;'\n })\n });\n }\n\n gChildren.push(dot);\n gChildren.push({\n tag: 'path',\n attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n opacity: '1',\n d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n }),\n children: reduceMotion ? [] : [{\n tag: 'animate',\n attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n values: '1;0;0;0;0;1;'\n })\n }]\n });\n\n if (!reduceMotion) {\n // Exclamation\n gChildren.push({\n tag: 'path',\n attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n opacity: '0',\n d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n values: '0;0;1;1;0;0;'\n })\n }]\n });\n }\n\n return {\n tag: 'g',\n attributes: {\n 'class': 'missing'\n },\n children: gChildren\n };\n };\n }\n};\n\nvar SvgSymbols = {\n hooks: function hooks() {\n return {\n parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n var symbolData = node.getAttribute('data-fa-symbol');\n var symbol = symbolData === null ? false : symbolData === '' ? true : symbolData;\n accumulator['symbol'] = symbol;\n return accumulator;\n }\n };\n }\n};\n\nvar plugins = [InjectCSS, ReplaceElements, Layers, LayersCounter, LayersText, PseudoElements, MutationObserver$1, PowerTransforms, Masks, MissingIconIndicator, SvgSymbols];\n\nregisterPlugins(plugins, {\n mixoutsTo: api\n});\nvar noAuto$1 = api.noAuto;\nvar config$1 = api.config;\nvar library$1 = api.library;\nvar dom$1 = api.dom;\nvar parse$1 = api.parse;\nvar findIconDefinition$1 = api.findIconDefinition;\nvar toHtml$1 = api.toHtml;\nvar icon = api.icon;\nvar layer = api.layer;\nvar text = api.text;\nvar counter = api.counter;\n\nexport { noAuto$1 as noAuto, config$1 as config, library$1 as library, dom$1 as dom, parse$1 as parse, findIconDefinition$1 as findIconDefinition, toHtml$1 as toHtml, icon, layer, text, counter, api };\n","/* global require */\nimport { getOwnConfig } from '@embroider/macros';\nlet configModulePath = `${getOwnConfig().modulePrefix}/config/environment`;\nexport default require(configModulePath).default;","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{~#if this.iconExists~}}\\n \\n {{this.content}}\\n \\n{{~/if~}}\\n\",{ moduleName: \"/codebuild/output/src4240352341/src/BBMO/node_modules/.embroider/rewritten-packages/@fortawesome/ember-fontawesome.522e8c56/node_modules/@fortawesome/ember-fontawesome/components/fa-icon.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './fa-icon.hbs'; */\nimport Component from '@glimmer/component';\nimport { icon, parse, toHtml } from '@fortawesome/fontawesome-svg-core';\nimport { htmlSafe } from '@ember/template';\nimport appConfig from 'ember-get-config';\nfunction objectWithKey(key, value) {\n return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? {\n [key]: value\n } : {};\n}\nfunction normalizeIconArgs(prefix, icon) {\n const defaultPrefix = appConfig?.fontawesome?.defaultPrefix ?? 'fas';\n if (!icon) {\n return {\n prefix: defaultPrefix,\n iconName: null\n };\n }\n if (typeof icon === 'object' && icon.prefix && icon.iconName) {\n return icon;\n }\n if (parse.icon) {\n if (typeof prefix === 'string' && typeof icon === 'string') {\n return parse.icon({\n prefix: prefix,\n iconName: icon\n });\n }\n if (typeof icon === 'string') {\n return parse.icon({\n prefix: defaultPrefix,\n iconName: icon\n });\n }\n }\n if (typeof prefix === 'string' && typeof icon === 'string') {\n return {\n prefix: prefix,\n iconName: icon\n };\n }\n if (typeof icon === 'string') {\n return {\n prefix: defaultPrefix,\n iconName: icon\n };\n }\n}\nexport default class FaIconComponent extends Component {\n get content() {\n const children = this.abstractIcon?.children ?? [];\n const html = children.reduce((acc, cur) => {\n return `${acc}${toHtml(cur)}`;\n }, '');\n return htmlSafe(html);\n }\n get safeStyle() {\n return this.iconAttributes.style ? htmlSafe(`${this.iconAttributes.style}`) : undefined;\n }\n get iconExists() {\n return Boolean(this.abstractIcon);\n }\n get flipHorizontal() {\n return this.args.flip === 'horizontal' || this.args.flip === 'both';\n }\n get flipVertical() {\n return this.args.flip === 'vertical' || this.args.flip === 'both';\n }\n get classList() {\n let classes = {\n 'fa-spin': this.args.spin,\n 'fa-pulse': this.args.pulse,\n 'fa-fw': this.args.fixedWidth,\n 'fa-border': this.args.border,\n 'fa-li': this.args.listItem,\n 'fa-flip-horizontal': this.flipHorizontal,\n 'fa-flip-vertical': this.flipVertical,\n [`fa-${this.args.size}`]: this.args.size,\n [`fa-rotate-${this.args.rotation}`]: this.args.rotation,\n [`fa-pull-${this.args.pull}`]: this.args.pull\n };\n return Object.keys(classes).filter(key => classes[key]);\n }\n get abstractIcon() {\n const iconLookup = normalizeIconArgs(this.args.prefix, this.args.icon);\n const classes = objectWithKey('classes', this.classList);\n const transform = objectWithKey('transform', typeof this.args.transform === 'string' ? parse.transform(this.args.transform) : this.args.transform);\n const mask = objectWithKey('mask', normalizeIconArgs(null, this.args.mask));\n const symbol = this.args.symbol ?? false;\n let title = this.args.title ? `${this.args.title}` : null;\n const o = Object.assign({}, classes, transform, mask, {\n symbol,\n title\n });\n const renderedIcon = icon(iconLookup, o);\n if (!renderedIcon) {\n console.warn(`Could not find icon: iconName=${iconLookup.iconName}, prefix=${iconLookup.prefix}. You may need to add it to your icons.js.`);\n return null;\n }\n return renderedIcon.abstract[0];\n }\n get iconAttributes() {\n return this.abstractIcon?.attributes ?? {};\n }\n get dataPrefix() {\n return this.iconAttributes['data-prefix'];\n }\n get dataIcon() {\n return this.iconAttributes['data-icon'];\n }\n get dataFaTransform() {\n return this.iconAttributes['data-fa-transform'];\n }\n get dataFaMask() {\n return this.iconAttributes['data-fa-mask'];\n }\n get dataFaProcessed() {\n return this.iconAttributes['data-fa-processed'];\n }\n get ariaHidden() {\n return this.iconAttributes['aria-hidden'];\n }\n get ariaLabelledBy() {\n return this.iconAttributes['aria-labelledby'];\n }\n get viewBox() {\n return this.abstractIcon?.attributes?.viewBox ?? '0 0 448 512';\n }\n}","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { DEBUG } from '@glimmer/env';\nimport { setOwner } from './owner';\nimport { isDestroying, isDestroyed } from './destroyables';\n\n// This provides a type-safe `WeakMap`: the getter and setter link the key to a\n// specific value. This is how `WeakMap`s actually behave, but the TS type\n// system does not (yet!) have a good way to capture that for types like\n// `WeakMap` where the type is generic over another generic type (here, `Args`).\n\n// SAFETY: this only holds because we *only* acces this when `DEBUG` is `true`.\n// There is not a great way to connect that data in TS at present.\nexport let ARGS_SET;\nif (DEBUG) {\n ARGS_SET = new WeakMap();\n}\n\n// --- Type utilities for component signatures --- //\n// Type-only \"symbol\" to use with `EmptyObject` below, so that it is *not*\n// equivalent to an empty interface.\n\n/**\n * This provides us a way to have a \"fallback\" which represents an empty object,\n * without the downsides of how TS treats `{}`. Specifically: this will\n * correctly leverage \"excess property checking\" so that, given a component\n * which has no named args, if someone invokes it with any named args, they will\n * get a type error.\n *\n * @internal This is exported so declaration emit works (if it were not emitted,\n * declarations which fall back to it would not work). It is *not* intended for\n * public usage, and the specific mechanics it uses may change at any time.\n * The location of this export *is* part of the public API, because moving it\n * will break existing declarations, but is not legal for end users to import\n * themselves, so ***DO NOT RELY ON IT***.\n */\n\n/** Given a signature `S`, get back the `Args` type. */\n\n/**\n * Given any allowed shorthand form of a signature, desugars it to its full\n * expanded type.\n *\n * @internal This is only exported so we can avoid duplicating it in\n * [Glint](https://github.com/typed-ember/glint) or other such tooling. It is\n * *not* intended for public usage, and the specific mechanics it uses may\n * change at any time. Although the signature produced by is part of Glimmer's\n * public API the existence and mechanics of this specific symbol are *not*,\n * so ***DO NOT RELY ON IT***.\n */\n// The conditional type here is because TS applies conditional types\n// distributively. This means that for union types, checks like `keyof T` get\n// all the keys from all elements of the union, instead of ending up as `never`\n// and then always falling into the `Signature` path instead of falling back to\n// the legacy args handling path.\n\n/**\n * @internal we use this type for convenience internally; inference means users\n * should not normally need to name it\n */\n\n/**\n * The `Component` class defines an encapsulated UI element that is rendered to\n * the DOM. A component is made up of a template and, optionally, this component\n * object.\n *\n * ## Defining a Component\n *\n * To define a component, subclass `Component` and add your own properties,\n * methods and lifecycle hooks:\n *\n * ```ts\n * import Component from '@glimmer/component';\n *\n * export default class extends Component {\n * }\n * ```\n *\n * ## Lifecycle Hooks\n *\n * Lifecycle hooks allow you to respond to changes to a component, such as when\n * it gets created, rendered, updated or destroyed. To add a lifecycle hook to a\n * component, implement the hook as a method on your component subclass.\n *\n * For example, to be notified when Glimmer has rendered your component so you\n * can attach a legacy jQuery plugin, implement the `didInsertElement()` method:\n *\n * ```ts\n * import Component from '@glimmer/component';\n *\n * export default class extends Component {\n * didInsertElement() {\n * $(this.element).pickadate();\n * }\n * }\n * ```\n *\n * ## Data for Templates\n *\n * `Component`s have two different kinds of data, or state, that can be\n * displayed in templates:\n *\n * 1. Arguments\n * 2. Properties\n *\n * Arguments are data that is passed in to a component from its parent\n * component. For example, if I have a `UserGreeting` component, I can pass it\n * a name and greeting to use:\n *\n * ```hbs\n * \n * ```\n *\n * Inside my `UserGreeting` template, I can access the `@name` and `@greeting`\n * arguments that I've been given:\n *\n * ```hbs\n * {{@greeting}}, {{@name}}!\n * ```\n *\n * Arguments are also available inside my component:\n *\n * ```ts\n * console.log(this.args.greeting); // prints \"Olá\"\n * ```\n *\n * Properties, on the other hand, are internal to the component and declared in\n * the class. You can use properties to store data that you want to show in the\n * template, or pass to another component as an argument.\n *\n * ```ts\n * import Component from '@glimmer/component';\n *\n * export default class extends Component {\n * user = {\n * name: 'Robbie'\n * }\n * }\n * ```\n *\n * In the above example, we've defined a component with a `user` property that\n * contains an object with its own `name` property.\n *\n * We can render that property in our template:\n *\n * ```hbs\n * Hello, {{user.name}}!\n * ```\n *\n * We can also take that property and pass it as an argument to the\n * `UserGreeting` component we defined above:\n *\n * ```hbs\n * \n * ```\n *\n * ## Arguments vs. Properties\n *\n * Remember, arguments are data that was given to your component by its parent\n * component, and properties are data your component has defined for itself.\n *\n * You can tell the difference between arguments and properties in templates\n * because arguments always start with an `@` sign (think \"A is for arguments\"):\n *\n * ```hbs\n * {{@firstName}}\n * ```\n *\n * We know that `@firstName` came from the parent component, not the current\n * component, because it starts with `@` and is therefore an argument.\n *\n * On the other hand, if we see:\n *\n * ```hbs\n * {{name}}\n * ```\n *\n * We know that `name` is a property on the component. If we want to know where\n * the data is coming from, we can go look at our component class to find out.\n *\n * Inside the component itself, arguments always show up inside the component's\n * `args` property. For example, if `{{@firstName}}` is `Tom` in the template,\n * inside the component `this.args.firstName` would also be `Tom`.\n */\nexport default class BaseComponent {\n /**\n * Constructs a new component and assigns itself the passed properties. You\n * should not construct new components yourself. Instead, Glimmer will\n * instantiate new components automatically as it renders.\n *\n * @param owner\n * @param args\n */\n constructor(owner, args) {\n /**\n * Named arguments passed to the component from its parent component.\n * They can be accessed in JavaScript via `this.args.argumentName` and in the template via `@argumentName`.\n *\n * Say you have the following component, which will have two `args`, `firstName` and `lastName`:\n *\n * ```hbs\n * \n * ```\n *\n * If you needed to calculate `fullName` by combining both of them, you would do:\n *\n * ```ts\n * didInsertElement() {\n * console.log(`Hi, my full name is ${this.args.firstName} ${this.args.lastName}`);\n * }\n * ```\n *\n * While in the template you could do:\n *\n * ```hbs\n *

Welcome, {{@firstName}} {{@lastName}}!

\n * ```\n */\n _defineProperty(this, \"args\", void 0);\n if (DEBUG && !(owner !== null && typeof owner === 'object' && ARGS_SET.has(args))) {\n throw new Error(`You must pass both the owner and args to super() in your component: ${this.constructor.name}. You can pass them directly, or use ...arguments to pass all arguments through.`);\n }\n this.args = args;\n setOwner(this, owner);\n }\n get isDestroying() {\n return isDestroying(this);\n }\n get isDestroyed() {\n return isDestroyed(this);\n }\n\n /**\n * Called before the component has been removed from the DOM.\n */\n willDestroy() {}\n}","import Ember from 'ember';\nexport const isDestroying = Ember._isDestroying;\nexport const isDestroyed = Ember._isDestroyed;","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { DEBUG } from '@glimmer/env';\nimport { ARGS_SET } from './component';\n/**\n * This factory function returns a component manager class with common behavior\n * that can be extend to add Glimmer.js- or Ember.js-specific functionality. As\n * these environments converge, the need for two component manager\n * implementations (and thus this factory) should go away.\n */\nexport default function BaseComponentManager(setOwner, getOwner, capabilities) {\n return class {\n static create(attrs) {\n let owner = getOwner(attrs);\n return new this(owner);\n }\n constructor(owner) {\n _defineProperty(this, \"capabilities\", capabilities);\n setOwner(this, owner);\n }\n createComponent(ComponentClass, args) {\n if (DEBUG) {\n ARGS_SET.set(args.named, true);\n }\n return new ComponentClass(getOwner(this), args.named);\n }\n getContext(component) {\n return component;\n }\n };\n}","import { DEBUG } from '@glimmer/env';\nimport Ember from 'ember';\nimport { set } from '@ember/object';\nimport { getOwner, setOwner } from '@ember/application';\nimport { capabilities } from '@ember/component';\nimport { schedule } from '@ember/runloop';\nimport BaseComponentManager from './base-component-manager';\nimport * as destroyables from './destroyables';\nconst {\n setDestroyed,\n setDestroying\n} = destroyables;\nconst CAPABILITIES = true // @ts-ignore\n// @ts-ignore\n? capabilities('3.13', {\n destructor: true,\n asyncLifecycleCallbacks: false,\n updateHook: false\n}) : capabilities('3.4', {\n destructor: true,\n asyncLifecycleCallbacks: false\n});\nconst scheduledDestroyComponent = true ? undefined : (component, meta) => {\n if (component.isDestroyed) {\n return;\n }\n Ember.destroy(component);\n meta.setSourceDestroyed();\n setDestroyed(component);\n};\nconst destroy = true ? Ember.destroy : component => {\n if (component.isDestroying) {\n return;\n }\n let meta = Ember.meta(component);\n meta.setSourceDestroying();\n setDestroying(component);\n schedule('actions', component, component.willDestroy);\n schedule('destroy', this, scheduledDestroyComponent, component, meta);\n};\nconst registerDestructor = true ? Ember._registerDestructor : true ? Ember.__loader.require('@glimmer/runtime').registerDestructor : undefined;\n\n/**\n * This component manager runs in Ember.js environments and extends the base component manager to:\n *\n * 1. Properly destroy the component's associated `meta` data structure\n * 2. Schedule destruction using Ember's runloop\n */\nclass EmberGlimmerComponentManager extends BaseComponentManager(setOwner, getOwner, CAPABILITIES) {\n createComponent(ComponentClass, args) {\n const component = super.createComponent(ComponentClass, args);\n if (true) {\n registerDestructor(component, () => {\n component.willDestroy();\n });\n }\n return component;\n }\n destroyComponent(component) {\n destroy(component);\n }\n}\n// In Ember 3.12 and earlier, the updateComponent hook was mandatory.\n// As of Ember 3.13, the `args` object is stable and each property of the\n// object participates in the autotrack stack on its own. This means we do not\n// need to set the `args` property on the component instance to invalidate\n// tracked getters that rely on `args`, and therefore don't require the `updateComponent`\n// hook at all.\nif (!true) {\n EmberGlimmerComponentManager.prototype.updateComponent = function updateComponent(component, args) {\n let argSnapshot = args.named;\n if (DEBUG) {\n argSnapshot = Object.freeze(argSnapshot);\n }\n set(component, 'args', argSnapshot);\n };\n}\nexport default EmberGlimmerComponentManager;","import { DEBUG } from '@glimmer/env';\nimport { setComponentManager } from '@ember/component';\n\n// Hax because the old version of `@types/ember__component` the `1.x` branch\n// uses does not provide any types for `setComponentManager` *and* because we\n// are using a very old version of `setComponentManager` for versions before\n// Ember 3.8.\n\nimport GlimmerComponentManager from './-private/ember-component-manager';\nimport GlimmerComponentBase from './-private/component';\nlet GlimmerComponent = GlimmerComponentBase;\nif (DEBUG) {\n // Add assertions against using Glimmer.js only APIs\n\n // TODO: Add GlimmerComponent API docs link to these messages once API docs are live\n function throwMethodUseError(methodName) {\n throw new Error(`You attempted to define the '${methodName}' method on a Glimmer Component, but that lifecycle hook does not exist in Ember.js applications, it only exists in Glimmer.js apps. You can rename this method, and you can trigger it using a modifier such as {{did-insert}} from '@ember/render-modifiers': https://github.com/emberjs/ember-render-modifiers.`);\n }\n function throwPropertyUseError(propertyName) {\n throw new Error(`You attempted to access the '${propertyName}' property on a Glimmer Component, but that property does not exist in Ember.js applications, it only exists in Glimmer.js apps. You define a class field with the same name on your component class and it will overwrite this error message, but it will not be used by the framework.`);\n }\n GlimmerComponent = class GlimmerDebugComponent extends GlimmerComponent {\n constructor(owner, args) {\n super(owner, args);\n if (typeof this['didInsertElement'] === 'function') {\n throwMethodUseError('didInsertElement');\n }\n if (typeof this['didUpdate'] === 'function') {\n throwMethodUseError('didUpdate');\n }\n }\n };\n let proto = GlimmerComponent.prototype;\n function defineErrorProp(proto, key, getterMethod) {\n Object.defineProperty(proto, key, {\n get: () => getterMethod(key),\n set(value) {\n Object.defineProperty(this, key, {\n value\n });\n }\n });\n }\n\n // Methods should still throw whenever they are accessed\n defineErrorProp(proto, 'bounds', throwPropertyUseError);\n defineErrorProp(proto, 'element', throwPropertyUseError);\n defineErrorProp(proto, 'debugName', throwPropertyUseError);\n}\nif (true) {\n setComponentManager(owner => {\n return new GlimmerComponentManager(owner);\n }, GlimmerComponent);\n} else {\n setComponentManager('glimmer', GlimmerComponent);\n}\nexport default GlimmerComponent;","import * as metal from \"@ember/-internals/metal\";\n const { cached, tracked } = metal;\n export { cached, tracked };","const SkipCache = Symbol.for('wd:skip-cache');\nconst EnableHydration = Symbol.for('wd:enable-hydration');\nconst IS_FUTURE = Symbol('IS_FUTURE');\nconst STRUCTURED = Symbol('DOC');\n\n/**\n * Use these options to adjust CacheHandler behavior for a request.\n *\n * @typedoc\n */\n\n/**\n * JavaScript's native Request class.\n *\n * EmberData provides our own typings due to incompleteness in the native typings.\n *\n * @typedoc\n */\n\n/**\n * Extends JavaScript's native {@link Request} object with additional\n * properties specific to the RequestManager's capabilities.\n *\n * @typedoc\n */\n\n/**\n * Immutable version of {@link RequestInfo}. This is what is passed to handlers.\n *\n * @typedoc\n */\n\nexport { EnableHydration, IS_FUTURE, STRUCTURED, SkipCache };","import Ember from 'ember';\n\nconst { libraries } = Ember;\n\nexport default function initializerFactory(name, version) {\n let registered = false;\n\n return function () {\n if (!registered && name && version) {\n libraries.register(name, version);\n registered = true;\n }\n };\n}\n","import initializerFactory from 'ember-cli-app-version/initializer-factory';\nimport config from '../config/environment';\n\nlet name, version;\nif (config.APP) {\n name = config.APP.name;\n version = config.APP.version;\n}\n\nexport default {\n name: 'App Version',\n initialize: initializerFactory(name, version),\n};\n","/*\n This code initializes EmberData in an Ember application.\n*/\nexport default {\n name: 'ember-data',\n initialize(application) {\n application.registerOptionsForType('serializer', { singleton: false });\n application.registerOptionsForType('adapter', { singleton: false });\n },\n};\n","import { assert } from '@ember/debug';\nimport { graphFor, peekGraph, isBelongsTo } from '@ember-data/graph/-private';\nimport { macroCondition, getOwnConfig } from '@embroider/macros';\n\n/**\n * @module @ember-data/json-api\n */\nfunction isImplicit(relationship) {\n return relationship.definition.isImplicit;\n}\nfunction upgradeCapabilities(obj) {}\nconst EMPTY_ITERATOR = {\n iterator() {\n return {\n next() {\n return {\n done: true,\n value: undefined\n };\n }\n };\n }\n};\nfunction makeCache() {\n return {\n id: null,\n remoteAttrs: null,\n localAttrs: null,\n inflightAttrs: null,\n changes: null,\n errors: null,\n isNew: false,\n isDeleted: false,\n isDeletionCommitted: false\n };\n}\n\n/**\n A JSON:API Cache implementation.\n\n What cache the store uses is configurable. Using a different\n implementation can be achieved by implementing the store's\n createCache hook.\n\n This is the cache implementation used by `ember-data`.\n\n ```js\n import Cache from '@ember-data/json-api';\n import Store from '@ember-data/store';\n\n export default class extends Store {\n createCache(wrapper) {\n return new Cache(wrapper);\n }\n }\n ```\n\n @class Cache\n @public\n */\n\nclass JSONAPICache {\n /**\n * The Cache Version that this implementation implements.\n *\n * @type {'2'}\n * @public\n * @property version\n */\n\n constructor(storeWrapper) {\n this.version = '2';\n this._capabilities = storeWrapper;\n this.__cache = new Map();\n this.__graph = graphFor(storeWrapper);\n this.__destroyedCache = new Map();\n this.__documents = new Map();\n }\n\n // Cache Management\n // ================\n\n /**\n * Cache the response to a request\n *\n * Implements `Cache.put`.\n *\n * Expects a StructuredDocument whose `content` member is a JsonApiDocument.\n *\n * ```js\n * cache.put({\n * request: { url: 'https://api.example.com/v1/user/1' },\n * content: {\n * data: {\n * type: 'user',\n * id: '1',\n * attributes: {\n * name: 'Chris'\n * }\n * }\n * }\n * })\n * ```\n *\n * > **Note**\n * > The nested `content` and `data` members are not a mistake. This is because\n * > there are two separate concepts involved here, the `StructuredDocument` which contains\n * > the context of a given Request that has been issued with the returned contents as its\n * > `content` property, and a `JSON:API Document` which is the json contents returned by\n * > this endpoint and which uses its `data` property to signify which resources are the\n * > primary resources associated with the request.\n *\n * StructuredDocument's with urls will be cached as full documents with\n * associated resource membership order and contents preserved but linked\n * into the cache.\n *\n * @method put\n * @param {StructuredDocument} doc\n * @return {ResourceDocument}\n * @public\n */\n\n put(doc) {\n assert(`Expected a JSON:API Document as the content provided to the cache, received ${typeof doc.content}`, doc instanceof Error || typeof doc.content === 'object' && doc.content !== null);\n if (isErrorDocument(doc)) {\n return this._putDocument(doc, undefined, undefined);\n } else if (isMetaDocument(doc)) {\n return this._putDocument(doc, undefined, undefined);\n }\n const jsonApiDoc = doc.content;\n const included = jsonApiDoc.included;\n let i, length;\n const {\n identifierCache\n } = this._capabilities;\n if (macroCondition(getOwnConfig().debug.LOG_REQUESTS)) {\n const Counts = new Map();\n if (included) {\n for (i = 0, length = included.length; i < length; i++) {\n const type = included[i].type;\n Counts.set(type, (Counts.get(type) || 0) + 1);\n }\n }\n if (Array.isArray(jsonApiDoc.data)) {\n for (i = 0, length = jsonApiDoc.data.length; i < length; i++) {\n const type = jsonApiDoc.data[i].type;\n Counts.set(type, (Counts.get(type) || 0) + 1);\n }\n } else if (jsonApiDoc.data) {\n const type = jsonApiDoc.data.type;\n Counts.set(type, (Counts.get(type) || 0) + 1);\n }\n let str = `JSON:API Cache - put (${doc.content?.lid || doc.request?.url || 'unknown-request'})\\n\\tContents:`;\n Counts.forEach((count, type) => {\n str += `\\n\\t\\t${type}: ${count}`;\n });\n if (Counts.size === 0) {\n str += `\\t(empty)`;\n }\n // eslint-disable-next-line no-console\n console.log(str);\n }\n if (included) {\n for (i = 0, length = included.length; i < length; i++) {\n included[i] = putOne(this, identifierCache, included[i]);\n }\n }\n if (Array.isArray(jsonApiDoc.data)) {\n length = jsonApiDoc.data.length;\n const identifiers = [];\n for (i = 0; i < length; i++) {\n identifiers.push(putOne(this, identifierCache, jsonApiDoc.data[i]));\n }\n return this._putDocument(doc, identifiers, included);\n }\n if (jsonApiDoc.data === null) {\n return this._putDocument(doc, null, included);\n }\n assert(`Expected a resource object in the 'data' property in the document provided to the cache, but was ${typeof jsonApiDoc.data}`, typeof jsonApiDoc.data === 'object');\n const identifier = putOne(this, identifierCache, jsonApiDoc.data);\n return this._putDocument(doc, identifier, included);\n }\n _putDocument(doc, data, included) {\n // @ts-expect-error narrowing within is just horrible in TS :/\n const resourceDocument = isErrorDocument(doc) ? fromStructuredError(doc) : fromBaseDocument(doc);\n if (data !== undefined) {\n resourceDocument.data = data;\n }\n if (included !== undefined) {\n assert(`There should not be included data on an Error document`, !isErrorDocument(doc));\n assert(`There should not be included data on a Meta document`, !isMetaDocument(doc));\n resourceDocument.included = included;\n }\n const request = doc.request;\n const identifier = request ? this._capabilities.identifierCache.getOrCreateDocumentIdentifier(request) : null;\n if (identifier) {\n resourceDocument.lid = identifier.lid;\n\n // @ts-expect-error\n doc.content = resourceDocument;\n const hasExisting = this.__documents.has(identifier.lid);\n this.__documents.set(identifier.lid, doc);\n this._capabilities.notifyChange(identifier, hasExisting ? 'updated' : 'added');\n }\n return resourceDocument;\n }\n\n /**\n * Update the \"remote\" or \"canonical\" (persisted) state of the Cache\n * by merging new information into the existing state.\n *\n * Note: currently the only valid resource operation is a MergeOperation\n * which occurs when a collision of identifiers is detected.\n *\n * @method patch\n * @public\n * @param {Operation} op the operation to perform\n * @return {void}\n */\n patch(op) {\n if (macroCondition(getOwnConfig().debug.LOG_OPERATIONS)) {\n try {\n const _data = JSON.parse(JSON.stringify(op));\n // eslint-disable-next-line no-console\n console.log(`EmberData | Operation - patch ${op.op}`, _data);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(`EmberData | Operation - patch ${op.op}`, op);\n }\n }\n if (op.op === 'mergeIdentifiers') {\n const cache = this.__cache.get(op.record);\n if (cache) {\n this.__cache.set(op.value, cache);\n this.__cache.delete(op.record);\n }\n this.__graph.update(op, true);\n }\n }\n\n /**\n * Update the \"local\" or \"current\" (unpersisted) state of the Cache\n *\n * @method mutate\n * @param {Mutation} mutation\n * @return {void}\n * @public\n */\n mutate(mutation) {\n if (macroCondition(getOwnConfig().debug.LOG_MUTATIONS)) {\n try {\n const _data = JSON.parse(JSON.stringify(mutation));\n // eslint-disable-next-line no-console\n console.log(`EmberData | Mutation - update ${mutation.op}`, _data);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(`EmberData | Mutation - update ${mutation.op}`, mutation);\n }\n }\n this.__graph.update(mutation, false);\n }\n\n /**\n * Peek resource data from the Cache.\n *\n * In development, if the return value\n * is JSON the return value\n * will be deep-cloned and deep-frozen\n * to prevent mutation thereby enforcing cache\n * Immutability.\n *\n * This form of peek is useful for implementations\n * that want to feed raw-data from cache to the UI\n * or which want to interact with a blob of data\n * directly from the presentation cache.\n *\n * An implementation might want to do this because\n * de-referencing records which read from their own\n * blob is generally safer because the record does\n * not require retainining connections to the Store\n * and Cache to present data on a per-field basis.\n *\n * This generally takes the place of `getAttr` as\n * an API and may even take the place of `getRelationship`\n * depending on implementation specifics, though this\n * latter usage is less recommended due to the advantages\n * of the Graph handling necessary entanglements and\n * notifications for relational data.\n *\n * @method peek\n * @public\n * @param {StableRecordIdentifier | StableDocumentIdentifier} identifier\n * @return {ResourceDocument | ResourceBlob | null} the known resource data\n */\n\n peek(identifier) {\n if ('type' in identifier) {\n const peeked = this.__safePeek(identifier, false);\n if (!peeked) {\n return null;\n }\n const {\n type,\n id,\n lid\n } = identifier;\n const attributes = Object.assign({}, peeked.remoteAttrs, peeked.inflightAttrs, peeked.localAttrs);\n const relationships = {};\n const rels = this.__graph.identifiers.get(identifier);\n if (rels) {\n Object.keys(rels).forEach(key => {\n const rel = rels[key];\n if (rel.definition.isImplicit) {\n return;\n } else {\n relationships[key] = this.__graph.getData(identifier, key);\n }\n });\n }\n upgradeCapabilities(this._capabilities);\n const store = this._capabilities._store;\n const attrs = this._capabilities.schema.fields(identifier);\n attrs.forEach((attr, key) => {\n if (key in attributes && attributes[key] !== undefined) {\n return;\n }\n const defaultValue = getDefaultValue(attr, identifier, store);\n if (defaultValue !== undefined) {\n attributes[key] = defaultValue;\n }\n });\n return {\n type,\n id,\n lid,\n attributes,\n relationships\n };\n }\n const document = this.peekRequest(identifier);\n if (document) {\n if ('content' in document) return document.content;\n }\n return null;\n }\n\n /**\n * Peek the Cache for the existing request data associated with\n * a cacheable request.\n *\n * This is effectively the reverse of `put` for a request in\n * that it will return the the request, response, and content\n * whereas `peek` will return just the `content`.\n *\n * @method peekRequest\n * @param {StableDocumentIdentifier}\n * @return {StructuredDocument | null}\n * @public\n */\n peekRequest(identifier) {\n return this.__documents.get(identifier.lid) || null;\n }\n\n /**\n * Push resource data from a remote source into the cache for this identifier\n *\n * @method upsert\n * @public\n * @param identifier\n * @param data\n * @param hasRecord\n * @return {void | string[]} if `hasRecord` is true then calculated key changes should be returned\n */\n upsert(identifier, data, calculateChanges) {\n let changedKeys;\n const peeked = this.__safePeek(identifier, false);\n const existed = !!peeked;\n const cached = peeked || this._createCache(identifier);\n const isLoading = /*#__NOINLINE__*/_isLoading(peeked, this._capabilities, identifier) || !recordIsLoaded(peeked);\n const isUpdate = /*#__NOINLINE__*/!_isEmpty(peeked) && !isLoading;\n if (macroCondition(getOwnConfig().debug.LOG_OPERATIONS)) {\n try {\n const _data = JSON.parse(JSON.stringify(data));\n // eslint-disable-next-line no-console\n console.log(`EmberData | Operation - upsert (${existed ? 'merge' : 'insert'})`, _data);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(`EmberData | Operation - upsert (${existed ? 'merge' : 'insert'})`, data);\n }\n }\n if (cached.isNew) {\n cached.isNew = false;\n this._capabilities.notifyChange(identifier, 'identity');\n this._capabilities.notifyChange(identifier, 'state');\n }\n if (calculateChanges) {\n changedKeys = existed ? calculateChangedKeys(cached, data.attributes) : Object.keys(data.attributes || {});\n }\n cached.remoteAttrs = Object.assign(cached.remoteAttrs || Object.create(null), data.attributes);\n if (cached.localAttrs) {\n if (patchLocalAttributes(cached)) {\n this._capabilities.notifyChange(identifier, 'state');\n }\n }\n if (!isUpdate) {\n this._capabilities.notifyChange(identifier, 'added');\n }\n if (data.id) {\n cached.id = data.id;\n }\n if (data.relationships) {\n setupRelationships(this.__graph, this._capabilities, identifier, data);\n }\n if (changedKeys && changedKeys.length) {\n notifyAttributes(this._capabilities, identifier, changedKeys);\n }\n return changedKeys;\n }\n\n // Cache Forking Support\n // =====================\n\n /**\n * Create a fork of the cache from the current state.\n *\n * Applications should typically not call this method themselves,\n * preferring instead to fork at the Store level, which will\n * utilize this method to fork the cache.\n *\n * @method fork\n * @internal\n * @return Promise\n */\n fork() {\n throw new Error(`Not Implemented`);\n }\n\n /**\n * Merge a fork back into a parent Cache.\n *\n * Applications should typically not call this method themselves,\n * preferring instead to merge at the Store level, which will\n * utilize this method to merge the caches.\n *\n * @method merge\n * @param {Cache} cache\n * @public\n * @return Promise\n */\n merge(cache) {\n throw new Error(`Not Implemented`);\n }\n\n /**\n * Generate the list of changes applied to all\n * record in the store.\n *\n * Each individual resource or document that has\n * been mutated should be described as an individual\n * `Change` entry in the returned array.\n *\n * A `Change` is described by an object containing up to\n * three properties: (1) the `identifier` of the entity that\n * changed; (2) the `op` code of that change being one of\n * `upsert` or `remove`, and if the op is `upsert` a `patch`\n * containing the data to merge into the cache for the given\n * entity.\n *\n * This `patch` is opaque to the Store but should be understood\n * by the Cache and may expect to be utilized by an Adapter\n * when generating data during a `save` operation.\n *\n * It is generally recommended that the `patch` contain only\n * the updated state, ignoring fields that are unchanged\n *\n * ```ts\n * interface Change {\n * identifier: StableRecordIdentifier | StableDocumentIdentifier;\n * op: 'upsert' | 'remove';\n * patch?: unknown;\n * }\n * ```\n *\n * @method diff\n * @public\n */\n diff() {\n throw new Error(`Not Implemented`);\n }\n\n // SSR Support\n // ===========\n\n /**\n * Serialize the entire contents of the Cache into a Stream\n * which may be fed back into a new instance of the same Cache\n * via `cache.hydrate`.\n *\n * @method dump\n * @return {Promise}\n * @public\n */\n dump() {\n throw new Error(`Not Implemented`);\n }\n\n /**\n * hydrate a Cache from a Stream with content previously serialized\n * from another instance of the same Cache, resolving when hydration\n * is complete.\n *\n * This method should expect to be called both in the context of restoring\n * the Cache during application rehydration after SSR **AND** at unknown\n * times during the lifetime of an already booted application when it is\n * desired to bulk-load additional information into the cache. This latter\n * behavior supports optimizing pre/fetching of data for route transitions\n * via data-only SSR modes.\n *\n * @method hydrate\n * @param {ReadableStream} stream\n * @return {Promise}\n * @public\n */\n hydrate(stream) {\n throw new Error('Not Implemented');\n }\n\n // Resource Support\n // ================\n\n /**\n * [LIFECYCLE] Signal to the cache that a new record has been instantiated on the client\n *\n * It returns properties from options that should be set on the record during the create\n * process. This return value behavior is deprecated.\n *\n * @method clientDidCreate\n * @public\n * @param identifier\n * @param createArgs\n */\n clientDidCreate(identifier, options) {\n if (macroCondition(getOwnConfig().debug.LOG_MUTATIONS)) {\n try {\n const _data = options ? JSON.parse(JSON.stringify(options)) : options;\n // eslint-disable-next-line no-console\n console.log(`EmberData | Mutation - clientDidCreate ${identifier.lid}`, _data);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(`EmberData | Mutation - clientDidCreate ${identifier.lid}`, options);\n }\n }\n const cached = this._createCache(identifier);\n cached.isNew = true;\n const createOptions = {};\n if (options !== undefined) {\n const storeWrapper = this._capabilities;\n const fields = storeWrapper.schema.fields(identifier);\n const graph = this.__graph;\n const propertyNames = Object.keys(options);\n for (let i = 0; i < propertyNames.length; i++) {\n const name = propertyNames[i];\n const propertyValue = options[name];\n if (name === 'id') {\n continue;\n }\n const fieldType = fields.get(name);\n const kind = fieldType !== undefined ? 'kind' in fieldType ? fieldType.kind : 'attribute' : null;\n let relationship;\n switch (kind) {\n case 'attribute':\n this.setAttr(identifier, name, propertyValue);\n createOptions[name] = propertyValue;\n break;\n case 'belongsTo':\n this.mutate({\n op: 'replaceRelatedRecord',\n field: name,\n record: identifier,\n value: propertyValue\n });\n relationship = graph.get(identifier, name);\n relationship.state.hasReceivedData = true;\n relationship.state.isEmpty = false;\n break;\n case 'hasMany':\n this.mutate({\n op: 'replaceRelatedRecords',\n field: name,\n record: identifier,\n value: propertyValue\n });\n relationship = graph.get(identifier, name);\n relationship.state.hasReceivedData = true;\n relationship.state.isEmpty = false;\n break;\n default:\n // reflect back (pass-thru) unknown properties\n createOptions[name] = propertyValue;\n }\n }\n }\n this._capabilities.notifyChange(identifier, 'added');\n return createOptions;\n }\n\n /**\n * [LIFECYCLE] Signals to the cache that a resource\n * will be part of a save transaction.\n *\n * @method willCommit\n * @public\n * @param identifier\n */\n willCommit(identifier) {\n const cached = this.__peek(identifier, false);\n\n /*\n if we have multiple saves in flight at once then\n we have information loss no matter what. This\n attempts to lose the least information.\n If we were to clear inflightAttrs, previous requests\n would not be able to use it during their didCommit.\n If we upsert inflightattrs, previous requests incorrectly\n see more recent inflight changes as part of their own and\n will incorrectly mark the new state as the correct remote state.\n We choose this latter behavior to avoid accidentally removing\n earlier changes.\n If apps do not want this behavior they can either\n - chain save requests serially vs allowing concurrent saves\n - move to using a request handler that caches the inflight state\n on a per-request basis\n - change their save requests to only send a \"PATCH\" instead of a \"PUT\"\n so that only latest changes are involved in each request, and then also\n ensure that the API or their handler reflects only those changes back\n for upsert into the cache.\n */\n if (cached.inflightAttrs) {\n if (cached.localAttrs) {\n Object.assign(cached.inflightAttrs, cached.localAttrs);\n }\n } else {\n cached.inflightAttrs = cached.localAttrs;\n }\n cached.localAttrs = null;\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (macroCondition(!getOwnConfig().deprecations.DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE)) {\n // save off info about saved relationships\n const relationships = this._capabilities.getSchemaDefinitionService().relationshipsDefinitionFor(identifier);\n Object.keys(relationships).forEach(relationshipName => {\n const relationship = relationships[relationshipName];\n if (relationship.kind === 'belongsTo') {\n if (this.__graph._isDirty(identifier, relationshipName)) {\n const relationshipData = this.__graph.getData(identifier, relationshipName);\n const inFlight = cached.inflightRelationships = cached.inflightRelationships || Object.create(null);\n inFlight[relationshipName] = relationshipData;\n }\n }\n });\n }\n }\n }\n\n /**\n * [LIFECYCLE] Signals to the cache that a resource\n * was successfully updated as part of a save transaction.\n *\n * @method didCommit\n * @public\n * @param identifier\n * @param data\n */\n didCommit(committedIdentifier, result) {\n const payload = result.content;\n const operation = result.request.op;\n const data = payload && payload.data;\n if (!data) {\n assert(`Your ${committedIdentifier.type} record was saved to the server, but the response does not have an id and no id has been set client side. Records must have ids. Please update the server response to provide an id in the response or generate the id on the client side either before saving the record or while normalizing the response.`, committedIdentifier.id);\n }\n const {\n identifierCache\n } = this._capabilities;\n const existingId = committedIdentifier.id;\n const identifier = operation !== 'deleteRecord' && data ? identifierCache.updateRecordIdentifier(committedIdentifier, data) : committedIdentifier;\n const cached = this.__peek(identifier, false);\n if (cached.isDeleted) {\n this.__graph.push({\n op: 'deleteRecord',\n record: identifier,\n isNew: false\n });\n cached.isDeletionCommitted = true;\n this._capabilities.notifyChange(identifier, 'removed');\n // TODO @runspired should we early exit here?\n }\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (cached.isNew && !identifier.id && (typeof data?.id !== 'string' || data.id.length > 0)) {\n const error = new Error(`Expected an id ${String(identifier)} in response ${JSON.stringify(data)}`);\n //@ts-expect-error\n error.isAdapterError = true;\n //@ts-expect-error\n error.code = 'InvalidError';\n throw error;\n }\n }\n cached.isNew = false;\n let newCanonicalAttributes;\n if (data) {\n if (data.id && !cached.id) {\n cached.id = data.id;\n }\n if (identifier === committedIdentifier && identifier.id !== existingId) {\n this._capabilities.notifyChange(identifier, 'identity');\n }\n assert(`Expected the ID received for the primary '${identifier.type}' resource being saved to match the current id '${cached.id}' but received '${identifier.id}'.`, identifier.id === cached.id);\n if (data.relationships) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (macroCondition(!getOwnConfig().deprecations.DEPRECATE_RELATIONSHIP_REMOTE_UPDATE_CLEARING_LOCAL_STATE)) {\n // assert against bad API behavior where a belongsTo relationship\n // is saved but the return payload indicates a different final state.\n const relationships = this._capabilities.getSchemaDefinitionService().relationshipsDefinitionFor(identifier);\n Object.keys(relationships).forEach(relationshipName => {\n const relationship = relationships[relationshipName];\n if (relationship.kind === 'belongsTo') {\n const relationshipData = data.relationships[relationshipName]?.data;\n if (relationshipData !== undefined) {\n const inFlightData = cached.inflightRelationships?.[relationshipName];\n if (!inFlightData || !('data' in inFlightData)) {\n return;\n }\n const actualData = relationshipData ? this._capabilities.identifierCache.getOrCreateRecordIdentifier(relationshipData) : null;\n assert(`Expected the resource relationship '<${identifier.type}>.${relationshipName}' on ${identifier.lid} to be saved as ${inFlightData.data ? inFlightData.data.lid : ''} but it was saved as ${actualData ? actualData.lid : ''}`, inFlightData.data === actualData);\n }\n }\n });\n cached.inflightRelationships = null;\n }\n }\n setupRelationships(this.__graph, this._capabilities, identifier, data);\n }\n newCanonicalAttributes = data.attributes;\n }\n const changedKeys = calculateChangedKeys(cached, newCanonicalAttributes);\n cached.remoteAttrs = Object.assign(cached.remoteAttrs || Object.create(null), cached.inflightAttrs, newCanonicalAttributes);\n cached.inflightAttrs = null;\n patchLocalAttributes(cached);\n if (cached.errors) {\n cached.errors = null;\n this._capabilities.notifyChange(identifier, 'errors');\n }\n notifyAttributes(this._capabilities, identifier, changedKeys);\n this._capabilities.notifyChange(identifier, 'state');\n const included = payload && payload.included;\n if (included) {\n for (let i = 0, length = included.length; i < length; i++) {\n putOne(this, identifierCache, included[i]);\n }\n }\n return {\n data: identifier\n };\n }\n\n /**\n * [LIFECYCLE] Signals to the cache that a resource\n * was update via a save transaction failed.\n *\n * @method commitWasRejected\n * @public\n * @param identifier\n * @param errors\n */\n commitWasRejected(identifier, errors) {\n const cached = this.__peek(identifier, false);\n if (cached.inflightAttrs) {\n const keys = Object.keys(cached.inflightAttrs);\n if (keys.length > 0) {\n const attrs = cached.localAttrs = cached.localAttrs || Object.create(null);\n for (let i = 0; i < keys.length; i++) {\n if (attrs[keys[i]] === undefined) {\n attrs[keys[i]] = cached.inflightAttrs[keys[i]];\n }\n }\n }\n cached.inflightAttrs = null;\n }\n if (errors) {\n cached.errors = errors;\n }\n this._capabilities.notifyChange(identifier, 'errors');\n }\n\n /**\n * [LIFECYCLE] Signals to the cache that all data for a resource\n * should be cleared.\n *\n * This method is a candidate to become a mutation\n *\n * @method unloadRecord\n * @public\n * @param identifier\n */\n unloadRecord(identifier) {\n const storeWrapper = this._capabilities;\n // TODO this is necessary because\n // we maintain memebership inside InstanceCache\n // for peekAll, so even though we haven't created\n // any data we think this exists.\n // TODO can we eliminate that membership now?\n if (!this.__cache.has(identifier)) {\n // the graph may still need to unload identity\n peekGraph(storeWrapper)?.unload(identifier);\n return;\n }\n const removeFromRecordArray = !this.isDeletionCommitted(identifier);\n let removed = false;\n const cached = this.__peek(identifier, false);\n if (cached.isNew) {\n peekGraph(storeWrapper)?.push({\n op: 'deleteRecord',\n record: identifier,\n isNew: true\n });\n } else {\n peekGraph(storeWrapper)?.unload(identifier);\n }\n\n // effectively clearing these is ensuring that\n // we report as `isEmpty` during teardown.\n cached.localAttrs = null;\n cached.remoteAttrs = null;\n cached.inflightAttrs = null;\n const relatedIdentifiers = _allRelatedIdentifiers(storeWrapper, identifier);\n if (areAllModelsUnloaded(storeWrapper, relatedIdentifiers)) {\n for (let i = 0; i < relatedIdentifiers.length; ++i) {\n const relatedIdentifier = relatedIdentifiers[i];\n storeWrapper.notifyChange(relatedIdentifier, 'removed');\n removed = true;\n storeWrapper.disconnectRecord(relatedIdentifier);\n }\n }\n this.__cache.delete(identifier);\n this.__destroyedCache.set(identifier, cached);\n\n /*\n * The destroy cache is a hack to prevent applications\n * from blowing up during teardown. Accessing state\n * on a destroyed record is not safe, but historically\n * was possible due to a combination of teardown timing\n * and retention of cached state directly on the\n * record itself.\n *\n * Once we have deprecated accessing state on a destroyed\n * instance we may remove this. The timing isn't a huge deal\n * as momentarily retaining the objects outside the bounds\n * of a test won't cause issues.\n */\n if (this.__destroyedCache.size === 1) {\n // TODO do we still need this?\n setTimeout(() => {\n this.__destroyedCache.clear();\n }, 100);\n }\n if (!removed && removeFromRecordArray) {\n storeWrapper.notifyChange(identifier, 'removed');\n }\n }\n\n // Granular Resource Data APIs\n // ===========================\n\n /**\n * Retrieve the data for an attribute from the cache\n *\n * @method getAttr\n * @public\n * @param identifier\n * @param field\n * @return {unknown}\n */\n getAttr(identifier, attr) {\n const cached = this.__peek(identifier, true);\n if (cached.localAttrs && attr in cached.localAttrs) {\n return cached.localAttrs[attr];\n } else if (cached.inflightAttrs && attr in cached.inflightAttrs) {\n return cached.inflightAttrs[attr];\n } else if (cached.remoteAttrs && attr in cached.remoteAttrs) {\n return cached.remoteAttrs[attr];\n } else {\n const attrSchema = this._capabilities.schema.fields(identifier).get(attr);\n upgradeCapabilities(this._capabilities);\n return getDefaultValue(attrSchema, identifier, this._capabilities._store);\n }\n }\n\n /**\n * Mutate the data for an attribute in the cache\n *\n * This method is a candidate to become a mutation\n *\n * @method setAttr\n * @public\n * @param identifier\n * @param field\n * @param value\n */\n setAttr(identifier, attr, value) {\n const cached = this.__peek(identifier, false);\n const existing = cached.inflightAttrs && attr in cached.inflightAttrs ? cached.inflightAttrs[attr] : cached.remoteAttrs && attr in cached.remoteAttrs ? cached.remoteAttrs[attr] : undefined;\n if (existing !== value) {\n cached.localAttrs = cached.localAttrs || Object.create(null);\n cached.localAttrs[attr] = value;\n cached.changes = cached.changes || Object.create(null);\n cached.changes[attr] = [existing, value];\n } else if (cached.localAttrs) {\n delete cached.localAttrs[attr];\n delete cached.changes[attr];\n }\n this._capabilities.notifyChange(identifier, 'attributes', attr);\n }\n\n /**\n * Query the cache for the changed attributes of a resource.\n *\n * @method changedAttrs\n * @public\n * @param identifier\n * @return {ChangedAttributesHash} { : [, ] }\n */\n changedAttrs(identifier) {\n // TODO freeze in dev\n return this.__peek(identifier, false).changes || Object.create(null);\n }\n\n /**\n * Query the cache for whether any mutated attributes exist\n *\n * @method hasChangedAttrs\n * @public\n * @param identifier\n * @return {boolean}\n */\n hasChangedAttrs(identifier) {\n const cached = this.__peek(identifier, true);\n return cached.inflightAttrs !== null && Object.keys(cached.inflightAttrs).length > 0 || cached.localAttrs !== null && Object.keys(cached.localAttrs).length > 0;\n }\n\n /**\n * Tell the cache to discard any uncommitted mutations to attributes\n *\n * This method is a candidate to become a mutation\n *\n * @method rollbackAttrs\n * @public\n * @param identifier\n * @return {string[]} the names of fields that were restored\n */\n rollbackAttrs(identifier) {\n const cached = this.__peek(identifier, false);\n let dirtyKeys;\n cached.isDeleted = false;\n if (cached.localAttrs !== null) {\n dirtyKeys = Object.keys(cached.localAttrs);\n cached.localAttrs = null;\n cached.changes = null;\n }\n if (cached.isNew) {\n // > Note: Graph removal handled by unloadRecord\n cached.isDeletionCommitted = true;\n cached.isDeleted = true;\n cached.isNew = false;\n }\n cached.inflightAttrs = null;\n if (cached.errors) {\n cached.errors = null;\n this._capabilities.notifyChange(identifier, 'errors');\n }\n this._capabilities.notifyChange(identifier, 'state');\n if (dirtyKeys && dirtyKeys.length) {\n notifyAttributes(this._capabilities, identifier, dirtyKeys);\n }\n return dirtyKeys || [];\n }\n\n /**\n * Query the cache for the changes to relationships of a resource.\n *\n * Returns a map of relationship names to RelationshipDiff objects.\n *\n * ```ts\n * type RelationshipDiff =\n | {\n kind: 'collection';\n remoteState: StableRecordIdentifier[];\n additions: Set;\n removals: Set;\n localState: StableRecordIdentifier[];\n reordered: boolean;\n }\n | {\n kind: 'resource';\n remoteState: StableRecordIdentifier | null;\n localState: StableRecordIdentifier | null;\n };\n ```\n *\n * @method changedRelationships\n * @public\n * @param {StableRecordIdentifier} identifier\n * @return {Map}\n */\n changedRelationships(identifier) {\n return this.__graph.getChanged(identifier);\n }\n\n /**\n * Query the cache for whether any mutated relationships exist\n *\n * @method hasChangedRelationships\n * @public\n * @param {StableRecordIdentifier} identifier\n * @return {boolean}\n */\n hasChangedRelationships(identifier) {\n return this.__graph.hasChanged(identifier);\n }\n\n /**\n * Tell the cache to discard any uncommitted mutations to relationships.\n *\n * This will also discard the change on any appropriate inverses.\n *\n * This method is a candidate to become a mutation\n *\n * @method rollbackRelationships\n * @public\n * @param {StableRecordIdentifier} identifier\n * @return {string[]} the names of relationships that were restored\n */\n rollbackRelationships(identifier) {\n upgradeCapabilities(this._capabilities);\n let result;\n this._capabilities._store._join(() => {\n result = this.__graph.rollback(identifier);\n });\n return result;\n }\n\n /**\n * Query the cache for the current state of a relationship property\n *\n * @method getRelationship\n * @public\n * @param identifier\n * @param field\n * @return resource relationship object\n */\n getRelationship(identifier, field) {\n return this.__graph.getData(identifier, field);\n }\n\n // Resource State\n // ===============\n\n /**\n * Update the cache state for the given resource to be marked\n * as locally deleted, or remove such a mark.\n *\n * This method is a candidate to become a mutation\n *\n * @method setIsDeleted\n * @public\n * @param identifier\n * @param isDeleted {boolean}\n */\n setIsDeleted(identifier, isDeleted) {\n const cached = this.__peek(identifier, false);\n cached.isDeleted = isDeleted;\n // > Note: Graph removal for isNew handled by unloadRecord\n this._capabilities.notifyChange(identifier, 'state');\n }\n\n /**\n * Query the cache for any validation errors applicable to the given resource.\n *\n * @method getErrors\n * @public\n * @param identifier\n * @return {JsonApiError[]}\n */\n getErrors(identifier) {\n return this.__peek(identifier, true).errors || [];\n }\n\n /**\n * Query the cache for whether a given resource has any available data\n *\n * @method isEmpty\n * @public\n * @param identifier\n * @return {boolean}\n */\n isEmpty(identifier) {\n const cached = this.__safePeek(identifier, true);\n return cached ? cached.remoteAttrs === null && cached.inflightAttrs === null && cached.localAttrs === null : true;\n }\n\n /**\n * Query the cache for whether a given resource was created locally and not\n * yet persisted.\n *\n * @method isNew\n * @public\n * @param identifier\n * @return {boolean}\n */\n isNew(identifier) {\n // TODO can we assert here?\n return this.__safePeek(identifier, true)?.isNew || false;\n }\n\n /**\n * Query the cache for whether a given resource is marked as deleted (but not\n * necessarily persisted yet).\n *\n * @method isDeleted\n * @public\n * @param identifier\n * @return {boolean}\n */\n isDeleted(identifier) {\n // TODO can we assert here?\n return this.__safePeek(identifier, true)?.isDeleted || false;\n }\n\n /**\n * Query the cache for whether a given resource has been deleted and that deletion\n * has also been persisted.\n *\n * @method isDeletionCommitted\n * @public\n * @param identifier\n * @return {boolean}\n */\n isDeletionCommitted(identifier) {\n // TODO can we assert here?\n return this.__safePeek(identifier, true)?.isDeletionCommitted || false;\n }\n\n /**\n * Private method used to populate an entry for the identifier\n *\n * @method _createCache\n * @internal\n * @param {StableRecordIdentifier} identifier\n * @return {CachedResource}\n */\n _createCache(identifier) {\n assert(`Expected no resource data to yet exist in the cache`, !this.__cache.has(identifier));\n const cache = makeCache();\n this.__cache.set(identifier, cache);\n return cache;\n }\n\n /**\n * Peek whether we have cached resource data matching the identifier\n * without asserting if the resource data is missing.\n *\n * @method __safePeek\n * @param {StableRecordIdentifier} identifier\n * @param {Boolean} allowDestroyed\n * @internal\n * @return {CachedResource | undefined}\n */\n __safePeek(identifier, allowDestroyed) {\n let resource = this.__cache.get(identifier);\n if (!resource && allowDestroyed) {\n resource = this.__destroyedCache.get(identifier);\n }\n return resource;\n }\n\n /**\n * Peek whether we have cached resource data matching the identifier\n * Asserts if the resource data is missing.\n *\n * @method __Peek\n * @param {StableRecordIdentifier} identifier\n * @param {Boolean} allowDestroyed\n * @internal\n * @return {CachedResource}\n */\n __peek(identifier, allowDestroyed) {\n const resource = this.__safePeek(identifier, allowDestroyed);\n assert(`Expected Cache to have a resource entry for the identifier ${String(identifier)} but none was found`, resource);\n return resource;\n }\n}\nfunction areAllModelsUnloaded(wrapper, identifiers) {\n for (let i = 0; i < identifiers.length; ++i) {\n const identifier = identifiers[i];\n if (wrapper.hasRecord(identifier)) {\n return false;\n }\n }\n return true;\n}\nfunction getLocalState(rel) {\n if (isBelongsTo(rel)) {\n return rel.localState ? [rel.localState] : [];\n }\n return rel.additions ? [...rel.additions] : [];\n}\nfunction getRemoteState(rel) {\n if (isBelongsTo(rel)) {\n return rel.remoteState ? [rel.remoteState] : [];\n }\n return rel.remoteState;\n}\nfunction getDefaultValue(schema, identifier, store) {\n const options = schema?.options;\n if (!schema || !options && !schema.type) {\n return;\n }\n if (schema.kind !== 'attribute' && schema.kind !== 'field') {\n return;\n }\n\n // legacy support for defaultValues that are functions\n if (typeof options?.defaultValue === 'function') {\n // If anyone opens an issue for args not working right, we'll restore + deprecate it via a Proxy\n // that lazily instantiates the record. We don't want to provide any args here\n // because in a non @ember-data/model world they don't make sense.\n return options.defaultValue();\n // legacy support for defaultValues that are primitives\n } else if (options && 'defaultValue' in options) {\n const defaultValue = options.defaultValue;\n assert(`Non primitive defaultValues are not supported because they are shared between all instances. If you would like to use a complex object as a default value please provide a function that returns the complex object.`, typeof defaultValue !== 'object' || defaultValue === null);\n return defaultValue;\n\n // new style transforms\n } else if (schema.kind !== 'attribute' && schema.type) {\n const transform = store.schema.transforms?.get(schema.type);\n if (transform?.defaultValue) {\n return transform.defaultValue(options || null, identifier);\n }\n }\n}\nfunction notifyAttributes(storeWrapper, identifier, keys) {\n if (!keys) {\n storeWrapper.notifyChange(identifier, 'attributes');\n return;\n }\n for (let i = 0; i < keys.length; i++) {\n storeWrapper.notifyChange(identifier, 'attributes', keys[i]);\n }\n}\n\n/*\n TODO @deprecate IGOR DAVID\n There seems to be a potential bug here, where we will return keys that are not\n in the schema\n */\nfunction calculateChangedKeys(cached, updates) {\n const changedKeys = [];\n if (updates) {\n const keys = Object.keys(updates);\n const length = keys.length;\n const localAttrs = cached.localAttrs;\n const original = Object.assign(Object.create(null), cached.remoteAttrs, cached.inflightAttrs);\n for (let i = 0; i < length; i++) {\n const key = keys[i];\n const value = updates[key];\n\n // A value in localAttrs means the user has a local change to\n // this attribute. We never override this value when merging\n // updates from the backend so we should not sent a change\n // notification if the server value differs from the original.\n if (localAttrs && localAttrs[key] !== undefined) {\n continue;\n }\n if (original[key] !== value) {\n changedKeys.push(key);\n }\n }\n }\n return changedKeys;\n}\nfunction cacheIsEmpty(cached) {\n return !cached || cached.remoteAttrs === null && cached.inflightAttrs === null && cached.localAttrs === null;\n}\nfunction _isEmpty(peeked) {\n if (!peeked) {\n return true;\n }\n const isNew = peeked.isNew;\n const isDeleted = peeked.isDeleted;\n const isEmpty = cacheIsEmpty(peeked);\n return (!isNew || isDeleted) && isEmpty;\n}\nfunction recordIsLoaded(cached, filterDeleted = false) {\n if (!cached) {\n return false;\n }\n const isNew = cached.isNew;\n const isEmpty = cacheIsEmpty(cached);\n\n // if we are new we must consider ourselves loaded\n if (isNew) {\n return !cached.isDeleted;\n }\n // even if we have a past request, if we are now empty we are not loaded\n // typically this is true after an unloadRecord call\n\n // if we are not empty, not new && we have a fulfilled request then we are loaded\n // we should consider allowing for something to be loaded that is simply \"not empty\".\n // which is how RecordState currently handles this case; however, RecordState is buggy\n // in that it does not account for unloading.\n return filterDeleted && cached.isDeletionCommitted ? false : !isEmpty;\n}\nfunction _isLoading(peeked, capabilities, identifier) {\n // TODO refactor things such that the cache is not required to know\n // about isLoading\n const req = capabilities._store.getRequestStateService();\n // const fulfilled = req.getLastRequestForRecord(identifier);\n const isLoaded = recordIsLoaded(peeked);\n return !isLoaded &&\n // fulfilled === null &&\n req.getPendingRequestsForRecord(identifier).some(r => r.type === 'query');\n}\nfunction setupRelationships(graph, storeWrapper, identifier, data) {\n // TODO @runspired iterating by definitions instead of by payload keys\n // allows relationship payloads to be ignored silently if no relationship\n // definition exists. Ensure there's a test for this and then consider\n // moving this to an assertion. This check should possibly live in the graph.\n const relationships = storeWrapper.getSchemaDefinitionService().relationshipsDefinitionFor(identifier);\n const keys = Object.keys(relationships);\n for (let i = 0; i < keys.length; i++) {\n const relationshipName = keys[i];\n const relationshipData = data.relationships[relationshipName];\n if (!relationshipData) {\n continue;\n }\n graph.push({\n op: 'updateRelationship',\n record: identifier,\n field: relationshipName,\n value: relationshipData\n });\n }\n}\nfunction patchLocalAttributes(cached) {\n const {\n localAttrs,\n remoteAttrs,\n inflightAttrs,\n changes\n } = cached;\n if (!localAttrs) {\n cached.changes = null;\n return false;\n }\n let hasAppliedPatch = false;\n const mutatedKeys = Object.keys(localAttrs);\n for (let i = 0, length = mutatedKeys.length; i < length; i++) {\n const attr = mutatedKeys[i];\n const existing = inflightAttrs && attr in inflightAttrs ? inflightAttrs[attr] : remoteAttrs && attr in remoteAttrs ? remoteAttrs[attr] : undefined;\n if (existing === localAttrs[attr]) {\n hasAppliedPatch = true;\n delete localAttrs[attr];\n delete changes[attr];\n }\n }\n return hasAppliedPatch;\n}\nfunction putOne(cache, identifiers, resource) {\n assert(`You must include an 'id' for the resource data ${resource.type}`, resource.id !== null && resource.id !== undefined && resource.id !== '');\n assert(`Missing Resource Type: received resource data with a type '${resource.type}' but no schema could be found with that name.`, cache._capabilities.getSchemaDefinitionService().doesTypeExist(resource.type));\n let identifier = identifiers.peekRecordIdentifier(resource);\n if (identifier) {\n identifier = identifiers.updateRecordIdentifier(identifier, resource);\n } else {\n identifier = identifiers.getOrCreateRecordIdentifier(resource);\n }\n cache.upsert(identifier, resource, cache._capabilities.hasRecord(identifier));\n // even if the identifier was not \"existing\" before, it is now\n return identifier;\n}\n\n/*\n Iterates over the set of internal models reachable from `this` across exactly one\n relationship.\n */\nfunction _directlyRelatedIdentifiersIterable(storeWrapper, originating) {\n const graph = peekGraph(storeWrapper);\n const initializedRelationships = graph?.identifiers.get(originating);\n if (!initializedRelationships) {\n return EMPTY_ITERATOR;\n }\n const initializedRelationshipsArr = [];\n Object.keys(initializedRelationships).forEach(key => {\n const rel = initializedRelationships[key];\n if (rel && !isImplicit(rel)) {\n initializedRelationshipsArr.push(rel);\n }\n });\n let i = 0;\n let j = 0;\n let k = 0;\n const findNext = () => {\n while (i < initializedRelationshipsArr.length) {\n while (j < 2) {\n const relatedIdentifiers = j === 0 ? getLocalState(initializedRelationshipsArr[i]) : getRemoteState(initializedRelationshipsArr[i]);\n while (k < relatedIdentifiers.length) {\n const relatedIdentifier = relatedIdentifiers[k++];\n if (relatedIdentifier !== null) {\n return relatedIdentifier;\n }\n }\n k = 0;\n j++;\n }\n j = 0;\n i++;\n }\n return undefined;\n };\n return {\n iterator() {\n return {\n next: () => {\n const value = findNext();\n return {\n value,\n done: value === undefined\n };\n }\n };\n }\n };\n}\n\n/*\n Computes the set of Identifiers reachable from this Identifier.\n\n Reachability is determined over the relationship graph (ie a graph where\n nodes are identifiers and edges are belongs to or has many\n relationships).\n\n Returns an array including `this` and all identifiers reachable\n from `this.identifier`.\n */\nfunction _allRelatedIdentifiers(storeWrapper, originating) {\n const array = [];\n const queue = [];\n const seen = new Set();\n queue.push(originating);\n while (queue.length > 0) {\n const identifier = queue.shift();\n array.push(identifier);\n seen.add(identifier);\n const iterator = _directlyRelatedIdentifiersIterable(storeWrapper, originating).iterator();\n for (let obj = iterator.next(); !obj.done; obj = iterator.next()) {\n const relatedIdentifier = obj.value;\n if (relatedIdentifier && !seen.has(relatedIdentifier)) {\n seen.add(relatedIdentifier);\n queue.push(relatedIdentifier);\n }\n }\n }\n return array;\n}\nfunction isMetaDocument(doc) {\n return !(doc instanceof Error) && doc.content && !('data' in doc.content) && !('included' in doc.content) && 'meta' in doc.content;\n}\nfunction isErrorDocument(doc) {\n return doc instanceof Error;\n}\nfunction fromBaseDocument(doc) {\n const resourceDocument = {};\n const jsonApiDoc = doc.content;\n if (jsonApiDoc) {\n copyLinksAndMeta(resourceDocument, jsonApiDoc);\n }\n return resourceDocument;\n}\nfunction fromStructuredError(doc) {\n const errorDoc = {};\n if (doc.content) {\n copyLinksAndMeta(errorDoc, doc.content);\n if ('errors' in doc.content) {\n errorDoc.errors = doc.content.errors;\n } else if (typeof doc.error === 'object' && 'errors' in doc.error) {\n errorDoc.errors = doc.error.errors;\n } else {\n errorDoc.errors = [{\n title: doc.message\n }];\n }\n }\n return errorDoc;\n}\nfunction copyLinksAndMeta(target, source) {\n if ('links' in source) {\n target.links = source.links;\n }\n if ('meta' in source) {\n target.meta = source.meta;\n }\n}\nexport { JSONAPICache as default };","import { getOwner } from '@ember/application';\nimport { assert } from '@ember/debug';\nimport { recordIdentifierFor } from '@ember-data/store';\nimport { _deprecatingNormalize } from '@ember-data/store/-private';\nimport { p as payloadIsNotBlank, n as normalizeResponseHelper, i as iterateData, F as FetchManager, a as assertIdentifierHasId, S as SaveOp, b as SnapshotRecordArray } from \"./-private-1aicprWG\";\nimport { macroCondition, getOwnConfig, importSync } from '@embroider/macros';\nfunction _findHasMany(adapter, store, identifier, link, relationship, options) {\n let promise = Promise.resolve().then(() => {\n const snapshot = store._fetchManager.createSnapshot(identifier, options);\n const useLink = !link || typeof link === 'string';\n const relatedLink = useLink ? link : link.href;\n return adapter.findHasMany(store, snapshot, relatedLink, relationship);\n });\n promise = promise.then(adapterPayload => {\n assert(`You made a 'findHasMany' request for a ${identifier.type}'s '${relationship.name}' relationship, using link '${link}' , but the adapter's response did not have any data`, payloadIsNotBlank(adapterPayload));\n const modelClass = store.modelFor(relationship.type);\n const serializer = store.serializerFor(relationship.type);\n let payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findHasMany');\n assert(`fetched the hasMany relationship '${relationship.name}' for ${identifier.type}:${identifier.id} with link '${link}', but no data member is present in the response. If no data exists, the response should set { data: [] }`, 'data' in payload && Array.isArray(payload.data));\n payload = syncRelationshipDataFromLink(store, payload, identifier, relationship);\n return store._push(payload, true);\n }, null, `DS: Extract payload of '${identifier.type}' : hasMany '${relationship.type}'`);\n return promise;\n}\nfunction _findBelongsTo(store, identifier, link, relationship, options) {\n let promise = Promise.resolve().then(() => {\n const adapter = store.adapterFor(identifier.type);\n assert(`You tried to load a belongsTo relationship but you have no adapter (for ${identifier.type})`, adapter);\n assert(`You tried to load a belongsTo relationship from a specified 'link' in the original payload but your adapter does not implement 'findBelongsTo'`, typeof adapter.findBelongsTo === 'function');\n const snapshot = store._fetchManager.createSnapshot(identifier, options);\n const useLink = !link || typeof link === 'string';\n const relatedLink = useLink ? link : link.href;\n return adapter.findBelongsTo(store, snapshot, relatedLink, relationship);\n });\n promise = promise.then(adapterPayload => {\n const modelClass = store.modelFor(relationship.type);\n const serializer = store.serializerFor(relationship.type);\n let payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findBelongsTo');\n assert(`fetched the belongsTo relationship '${relationship.name}' for ${identifier.type}:${identifier.id} with link '${link}', but no data member is present in the response. If no data exists, the response should set { data: null }`, 'data' in payload && (payload.data === null || typeof payload.data === 'object' && !Array.isArray(payload.data)));\n if (!payload.data && !payload.links && !payload.meta) {\n return null;\n }\n payload = syncRelationshipDataFromLink(store, payload, identifier, relationship);\n return store._push(payload, true);\n }, null, `DS: Extract payload of ${identifier.type} : ${relationship.type}`);\n return promise;\n}\n\n// sync\n// iterate over records in payload.data\n// for each record\n// assert that record.relationships[inverse] is either undefined (so we can fix it)\n// or provide a data: {id, type} that matches the record that requested it\n// return the relationship data for the parent\nfunction syncRelationshipDataFromLink(store, payload, parentIdentifier, relationship) {\n // ensure the right hand side (incoming payload) points to the parent record that\n // requested this relationship\n const relationshipData = payload.data ? iterateData(payload.data, (data, index) => {\n const {\n id,\n type\n } = data;\n ensureRelationshipIsSetToParent(data, parentIdentifier, store, relationship, index);\n return {\n id,\n type\n };\n }) : null;\n const relatedDataHash = {};\n if ('meta' in payload) {\n relatedDataHash.meta = payload.meta;\n }\n if ('links' in payload) {\n relatedDataHash.links = payload.links;\n }\n if ('data' in payload) {\n relatedDataHash.data = relationshipData;\n }\n\n // now, push the left hand side (the parent record) to ensure things are in sync, since\n // the payload will be pushed with store._push\n const parentPayload = {\n id: parentIdentifier.id,\n type: parentIdentifier.type,\n relationships: {\n [relationship.name]: relatedDataHash\n }\n };\n if (!Array.isArray(payload.included)) {\n payload.included = [];\n }\n payload.included.push(parentPayload);\n return payload;\n}\nfunction ensureRelationshipIsSetToParent(payload, parentIdentifier, store, parentRelationship, index) {\n const {\n id,\n type\n } = payload;\n if (!payload.relationships) {\n payload.relationships = {};\n }\n const {\n relationships\n } = payload;\n const inverse = getInverse(store, parentIdentifier, parentRelationship, type);\n if (inverse) {\n const {\n inverseKey,\n kind\n } = inverse;\n const relationshipData = relationships[inverseKey] && relationships[inverseKey].data;\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (typeof relationshipData !== 'undefined' && !relationshipDataPointsToParent(relationshipData, parentIdentifier)) {\n const inspect = function inspect(thing) {\n return `'${JSON.stringify(thing)}'`;\n };\n const quotedType = inspect(type);\n const quotedInverse = inspect(inverseKey);\n const expected = inspect({\n id: parentIdentifier.id,\n type: parentIdentifier.type\n });\n const expectedModel = `${parentIdentifier.type}:${parentIdentifier.id}`;\n const got = inspect(relationshipData);\n const prefix = typeof index === 'number' ? `data[${index}]` : `data`;\n const path = `${prefix}.relationships.${inverseKey}.data`;\n const other = relationshipData ? `<${relationshipData.type}:${relationshipData.id}>` : null;\n const relationshipFetched = `${expectedModel}.${parentRelationship.kind}(\"${parentRelationship.name}\")`;\n const includedRecord = `<${type}:${id}>`;\n const message = [`Encountered mismatched relationship: Ember Data expected ${path} in the payload from ${relationshipFetched} to include ${expected} but got ${got} instead.\\n`, `The ${includedRecord} record loaded at ${prefix} in the payload specified ${other} as its ${quotedInverse}, but should have specified ${expectedModel} (the record the relationship is being loaded from) as its ${quotedInverse} instead.`, `This could mean that the response for ${relationshipFetched} may have accidentally returned ${quotedType} records that aren't related to ${expectedModel} and could be related to a different ${parentIdentifier.type} record instead.`, `Ember Data has corrected the ${includedRecord} record's ${quotedInverse} relationship to ${expectedModel} so that ${relationshipFetched} will include ${includedRecord}.`, `Please update the response from the server or change your serializer to either ensure that the response for only includes ${quotedType} records that specify ${expectedModel} as their ${quotedInverse}, or omit the ${quotedInverse} relationship from the response.`].join('\\n');\n assert(message);\n }\n }\n if (kind !== 'hasMany' || typeof relationshipData !== 'undefined') {\n relationships[inverseKey] = relationships[inverseKey] || {};\n relationships[inverseKey].data = fixRelationshipData(relationshipData, kind, parentIdentifier);\n }\n }\n}\nfunction inverseForRelationship(store, identifier, key) {\n const definition = store.getSchemaDefinitionService().relationshipsDefinitionFor(identifier)[key];\n if (!definition) {\n return null;\n }\n assert(`Expected the relationship defintion to specify the inverse type or null.`, definition.options?.inverse === null || typeof definition.options?.inverse === 'string' && definition.options.inverse.length > 0);\n return definition.options.inverse;\n}\nfunction getInverse(store, parentIdentifier, parentRelationship, type) {\n const {\n name: lhs_relationshipName\n } = parentRelationship;\n const {\n type: parentType\n } = parentIdentifier;\n const inverseKey = inverseForRelationship(store, {\n type: parentType\n }, lhs_relationshipName);\n if (inverseKey) {\n const definition = store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type\n });\n const {\n kind\n } = definition[inverseKey];\n return {\n inverseKey,\n kind\n };\n }\n}\nfunction relationshipDataPointsToParent(relationshipData, identifier) {\n if (relationshipData === null) {\n return false;\n }\n if (Array.isArray(relationshipData)) {\n if (relationshipData.length === 0) {\n return false;\n }\n for (let i = 0; i < relationshipData.length; i++) {\n const entry = relationshipData[i];\n if (validateRelationshipEntry(entry, identifier)) {\n return true;\n }\n }\n } else {\n return validateRelationshipEntry(relationshipData, identifier);\n }\n return false;\n}\nfunction fixRelationshipData(relationshipData, relationshipKind, {\n id,\n type\n}) {\n const parentRelationshipData = {\n id,\n type\n };\n let payload;\n if (relationshipKind === 'hasMany') {\n payload = relationshipData || [];\n if (relationshipData) {\n // these arrays could be massive so this is better than filter\n // Note: this is potentially problematic if type/id are not in the\n // same state of normalization.\n const found = relationshipData.find(v => {\n return v.type === parentRelationshipData.type && v.id === parentRelationshipData.id;\n });\n if (!found) {\n payload.push(parentRelationshipData);\n }\n } else {\n payload.push(parentRelationshipData);\n }\n } else {\n payload = relationshipData || {};\n Object.assign(payload, parentRelationshipData);\n }\n return payload;\n}\nfunction validateRelationshipEntry({\n id\n}, {\n id: parentModelID\n}) {\n return id && id.toString() === parentModelID;\n}\nconst PotentialLegacyOperations = new Set(['findRecord', 'findAll', 'query', 'queryRecord', 'findBelongsTo', 'findHasMany', 'updateRecord', 'createRecord', 'deleteRecord']);\nconst LegacyNetworkHandler = {\n request(context, next) {\n // if we are not a legacy request, move on\n if (context.request.url || !context.request.op || !PotentialLegacyOperations.has(context.request.op)) {\n return next(context.request);\n }\n const {\n store\n } = context.request;\n if (!store._fetchManager) {\n store._fetchManager = new FetchManager(store);\n }\n switch (context.request.op) {\n case 'findRecord':\n return findRecord(context);\n case 'findAll':\n return findAll(context);\n case 'query':\n return query(context);\n case 'queryRecord':\n return queryRecord(context);\n case 'findBelongsTo':\n return findBelongsTo(context);\n case 'findHasMany':\n return findHasMany(context);\n case 'updateRecord':\n return saveRecord(context);\n case 'createRecord':\n return saveRecord(context);\n case 'deleteRecord':\n return saveRecord(context);\n default:\n return next(context.request);\n }\n }\n};\nfunction findBelongsTo(context) {\n const {\n store,\n data,\n records: identifiers\n } = context.request;\n const {\n options,\n record,\n links,\n useLink,\n field\n } = data;\n const identifier = identifiers?.[0];\n\n // short circuit if we are already loading\n const pendingRequest = identifier && store._fetchManager.getPendingFetch(identifier, options);\n if (pendingRequest) {\n return pendingRequest;\n }\n if (useLink) {\n assert(`Expected a related link when calling store.findBelongsTo, found ${String(links)}`, links && links.related);\n return _findBelongsTo(store, record, links.related, field, options);\n }\n assert(`Expected an identifier`, Array.isArray(identifiers) && identifiers.length === 1);\n const manager = store._fetchManager;\n assertIdentifierHasId(identifier);\n return options.reload ? manager.scheduleFetch(identifier, options, context.request) : manager.fetchDataIfNeededForIdentifier(identifier, options, context.request);\n}\nfunction findHasMany(context) {\n const {\n store,\n data,\n records: identifiers\n } = context.request;\n const {\n options,\n record,\n links,\n useLink,\n field\n } = data;\n\n // link case\n if (useLink) {\n const adapter = store.adapterFor(record.type);\n /*\n If a relationship was originally populated by the adapter as a link\n (as opposed to a list of IDs), this method is called when the\n relationship is fetched.\n The link (which is usually a URL) is passed through unchanged, so the\n adapter can make whatever request it wants.\n The usual use-case is for the server to register a URL as a link, and\n then use that URL in the future to make a request for the relationship.\n */\n assert(`You tried to load a hasMany relationship but you have no adapter (for ${record.type})`, adapter);\n assert(`You tried to load a hasMany relationship from a specified 'link' in the original payload but your adapter does not implement 'findHasMany'`, typeof adapter.findHasMany === 'function');\n assert(`Expected a related link when calling store.findhasMany, found ${String(links)}`, links && links.related);\n return _findHasMany(adapter, store, record, links.related, field, options);\n }\n\n // identifiers case\n assert(`Expected an array of identifiers to fetch`, Array.isArray(identifiers));\n const fetches = new Array(identifiers.length);\n const manager = store._fetchManager;\n for (let i = 0; i < identifiers.length; i++) {\n const identifier = identifiers[i];\n // TODO we probably can be lenient here and return from cache for the isNew case\n assertIdentifierHasId(identifier);\n fetches[i] = options.reload ? manager.scheduleFetch(identifier, options, context.request) : manager.fetchDataIfNeededForIdentifier(identifier, options, context.request);\n }\n return Promise.all(fetches);\n}\nfunction saveRecord(context) {\n const {\n store,\n data,\n op: operation\n } = context.request;\n const {\n options,\n record: identifier\n } = data;\n const saveOptions = Object.assign({\n [SaveOp]: operation\n }, options);\n const fetchManagerPromise = store._fetchManager.scheduleSave(identifier, saveOptions);\n return fetchManagerPromise.then(payload => {\n if (macroCondition(getOwnConfig().debug.LOG_PAYLOADS)) {\n try {\n const payloadCopy = payload ? JSON.parse(JSON.stringify(payload)) : payload;\n // eslint-disable-next-line no-console\n console.log(`EmberData | Payload - ${operation}`, payloadCopy);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(`EmberData | Payload - ${operation}`, payload);\n }\n }\n let result;\n store._join(() => {\n // @ts-expect-error we don't have access to a response in legacy\n result = store.cache.didCommit(identifier, {\n request: context.request,\n content: payload\n });\n });\n\n // blatantly lie if we were a createRecord request\n // to give some semblance of cache-control to the\n // lifetimes service while legacy is still around\n if (store.lifetimes?.didRequest && operation === 'createRecord') {\n store.lifetimes.didRequest(context.request, {\n status: 201\n }, null, store);\n }\n return store.peekRecord(result.data);\n }).catch(e => {\n let err = e;\n if (!e) {\n err = new Error(`Unknown Error Occurred During Request`);\n } else if (typeof e === 'string') {\n err = new Error(e);\n }\n adapterDidInvalidate(store, identifier, err);\n throw err;\n });\n}\nfunction adapterDidInvalidate(store, identifier, error) {\n if (error && error.isAdapterError === true && error.code === 'InvalidError') {\n const serializer = store.serializerFor(identifier.type);\n\n // TODO @deprecate extractErrors being called\n // TODO remove extractErrors from the default serializers.\n if (serializer && typeof serializer.extractErrors === 'function') {\n const errorsHash = serializer.extractErrors(store, store.modelFor(identifier.type), error, identifier.id);\n error.errors = errorsHashToArray(errorsHash);\n }\n }\n const cache = store.cache;\n if (error.errors) {\n assert(`Expected the cache in use by resource ${String(identifier)} to have a getErrors(identifier) method for retreiving errors.`, typeof cache.getErrors === 'function');\n let jsonApiErrors = error.errors;\n if (jsonApiErrors.length === 0) {\n jsonApiErrors = [{\n title: 'Invalid Error',\n detail: '',\n source: {\n pointer: '/data'\n }\n }];\n }\n cache.commitWasRejected(identifier, jsonApiErrors);\n } else {\n cache.commitWasRejected(identifier);\n }\n}\nfunction makeArray(value) {\n return Array.isArray(value) ? value : [value];\n}\nconst PRIMARY_ATTRIBUTE_KEY = 'base';\nfunction errorsHashToArray(errors) {\n const out = [];\n if (errors) {\n Object.keys(errors).forEach(key => {\n const messages = makeArray(errors[key]);\n for (let i = 0; i < messages.length; i++) {\n let title = 'Invalid Attribute';\n let pointer = `/data/attributes/${key}`;\n if (key === PRIMARY_ATTRIBUTE_KEY) {\n title = 'Invalid Document';\n pointer = `/data`;\n }\n out.push({\n title: title,\n detail: messages[i],\n source: {\n pointer: pointer\n }\n });\n }\n });\n }\n return out;\n}\nfunction findRecord(context) {\n const {\n store,\n data\n } = context.request;\n const {\n record: identifier,\n options\n } = data;\n let promise;\n\n // if not loaded start loading\n if (!store._instanceCache.recordIsLoaded(identifier)) {\n promise = store._fetchManager.fetchDataIfNeededForIdentifier(identifier, options, context.request);\n\n // Refetch if the reload option is passed\n } else if (options.reload) {\n assertIdentifierHasId(identifier);\n promise = store._fetchManager.scheduleFetch(identifier, options, context.request);\n } else {\n let snapshot = null;\n const adapter = store.adapterFor(identifier.type);\n\n // Refetch the record if the adapter thinks the record is stale\n if (typeof options.reload === 'undefined' && adapter.shouldReloadRecord && adapter.shouldReloadRecord(store, snapshot = store._fetchManager.createSnapshot(identifier, options))) {\n assertIdentifierHasId(identifier);\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n promise = store._fetchManager.scheduleFetch(identifier, Object.assign({}, options, {\n reload: true\n }), context.request);\n } else {\n options.reload = true;\n promise = store._fetchManager.scheduleFetch(identifier, options, context.request);\n }\n } else {\n // Trigger the background refetch if backgroundReload option is passed\n if (options.backgroundReload !== false && (options.backgroundReload || !adapter.shouldBackgroundReloadRecord || adapter.shouldBackgroundReloadRecord(store, snapshot = snapshot || store._fetchManager.createSnapshot(identifier, options)))) {\n assertIdentifierHasId(identifier);\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n void store._fetchManager.scheduleFetch(identifier, Object.assign({}, options, {\n backgroundReload: true\n }), context.request);\n } else {\n options.backgroundReload = true;\n void store._fetchManager.scheduleFetch(identifier, options, context.request);\n }\n }\n\n // Return the cached record\n promise = Promise.resolve(identifier);\n }\n }\n return promise.then(i => store.peekRecord(i));\n}\nfunction findAll(context) {\n const {\n store,\n data\n } = context.request;\n const {\n type,\n options\n } = data;\n const adapter = store.adapterFor(type);\n assert(`You tried to load all records but you have no adapter (for ${type})`, adapter);\n assert(`You tried to load all records but your adapter does not implement 'findAll'`, typeof adapter.findAll === 'function');\n\n // avoid initializing the liveArray just to set `isUpdating`\n const maybeRecordArray = store.recordArrayManager._live.get(type);\n const snapshotArray = new SnapshotRecordArray(store, type, options);\n const shouldReload = options.reload || options.reload !== false && (adapter.shouldReloadAll && adapter.shouldReloadAll(store, snapshotArray) || !adapter.shouldReloadAll && snapshotArray.length === 0);\n let fetch;\n if (shouldReload) {\n maybeRecordArray && (maybeRecordArray.isUpdating = true);\n fetch = _findAll(adapter, store, type, snapshotArray, context.request, true);\n } else {\n fetch = Promise.resolve(store.peekAll(type));\n if (options.backgroundReload || options.backgroundReload !== false && (!adapter.shouldBackgroundReloadAll || adapter.shouldBackgroundReloadAll(store, snapshotArray))) {\n maybeRecordArray && (maybeRecordArray.isUpdating = true);\n void _findAll(adapter, store, type, snapshotArray, context.request, false);\n }\n }\n return fetch;\n}\nfunction _findAll(adapter, store, type, snapshotArray, request, isAsyncFlush) {\n const schema = store.modelFor(type);\n let promise = Promise.resolve().then(() => adapter.findAll(store, schema, null, snapshotArray));\n promise = promise.then(adapterPayload => {\n assert(`You made a 'findAll' request for '${type}' records, but the adapter's response did not have any data`, payloadIsNotBlank(adapterPayload));\n const serializer = store.serializerFor(type);\n const payload = normalizeResponseHelper(serializer, store, schema, adapterPayload, null, 'findAll');\n store._push(payload, isAsyncFlush);\n snapshotArray._recordArray.isUpdating = false;\n if (macroCondition(getOwnConfig().debug.LOG_PAYLOADS)) {\n // eslint-disable-next-line no-console\n console.log(`request: findAll<${type}> background reload complete`);\n }\n return snapshotArray._recordArray;\n });\n if (macroCondition(getOwnConfig().env.TESTING)) {\n if (!request.disableTestWaiter) {\n const {\n waitForPromise\n } = importSync('@ember/test-waiters');\n promise = waitForPromise(promise);\n }\n }\n return promise;\n}\nfunction query(context) {\n const {\n store,\n data\n } = context.request;\n let {\n options\n } = data;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {\n type,\n query\n } = data;\n const adapter = store.adapterFor(type);\n assert(`You tried to make a query but you have no adapter (for ${type})`, adapter);\n assert(`You tried to make a query but your adapter does not implement 'query'`, typeof adapter.query === 'function');\n const recordArray = options._recordArray || store.recordArrayManager.createArray({\n type,\n query\n });\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n options = Object.assign({}, options);\n delete options._recordArray;\n } else {\n delete options._recordArray;\n }\n const schema = store.modelFor(type);\n const promise = Promise.resolve().then(() => adapter.query(store, schema, query, recordArray, options));\n return promise.then(adapterPayload => {\n const serializer = store.serializerFor(type);\n const payload = normalizeResponseHelper(serializer, store, schema, adapterPayload, null, 'query');\n const identifiers = store._push(payload, true);\n assert('The response to store.query is expected to be an array but it was a single record. Please wrap your response in an array or use `store.queryRecord` to query for a single record.', Array.isArray(identifiers));\n store.recordArrayManager.populateManagedArray(recordArray, identifiers, payload);\n return recordArray;\n });\n}\nfunction assertSingleResourceDocument(payload) {\n assert(`Expected the primary data returned by the serializer for a 'queryRecord' response to be a single object or null but instead it was an array.`, !Array.isArray(payload.data));\n}\nfunction queryRecord(context) {\n const {\n store,\n data\n } = context.request;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {\n type,\n query,\n options\n } = data;\n const adapter = store.adapterFor(type);\n assert(`You tried to make a query but you have no adapter (for ${type})`, adapter);\n assert(`You tried to make a query but your adapter does not implement 'queryRecord'`, typeof adapter.queryRecord === 'function');\n const schema = store.modelFor(type);\n const promise = Promise.resolve().then(() => adapter.queryRecord(store, schema, query, options));\n return promise.then(adapterPayload => {\n const serializer = store.serializerFor(type);\n const payload = normalizeResponseHelper(serializer, store, schema, adapterPayload, null, 'queryRecord');\n assertSingleResourceDocument(payload);\n const identifier = store._push(payload, true);\n return identifier ? store.peekRecord(identifier) : null;\n });\n}\n\n/**\n * @module @ember-data/store\n * @class Store\n */\n\n/**\n Returns an instance of the adapter for a given type. For\n example, `adapterFor('person')` will return an instance of\n the adapter located at `app/adapters/person.js`\n\n If no `person` adapter is found, this method will look\n for an `application` adapter (the default adapter for\n your entire application).\n\n @method adapterFor\n @public\n @param {String} modelName\n @return Adapter\n */\n\nfunction adapterFor(modelName, _allowMissing) {\n assert(`Attempted to call store.adapterFor(), but the store instance has already been destroyed.`, !(this.isDestroying || this.isDestroyed));\n assert(`You need to pass a model name to the store's adapterFor method`, modelName);\n assert(`Passing classes to store.adapterFor has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n this._adapterCache = this._adapterCache || Object.create(null);\n const normalizedModelName = _deprecatingNormalize(modelName);\n const {\n _adapterCache\n } = this;\n let adapter = _adapterCache[normalizedModelName];\n if (adapter) {\n return adapter;\n }\n const owner = getOwner(this);\n\n // name specific adapter\n adapter = owner.lookup(`adapter:${normalizedModelName}`);\n if (adapter !== undefined) {\n _adapterCache[normalizedModelName] = adapter;\n return adapter;\n }\n\n // no adapter found for the specific name, fallback and check for application adapter\n adapter = _adapterCache.application || owner.lookup('adapter:application');\n if (adapter !== undefined) {\n _adapterCache[normalizedModelName] = adapter;\n _adapterCache.application = adapter;\n return adapter;\n }\n assert(`No adapter was found for '${modelName}' and no 'application' adapter was found as a fallback.`, _allowMissing);\n}\n\n/**\n Returns an instance of the serializer for a given type. For\n example, `serializerFor('person')` will return an instance of\n `App.PersonSerializer`.\n\n If no `App.PersonSerializer` is found, this method will look\n for an `App.ApplicationSerializer` (the default serializer for\n your entire application).\n\n If a serializer cannot be found on the adapter, it will fall back\n to an instance of `JSONSerializer`.\n\n @method serializerFor\n @public\n @param {String} modelName the record to serialize\n @return {Serializer}\n */\nfunction serializerFor(modelName) {\n assert(`Attempted to call store.serializerFor(), but the store instance has already been destroyed.`, !(this.isDestroying || this.isDestroyed));\n assert(`You need to pass a model name to the store's serializerFor method`, modelName);\n assert(`Passing classes to store.serializerFor has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');\n this._serializerCache = this._serializerCache || Object.create(null);\n const normalizedModelName = _deprecatingNormalize(modelName);\n const {\n _serializerCache\n } = this;\n let serializer = _serializerCache[normalizedModelName];\n if (serializer) {\n return serializer;\n }\n\n // by name\n const owner = getOwner(this);\n serializer = owner.lookup(`serializer:${normalizedModelName}`);\n if (serializer !== undefined) {\n _serializerCache[normalizedModelName] = serializer;\n return serializer;\n }\n\n // no serializer found for the specific model, fallback and check for application serializer\n serializer = _serializerCache.application || owner.lookup('serializer:application');\n if (serializer !== undefined) {\n _serializerCache[normalizedModelName] = serializer;\n _serializerCache.application = serializer;\n return serializer;\n }\n return null;\n}\n\n/**\n `normalize` converts a json payload into the normalized form that\n [push](../methods/push?anchor=push) expects.\n\n Example\n\n ```js\n socket.on('message', function(message) {\n let modelName = message.model;\n let data = message.data;\n store.push(store.normalize(modelName, data));\n });\n ```\n\n @method normalize\n @public\n @param {String} modelName The name of the model type for this payload\n @param {Object} payload\n @return {Object} The normalized payload\n */\n// TODO @runspired @deprecate users should call normalize on the associated serializer directly\nfunction normalize(modelName, payload) {\n assert(`Attempted to call store.normalize(), but the store instance has already been destroyed.`, !(this.isDestroying || this.isDestroyed));\n assert(`You need to pass a model name to the store's normalize method`, modelName);\n assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${typeof modelName}`, typeof modelName === 'string');\n const normalizedModelName = _deprecatingNormalize(modelName);\n const serializer = this.serializerFor(normalizedModelName);\n const schema = this.modelFor(normalizedModelName);\n assert(`You must define a normalize method in your serializer in order to call store.normalize`, typeof serializer?.normalize === 'function');\n return serializer.normalize(schema, payload);\n}\n\n/**\n Push some raw data into the store.\n\n This method can be used both to push in brand new\n records, as well as to update existing records. You\n can push in more than one type of object at once.\n All objects should be in the format expected by the\n serializer.\n\n ```app/serializers/application.js\n import RESTSerializer from '@ember-data/serializer/rest';\n\n export default class ApplicationSerializer extends RESTSerializer;\n ```\n\n ```js\n let pushData = {\n posts: [\n { id: 1, postTitle: \"Great post\", commentIds: [2] }\n ],\n comments: [\n { id: 2, commentBody: \"Insightful comment\" }\n ]\n }\n\n store.pushPayload(pushData);\n ```\n\n By default, the data will be deserialized using a default\n serializer (the application serializer if it exists).\n\n Alternatively, `pushPayload` will accept a model type which\n will determine which serializer will process the payload.\n\n ```app/serializers/application.js\n import RESTSerializer from '@ember-data/serializer/rest';\n\n export default class ApplicationSerializer extends RESTSerializer;\n ```\n\n ```app/serializers/post.js\n import JSONSerializer from '@ember-data/serializer/json';\n\n export default JSONSerializer;\n ```\n\n ```js\n store.pushPayload(pushData); // Will use the application serializer\n store.pushPayload('post', pushData); // Will use the post serializer\n ```\n\n @method pushPayload\n @public\n @param {String} modelName Optionally, a model type used to determine which serializer will be used\n @param {Object} inputPayload\n */\n// TODO @runspired @deprecate pushPayload in favor of looking up the serializer\nfunction pushPayload(modelName, inputPayload) {\n assert(`Attempted to call store.pushPayload(), but the store instance has already been destroyed.`, !(this.isDestroying || this.isDestroyed));\n const payload = inputPayload || modelName;\n const normalizedModelName = inputPayload ? _deprecatingNormalize(modelName) : 'application';\n const serializer = this.serializerFor(normalizedModelName);\n assert(`You cannot use 'store.pushPayload(, )' unless the serializer for '${normalizedModelName}' defines 'pushPayload'`, serializer && typeof serializer.pushPayload === 'function');\n serializer.pushPayload(this, payload);\n}\n\n// TODO @runspired @deprecate records should implement their own serialization if desired\nfunction serializeRecord(record, options) {\n // TODO we used to check if the record was destroyed here\n if (!this._fetchManager) {\n this._fetchManager = new FetchManager(this);\n }\n return this._fetchManager.createSnapshot(recordIdentifierFor(record)).serialize(options);\n}\nfunction cleanup() {\n // enqueue destruction of any adapters/serializers we have created\n for (const adapterName in this._adapterCache) {\n const adapter = this._adapterCache[adapterName];\n if (typeof adapter.destroy === 'function') {\n adapter.destroy();\n }\n }\n for (const serializerName in this._serializerCache) {\n const serializer = this._serializerCache[serializerName];\n if (typeof serializer.destroy === 'function') {\n serializer.destroy();\n }\n }\n}\nexport { LegacyNetworkHandler, adapterFor, cleanup, normalize, pushPayload, serializeRecord, serializerFor };","const RecordStore = Symbol('Store');\nexport { RecordStore };","import { assert, deprecate, warn } from '@ember/debug';\nimport EmberObject, { computed, get } from '@ember/object';\nimport { recordIdentifierFor as recordIdentifierFor$1, storeFor as storeFor$1 } from '@ember-data/store';\nimport { RecordArray, MUTATE, SOURCE, recordIdentifierFor, ARRAY_SIGNAL, notifyArray, isStableIdentifier, storeFor, peekCache, fastPush, coerceId } from '@ember-data/store/-private';\nimport { cached, compat } from '@ember-data/tracking';\nimport { addToTransaction, defineSignal, getSignal, subscribe, peekSignal } from '@ember-data/tracking/-private';\nimport { RecordStore } from '@warp-drive/core-types/symbols';\nimport { A } from '@ember/array';\nimport ArrayProxy from '@ember/array/proxy';\nimport { mapBy, not } from '@ember/object/computed';\nimport { macroCondition, getOwnConfig, importSync } from '@embroider/macros';\nimport { upgradeStore } from '@ember-data/legacy-compat/-private';\nimport PromiseProxyMixin from '@ember/object/promise-proxy-mixin';\nimport ObjectProxy from '@ember/object/proxy';\nimport { cacheFor } from '@ember/object/internals';\n\n/**\n @module @ember-data/store\n*/\n/**\n A `ManyArray` is a `MutableArray` that represents the contents of a has-many\n relationship.\n\n The `ManyArray` is instantiated lazily the first time the relationship is\n requested.\n\n This class is not intended to be directly instantiated by consuming applications.\n\n ### Inverses\n\n Often, the relationships in Ember Data applications will have\n an inverse. For example, imagine the following models are\n defined:\n\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class PostModel extends Model {\n @hasMany('comment') comments;\n }\n ```\n\n ```app/models/comment.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class CommentModel extends Model {\n @belongsTo('post') post;\n }\n ```\n\n If you created a new instance of `Post` and added\n a `Comment` record to its `comments` has-many\n relationship, you would expect the comment's `post`\n property to be set to the post that contained\n the has-many.\n\n We call the record to which a relationship belongs-to the\n relationship's _owner_.\n\n @class ManyArray\n @public\n*/\nclass RelatedCollection extends RecordArray {\n /**\n The loading state of this array\n @property {Boolean} isLoaded\n @public\n */\n\n /**\n `true` if the relationship is polymorphic, `false` otherwise.\n @property {Boolean} isPolymorphic\n @private\n */\n\n /**\n Metadata associated with the request for async hasMany relationships.\n Example\n Given that the server returns the following JSON payload when fetching a\n hasMany relationship:\n ```js\n {\n \"comments\": [{\n \"id\": 1,\n \"comment\": \"This is the first comment\",\n }, {\n // ...\n }],\n \"meta\": {\n \"page\": 1,\n \"total\": 5\n }\n }\n ```\n You can then access the meta data via the `meta` property:\n ```js\n let comments = await post.comments;\n let meta = comments.meta;\n // meta.page => 1\n // meta.total => 5\n ```\n @property {Object | null} meta\n @public\n */\n\n /**\n * Retrieve the links for this relationship\n *\n @property {Object | null} links\n @public\n */\n\n // @ts-expect-error\n\n constructor(options) {\n super(options);\n this.isLoaded = options.isLoaded || false;\n this.isAsync = options.isAsync || false;\n this.isPolymorphic = options.isPolymorphic || false;\n this.identifier = options.identifier;\n this.key = options.key;\n }\n [MUTATE](target, receiver, prop, args, _SIGNAL) {\n switch (prop) {\n case 'length 0':\n {\n Reflect.set(target, 'length', 0);\n mutateReplaceRelatedRecords(this, [], _SIGNAL);\n return true;\n }\n case 'replace cell':\n {\n const [index, prior, value] = args;\n target[index] = value;\n mutateReplaceRelatedRecord(this, {\n value,\n prior,\n index\n }, _SIGNAL);\n return true;\n }\n case 'push':\n {\n const newValues = extractIdentifiersFromRecords(args);\n assertNoDuplicates(this, target, currentState => currentState.push(...newValues), `Cannot push duplicates to a hasMany's state.`);\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_MANY_ARRAY_DUPLICATES)) {\n // dedupe\n const seen = new Set(target);\n const unique = new Set();\n args.forEach(item => {\n const identifier = recordIdentifierFor(item);\n if (!seen.has(identifier)) {\n seen.add(identifier);\n unique.add(item);\n }\n });\n const newArgs = Array.from(unique);\n const result = Reflect.apply(target[prop], receiver, newArgs);\n if (newArgs.length) {\n mutateAddToRelatedRecords(this, {\n value: extractIdentifiersFromRecords(newArgs)\n }, _SIGNAL);\n }\n return result;\n }\n\n // else, no dedupe, error on duplicates\n const result = Reflect.apply(target[prop], receiver, args);\n if (newValues.length) {\n mutateAddToRelatedRecords(this, {\n value: newValues\n }, _SIGNAL);\n }\n return result;\n }\n case 'pop':\n {\n const result = Reflect.apply(target[prop], receiver, args);\n if (result) {\n mutateRemoveFromRelatedRecords(this, {\n value: recordIdentifierFor(result)\n }, _SIGNAL);\n }\n return result;\n }\n case 'unshift':\n {\n const newValues = extractIdentifiersFromRecords(args);\n assertNoDuplicates(this, target, currentState => currentState.unshift(...newValues), `Cannot unshift duplicates to a hasMany's state.`);\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_MANY_ARRAY_DUPLICATES)) {\n // dedupe\n const seen = new Set(target);\n const unique = new Set();\n args.forEach(item => {\n const identifier = recordIdentifierFor(item);\n if (!seen.has(identifier)) {\n seen.add(identifier);\n unique.add(item);\n }\n });\n const newArgs = Array.from(unique);\n const result = Reflect.apply(target[prop], receiver, newArgs);\n if (newArgs.length) {\n mutateAddToRelatedRecords(this, {\n value: extractIdentifiersFromRecords(newArgs),\n index: 0\n }, _SIGNAL);\n }\n return result;\n }\n\n // else, no dedupe, error on duplicates\n const result = Reflect.apply(target[prop], receiver, args);\n if (newValues.length) {\n mutateAddToRelatedRecords(this, {\n value: newValues,\n index: 0\n }, _SIGNAL);\n }\n return result;\n }\n case 'shift':\n {\n const result = Reflect.apply(target[prop], receiver, args);\n if (result) {\n mutateRemoveFromRelatedRecords(this, {\n value: recordIdentifierFor(result),\n index: 0\n }, _SIGNAL);\n }\n return result;\n }\n case 'sort':\n {\n const result = Reflect.apply(target[prop], receiver, args);\n mutateSortRelatedRecords(this, result.map(recordIdentifierFor), _SIGNAL);\n return result;\n }\n case 'splice':\n {\n const [start, deleteCount, ...adds] = args;\n\n // detect a full replace\n if (start === 0 && deleteCount === this[SOURCE].length) {\n const newValues = extractIdentifiersFromRecords(adds);\n assertNoDuplicates(this, target, currentState => currentState.splice(start, deleteCount, ...newValues), `Cannot replace a hasMany's state with a new state that contains duplicates.`);\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_MANY_ARRAY_DUPLICATES)) {\n // dedupe\n const current = new Set(adds);\n const unique = Array.from(current);\n const newArgs = [start, deleteCount].concat(unique);\n const result = Reflect.apply(target[prop], receiver, newArgs);\n mutateReplaceRelatedRecords(this, extractIdentifiersFromRecords(unique), _SIGNAL);\n return result;\n }\n\n // else, no dedupe, error on duplicates\n const result = Reflect.apply(target[prop], receiver, args);\n mutateReplaceRelatedRecords(this, newValues, _SIGNAL);\n return result;\n }\n const newValues = extractIdentifiersFromRecords(adds);\n assertNoDuplicates(this, target, currentState => currentState.splice(start, deleteCount, ...newValues), `Cannot splice a hasMany's state with a new state that contains duplicates.`);\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_MANY_ARRAY_DUPLICATES)) {\n // dedupe\n const currentState = target.slice();\n currentState.splice(start, deleteCount);\n const seen = new Set(currentState);\n const unique = [];\n adds.forEach(item => {\n const identifier = recordIdentifierFor(item);\n if (!seen.has(identifier)) {\n seen.add(identifier);\n unique.push(item);\n }\n });\n const newArgs = [start, deleteCount, ...unique];\n const result = Reflect.apply(target[prop], receiver, newArgs);\n if (deleteCount > 0) {\n mutateRemoveFromRelatedRecords(this, {\n value: result.map(recordIdentifierFor),\n index: start\n }, _SIGNAL);\n }\n if (unique.length > 0) {\n mutateAddToRelatedRecords(this, {\n value: extractIdentifiersFromRecords(unique),\n index: start\n }, _SIGNAL);\n }\n return result;\n }\n\n // else, no dedupe, error on duplicates\n const result = Reflect.apply(target[prop], receiver, args);\n if (deleteCount > 0) {\n mutateRemoveFromRelatedRecords(this, {\n value: result.map(recordIdentifierFor),\n index: start\n }, _SIGNAL);\n }\n if (newValues.length > 0) {\n mutateAddToRelatedRecords(this, {\n value: newValues,\n index: start\n }, _SIGNAL);\n }\n return result;\n }\n default:\n assert(`unable to convert ${prop} into a transaction that updates the cache state for this record array`);\n }\n }\n notify() {\n const signal = this[ARRAY_SIGNAL];\n signal.shouldReset = true;\n // @ts-expect-error\n notifyArray(this);\n }\n\n /**\n Reloads all of the records in the manyArray. If the manyArray\n holds a relationship that was originally fetched using a links url\n Ember Data will revisit the original links url to repopulate the\n relationship.\n If the manyArray holds the result of a `store.query()` reload will\n re-run the original query.\n Example\n ```javascript\n let user = store.peekRecord('user', '1')\n await login(user);\n let permissions = await user.permissions;\n await permissions.reload();\n ```\n @method reload\n @public\n */\n reload(options) {\n // TODO this is odd, we don't ask the store for anything else like this?\n return this._manager.reloadHasMany(this.key, options);\n }\n\n /**\n Saves all of the records in the `ManyArray`.\n Example\n ```javascript\n let inbox = await store.findRecord('inbox', '1');\n let messages = await inbox.messages;\n messages.forEach((message) => {\n message.isRead = true;\n });\n messages.save();\n ```\n @method save\n @public\n @return {PromiseArray} promise\n */\n\n /**\n Create a child record within the owner\n @method createRecord\n @public\n @param {Object} hash\n @return {Model} record\n */\n createRecord(hash) {\n const {\n store\n } = this;\n assert(`Expected modelName to be set`, this.modelName);\n const record = store.createRecord(this.modelName, hash);\n this.push(record);\n return record;\n }\n destroy() {\n super.destroy(false);\n }\n}\nRelatedCollection.prototype.isAsync = false;\nRelatedCollection.prototype.isPolymorphic = false;\nRelatedCollection.prototype.identifier = null;\nRelatedCollection.prototype.cache = null;\nRelatedCollection.prototype._inverseIsAsync = false;\nRelatedCollection.prototype.key = '';\nRelatedCollection.prototype.DEPRECATED_CLASS_NAME = 'ManyArray';\nfunction assertRecordPassedToHasMany(record) {\n assert(`All elements of a hasMany relationship must be instances of Model, you passed $${typeof record}`, function () {\n try {\n recordIdentifierFor(record);\n return true;\n } catch {\n return false;\n }\n }());\n}\nfunction extractIdentifiersFromRecords(records) {\n return records.map(extractIdentifierFromRecord$1);\n}\nfunction extractIdentifierFromRecord$1(recordOrPromiseRecord) {\n assertRecordPassedToHasMany(recordOrPromiseRecord);\n return recordIdentifierFor(recordOrPromiseRecord);\n}\nfunction assertNoDuplicates(collection, target, callback, reason) {\n const state = target.slice();\n callback(state);\n if (state.length !== new Set(state).size) {\n const duplicates = state.filter((currentValue, currentIndex) => state.indexOf(currentValue) !== currentIndex);\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_MANY_ARRAY_DUPLICATES)) {\n deprecate(`${reason} This behavior is deprecated. Found duplicates for the following records within the new state provided to \\`<${collection.identifier.type}:${collection.identifier.id || collection.identifier.lid}>.${collection.key}\\`\\n\\t- ${Array.from(new Set(duplicates)).map(r => isStableIdentifier(r) ? r.lid : recordIdentifierFor(r).lid).sort((a, b) => a.localeCompare(b)).join('\\n\\t- ')}`, false, {\n id: 'ember-data:deprecate-many-array-duplicates',\n for: 'ember-data',\n until: '6.0',\n since: {\n enabled: '5.3',\n available: '5.3'\n }\n });\n } else {\n throw new Error(`${reason} Found duplicates for the following records within the new state provided to \\`<${collection.identifier.type}:${collection.identifier.id || collection.identifier.lid}>.${collection.key}\\`\\n\\t- ${Array.from(new Set(duplicates)).map(r => isStableIdentifier(r) ? r.lid : recordIdentifierFor(r).lid).sort((a, b) => a.localeCompare(b)).join('\\n\\t- ')}`);\n }\n }\n}\nfunction mutateAddToRelatedRecords(collection, operationInfo, _SIGNAL) {\n mutate(collection, {\n op: 'addToRelatedRecords',\n record: collection.identifier,\n field: collection.key,\n ...operationInfo\n }, _SIGNAL);\n}\nfunction mutateRemoveFromRelatedRecords(collection, operationInfo, _SIGNAL) {\n mutate(collection, {\n op: 'removeFromRelatedRecords',\n record: collection.identifier,\n field: collection.key,\n ...operationInfo\n }, _SIGNAL);\n}\nfunction mutateReplaceRelatedRecord(collection, operationInfo, _SIGNAL) {\n mutate(collection, {\n op: 'replaceRelatedRecord',\n record: collection.identifier,\n field: collection.key,\n ...operationInfo\n }, _SIGNAL);\n}\nfunction mutateReplaceRelatedRecords(collection, value, _SIGNAL) {\n mutate(collection, {\n op: 'replaceRelatedRecords',\n record: collection.identifier,\n field: collection.key,\n value\n }, _SIGNAL);\n}\nfunction mutateSortRelatedRecords(collection, value, _SIGNAL) {\n mutate(collection, {\n op: 'sortRelatedRecords',\n record: collection.identifier,\n field: collection.key,\n value\n }, _SIGNAL);\n}\nfunction mutate(collection, mutation, _SIGNAL) {\n collection._manager.mutate(mutation);\n addToTransaction(_SIGNAL);\n}\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object.keys(descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n if (desc.initializer === void 0) {\n Object.defineProperty(target, property, desc);\n desc = null;\n }\n return desc;\n}\nconst PromiseObject = ObjectProxy.extend(PromiseProxyMixin);\nvar _dec$1, _class$6;\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\nconst Extended = PromiseObject;\n\n/**\n @module @ember-data/model\n */\n\n/**\n A PromiseBelongsTo is a PromiseObject that also proxies certain method calls\n to the underlying belongsTo model.\n Right now we proxy:\n * `reload()`\n @class PromiseBelongsTo\n @extends PromiseObject\n @private\n*/\nlet PromiseBelongsTo = (_dec$1 = computed(), (_class$6 = class PromiseBelongsTo extends Extended {\n get id() {\n const {\n key,\n legacySupport\n } = this._belongsToState;\n const ref = legacySupport.referenceFor('belongsTo', key);\n return ref.id();\n }\n\n // we don't proxy meta because we would need to proxy it to the relationship state container\n // however, meta on relationships does not trigger change notifications.\n // if you need relationship meta, you should do `record.belongsTo(relationshipName).meta()`\n get meta() {\n // eslint-disable-next-line no-constant-condition\n {\n assert('You attempted to access meta on the promise for the async belongsTo relationship ' + `${this._belongsToState.modelName}:${this._belongsToState.key}'.` + '\\nUse `record.belongsTo(relationshipName).meta()` instead.', false);\n }\n return;\n }\n async reload(options) {\n assert('You are trying to reload an async belongsTo before it has been created', this.content !== undefined);\n const {\n key,\n legacySupport\n } = this._belongsToState;\n await legacySupport.reloadBelongsTo(key, options);\n return this;\n }\n}, (_applyDecoratedDescriptor(_class$6.prototype, \"id\", [cached], Object.getOwnPropertyDescriptor(_class$6.prototype, \"id\"), _class$6.prototype), _applyDecoratedDescriptor(_class$6.prototype, \"meta\", [_dec$1], Object.getOwnPropertyDescriptor(_class$6.prototype, \"meta\"), _class$6.prototype)), _class$6));\nvar _class$5;\n/**\n @module @ember-data/model\n */\n/**\n This class is returned as the result of accessing an async hasMany relationship\n on an instance of a Model extending from `@ember-data/model`.\n\n A PromiseManyArray is an iterable proxy that allows templates to consume related\n ManyArrays and update once their contents are no longer pending.\n\n In your JS code you should resolve the promise first.\n\n ```js\n const comments = await post.comments;\n ```\n\n @class PromiseManyArray\n @public\n*/\nlet PromiseManyArray = (_class$5 = class PromiseManyArray {\n constructor(promise, content) {\n this._update(promise, content);\n this.isDestroyed = false;\n }\n\n //---- Methods/Properties on ArrayProxy that we will keep as our API\n\n /**\n * Retrieve the length of the content\n * @property length\n * @public\n */\n get length() {\n // shouldn't be needed, but ends up being needed\n // for computed chains even in 4.x\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_COMPUTED_CHAINS)) {\n this['[]'];\n }\n return this.content ? this.content.length : 0;\n }\n\n /**\n * Iterate the proxied content. Called by the glimmer iterator in #each\n * We do not guarantee that forEach will always be available. This\n * may eventually be made to use Symbol.Iterator once glimmer supports it.\n *\n * @method forEach\n * @param cb\n * @return\n * @private\n */\n forEach(cb) {\n if (this.content && this.length) {\n this.content.forEach(cb);\n }\n }\n\n /**\n * Reload the relationship\n * @method reload\n * @public\n * @param options\n * @return\n */\n reload(options) {\n assert('You are trying to reload an async manyArray before it has been created', this.content);\n void this.content.reload(options);\n return this;\n }\n\n //---- Properties/Methods from the PromiseProxyMixin that we will keep as our API\n\n /**\n * Whether the loading promise is still pending\n *\n * @property {boolean} isPending\n * @public\n */\n\n /**\n * Whether the loading promise rejected\n *\n * @property {boolean} isRejected\n * @public\n */\n\n /**\n * Whether the loading promise succeeded\n *\n * @property {boolean} isFulfilled\n * @public\n */\n\n /**\n * Whether the loading promise completed (resolved or rejected)\n *\n * @property {boolean} isSettled\n * @public\n */\n\n /**\n * chain this promise\n *\n * @method then\n * @public\n * @param success\n * @param fail\n * @return Promise\n */\n then(s, f) {\n return this.promise.then(s, f);\n }\n\n /**\n * catch errors thrown by this promise\n * @method catch\n * @public\n * @param callback\n * @return Promise\n */\n catch(cb) {\n return this.promise.catch(cb);\n }\n\n /**\n * run cleanup after this promise completes\n *\n * @method finally\n * @public\n * @param callback\n * @return Promise\n */\n finally(cb) {\n return this.promise.finally(cb);\n }\n\n //---- Methods on EmberObject that we should keep\n\n destroy() {\n this.isDestroyed = true;\n this.content = null;\n this.promise = null;\n }\n\n //---- Methods/Properties on ManyArray that we own and proxy to\n\n /**\n * Retrieve the links for this relationship\n * @property links\n * @public\n */\n get links() {\n return this.content ? this.content.links : undefined;\n }\n\n /**\n * Retrieve the meta for this relationship\n * @property meta\n * @public\n */\n get meta() {\n return this.content ? this.content.meta : undefined;\n }\n\n //---- Our own stuff\n\n _update(promise, content) {\n if (content !== undefined) {\n this.content = content;\n }\n this.promise = tapPromise(this, promise);\n }\n static create({\n promise,\n content\n }) {\n return new this(promise, content);\n }\n}, (_applyDecoratedDescriptor(_class$5.prototype, \"length\", [compat], Object.getOwnPropertyDescriptor(_class$5.prototype, \"length\"), _class$5.prototype), _applyDecoratedDescriptor(_class$5.prototype, \"links\", [compat], Object.getOwnPropertyDescriptor(_class$5.prototype, \"links\"), _class$5.prototype), _applyDecoratedDescriptor(_class$5.prototype, \"meta\", [compat], Object.getOwnPropertyDescriptor(_class$5.prototype, \"meta\"), _class$5.prototype)), _class$5);\ndefineSignal(PromiseManyArray.prototype, 'content', null);\ndefineSignal(PromiseManyArray.prototype, 'isPending', false);\ndefineSignal(PromiseManyArray.prototype, 'isRejected', false);\ndefineSignal(PromiseManyArray.prototype, 'isFulfilled', false);\ndefineSignal(PromiseManyArray.prototype, 'isSettled', false);\n\n// this will error if someone tries to call\n// A(identifierArray) since it is not configurable\n// which is preferrable to the `meta` override we used\n// before which required importing all of Ember\nif (macroCondition(getOwnConfig().deprecations.DEPRECATE_COMPUTED_CHAINS)) {\n const desc = {\n enumerable: true,\n configurable: false,\n get: function () {\n return this.content?.length && this.content;\n }\n };\n compat(desc);\n\n // ember-source < 3.23 (e.g. 3.20 lts)\n // requires that the tag `'[]'` be notified\n // on the ArrayProxy in order for `{{#each}}`\n // to recompute. We entangle the '[]' tag from content\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n Object.defineProperty(PromiseManyArray.prototype, '[]', desc);\n}\nfunction tapPromise(proxy, promise) {\n proxy.isPending = true;\n proxy.isSettled = false;\n proxy.isFulfilled = false;\n proxy.isRejected = false;\n return Promise.resolve(promise).then(content => {\n proxy.isPending = false;\n proxy.isFulfilled = true;\n proxy.isSettled = true;\n proxy.content = content;\n return content;\n }, error => {\n proxy.isPending = false;\n proxy.isFulfilled = false;\n proxy.isRejected = true;\n proxy.isSettled = true;\n throw error;\n });\n}\n\n/*\n Assert that `addedRecord` has a valid type so it can be added to the\n relationship of the `record`.\n\n The assert basically checks if the `addedRecord` can be added to the\n relationship (specified via `relationshipMeta`) of the `record`.\n\n This utility should only be used internally, as both record parameters must\n be stable record identifiers and the `relationshipMeta` needs to be the meta\n information about the relationship, retrieved via\n `record.relationshipFor(key)`.\n*/\nlet assertPolymorphicType;\nif (macroCondition(getOwnConfig().env.DEBUG)) {\n assertPolymorphicType = function assertPolymorphicType(parentIdentifier, parentDefinition, addedIdentifier, store) {\n if (parentDefinition.inverseIsImplicit) {\n return;\n }\n if (parentDefinition.isPolymorphic) {\n let meta = store.getSchemaDefinitionService().relationshipsDefinitionFor(addedIdentifier)[parentDefinition.inverseKey];\n assert(`The schema for the relationship '${parentDefinition.inverseKey}' on '${addedIdentifier.type}' type does not implement '${parentDefinition.type}' and thus cannot be assigned to the '${parentDefinition.key}' relationship in '${parentIdentifier.type}'. The definition should specify 'as: \"${parentDefinition.type}\"' in options.`, meta?.options.as === parentDefinition.type);\n }\n };\n}\nvar _class$4;\n/**\n @module @ember-data/model\n*/\nfunction isResourceIdentiferWithRelatedLinks$1(value) {\n return Boolean(value && value.links && value.links.related);\n}\n/**\n A `HasManyReference` is a low-level API that allows access\n and manipulation of a hasMany relationship.\n\n It is especially useful when you're dealing with `async` relationships\n from `@ember-data/model` as it allows synchronous access to\n the relationship data if loaded, as well as APIs for loading, reloading\n the data or accessing available information without triggering a load.\n\n It may also be useful when using `sync` relationships with `@ember-data/model`\n that need to be loaded/reloaded with more precise timing than marking the\n relationship as `async` and relying on autofetch would have allowed.\n\n However,keep in mind that marking a relationship as `async: false` will introduce\n bugs into your application if the data is not always guaranteed to be available\n by the time the relationship is accessed. Ergo, it is recommended when using this\n approach to utilize `links` for unloaded relationship state instead of identifiers.\n\n Reference APIs are entangled with the relationship's underlying state,\n thus any getters or cached properties that utilize these will properly\n invalidate if the relationship state changes.\n\n References are \"stable\", meaning that multiple calls to retrieve the reference\n for a given relationship will always return the same HasManyReference.\n\n @class HasManyReference\n @public\n */\nlet HasManyReference = (_class$4 = class HasManyReference {\n constructor(store, graph, parentIdentifier, hasManyRelationship, key) {\n /**\n * The field name on the parent record for this has-many relationship.\n *\n * @property {String} key\n * @public\n */\n /**\n * The type of resource this relationship will contain.\n *\n * @property {String} type\n * @public\n */\n // unsubscribe tokens given to us by the notification manager\n this.___token = void 0;\n this.___identifier = void 0;\n this.___relatedTokenMap = void 0;\n this.graph = graph;\n this.key = key;\n this.hasManyRelationship = hasManyRelationship;\n this.type = hasManyRelationship.definition.type;\n this.store = store;\n this.___identifier = parentIdentifier;\n this.___token = store.notifications.subscribe(parentIdentifier, (_, bucket, notifiedKey) => {\n if (bucket === 'relationships' && notifiedKey === key) {\n this._ref++;\n }\n });\n this.___relatedTokenMap = new Map();\n // TODO inverse\n }\n\n /**\n * This method should never be called by user code.\n *\n * @internal\n */\n destroy() {\n this.store.notifications.unsubscribe(this.___token);\n this.___relatedTokenMap.forEach(token => {\n this.store.notifications.unsubscribe(token);\n });\n this.___relatedTokenMap.clear();\n }\n\n /**\n * An array of identifiers for the records that this reference refers to.\n *\n * @property {StableRecordIdentifier[]} identifiers\n * @public\n */\n get identifiers() {\n this._ref; // consume the tracked prop\n\n const resource = this._resource();\n const map = this.___relatedTokenMap;\n this.___relatedTokenMap = new Map();\n if (resource && resource.data) {\n return resource.data.map(resourceIdentifier => {\n const identifier = this.store.identifierCache.getOrCreateRecordIdentifier(resourceIdentifier);\n let token = map.get(identifier);\n if (token) {\n map.delete(identifier);\n } else {\n token = this.store.notifications.subscribe(identifier, (_, bucket, notifiedKey) => {\n if (bucket === 'identity' || bucket === 'attributes' && notifiedKey === 'id') {\n this._ref++;\n }\n });\n }\n this.___relatedTokenMap.set(identifier, token);\n return identifier;\n });\n }\n map.forEach(token => {\n this.store.notifications.unsubscribe(token);\n });\n map.clear();\n return [];\n }\n _resource() {\n const cache = this.store.cache;\n return cache.getRelationship(this.___identifier, this.key);\n }\n\n /**\n This returns a string that represents how the reference will be\n looked up when it is loaded. If the relationship has a link it will\n use the \"link\" otherwise it defaults to \"id\".\n Example\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany('comment', { async: true, inverse: null }) comments;\n }\n ```\n ```javascript\n let post = store.push({\n data: {\n type: 'post',\n id: 1,\n relationships: {\n comments: {\n data: [{ type: 'comment', id: 1 }]\n }\n }\n }\n });\n let commentsRef = post.hasMany('comments');\n // get the identifier of the reference\n if (commentsRef.remoteType() === \"ids\") {\n let ids = commentsRef.ids();\n } else if (commentsRef.remoteType() === \"link\") {\n let link = commentsRef.link();\n }\n ```\n @method remoteType\n @public\n @return {String} The name of the remote type. This should either be `link` or `ids`\n */\n remoteType() {\n const value = this._resource();\n if (value && value.links && value.links.related) {\n return 'link';\n }\n return 'ids';\n }\n\n /**\n `ids()` returns an array of the record IDs in this relationship.\n Example\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany('comment', { async: true, inverse: null }) comments;\n }\n ```\n ```javascript\n let post = store.push({\n data: {\n type: 'post',\n id: 1,\n relationships: {\n comments: {\n data: [{ type: 'comment', id: 1 }]\n }\n }\n }\n });\n let commentsRef = post.hasMany('comments');\n commentsRef.ids(); // ['1']\n ```\n @method ids\n @public\n @return {Array} The ids in this has-many relationship\n */\n ids() {\n return this.identifiers.map(identifier => identifier.id);\n }\n\n /**\n The link Ember Data will use to fetch or reload this belongs-to\n relationship. By default it uses only the \"related\" resource linkage.\n Example\n ```javascript\n // models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default Model.extend({\n user: belongsTo('user', { async: true, inverse: null })\n });\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n links: {\n related: '/articles/1/author'\n }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n // get the identifier of the reference\n if (userRef.remoteType() === \"link\") {\n let link = userRef.link();\n }\n ```\n @method link\n @public\n @return {String} The link Ember Data will use to fetch or reload this belongs-to relationship.\n */\n link() {\n const resource = this._resource();\n if (isResourceIdentiferWithRelatedLinks$1(resource)) {\n if (resource.links) {\n const related = resource.links.related;\n return !related || typeof related === 'string' ? related : related.href;\n }\n }\n return null;\n }\n\n /**\n * any links that have been received for this relationship\n *\n * @method links\n * @public\n * @return\n */\n links() {\n const resource = this._resource();\n return resource && resource.links ? resource.links : null;\n }\n\n /**\n The meta data for the has-many relationship.\n Example\n ```javascript\n // models/blog.js\n import Model, { hasMany } from '@ember-data/model';\n export default Model.extend({\n users: hasMany('user', { async: true, inverse: null })\n });\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n users: {\n links: {\n related: {\n href: '/articles/1/authors'\n },\n },\n meta: {\n lastUpdated: 1458014400000\n }\n }\n }\n }\n });\n let usersRef = blog.hasMany('user');\n usersRef.meta() // { lastUpdated: 1458014400000 }\n ```\n @method meta\n @public\n @return {Object|null} The meta information for the belongs-to relationship.\n */\n meta() {\n let meta = null;\n const resource = this._resource();\n if (resource && resource.meta && typeof resource.meta === 'object') {\n meta = resource.meta;\n }\n return meta;\n }\n\n /**\n `push` can be used to update the data in the relationship and EmberData\n will treat the new data as the canonical value of this relationship on\n the backend. An empty array will signify the canonical value should be\n empty.\n Example model\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany('comment', { async: true, inverse: null }) comments;\n }\n ```\n Setup some initial state, note we haven't loaded the comments yet:\n ```js\n const post = store.push({\n data: {\n type: 'post',\n id: '1',\n relationships: {\n comments: {\n data: [{ type: 'comment', id: '1' }]\n }\n }\n }\n });\n const commentsRef = post.hasMany('comments');\n commentsRef.ids(); // ['1']\n ```\n Update the state using `push`, note we can do this even without\n having loaded these comments yet by providing resource identifiers.\n Both full resources and resource identifiers are supported.\n ```js\n await commentsRef.push({\n data: [\n { type: 'comment', id: '2' },\n { type: 'comment', id: '3' },\n ]\n });\n commentsRef.ids(); // ['2', '3']\n ```\n For convenience, you can also pass in an array of resources or resource identifiers\n without wrapping them in the `data` property:\n ```js\n await commentsRef.push([\n { type: 'comment', id: '4' },\n { type: 'comment', id: '5' },\n ]);\n commentsRef.ids(); // ['4', '5']\n ```\n When using the `data` property, you may also include other resource data via included,\n as well as provide new links and meta to the relationship.\n ```js\n await commentsRef.push({\n links: {\n related: '/posts/1/comments'\n },\n meta: {\n total: 2\n },\n data: [\n { type: 'comment', id: '4' },\n { type: 'comment', id: '5' },\n ],\n included: [\n { type: 'other-thing', id: '1', attributes: { foo: 'bar' },\n ]\n });\n ```\n By default, the store will attempt to fetch any unloaded records before resolving\n the returned promise with the ManyArray.\n Alternatively, pass `true` as the second argument to avoid fetching unloaded records\n and instead the promise will resolve with void without attempting to fetch. This is\n particularly useful if you want to update the state of the relationship without\n forcing the load of all of the associated records.\n @method push\n @public\n @param {Array|Object} doc a JSONAPI document object describing the new value of this relationship.\n @param {Boolean} [skipFetch] if `true`, do not attempt to fetch unloaded records\n @return {Promise}\n */\n async push(doc, skipFetch) {\n const {\n store\n } = this;\n const dataDoc = Array.isArray(doc) ? {\n data: doc\n } : doc;\n const isResourceData = Array.isArray(dataDoc.data) && dataDoc.data.length > 0 && isMaybeResource(dataDoc.data[0]);\n\n // enforce that one of links, meta or data is present\n assert(`You must provide at least one of 'links', 'meta' or 'data' when calling hasManyReference.push`, 'links' in dataDoc || 'meta' in dataDoc || 'data' in dataDoc);\n const identifiers = !Array.isArray(dataDoc.data) ? [] : isResourceData ? store._push(dataDoc, true) : dataDoc.data.map(i => store.identifierCache.getOrCreateRecordIdentifier(i));\n const {\n identifier\n } = this.hasManyRelationship;\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n const relationshipMeta = this.hasManyRelationship.definition;\n identifiers.forEach(added => {\n assertPolymorphicType(identifier, relationshipMeta, added, store);\n });\n }\n const newData = {};\n // only set data if it was passed in\n if (Array.isArray(dataDoc.data)) {\n newData.data = identifiers;\n }\n if ('links' in dataDoc) {\n newData.links = dataDoc.links;\n }\n if ('meta' in dataDoc) {\n newData.meta = dataDoc.meta;\n }\n store._join(() => {\n this.graph.push({\n op: 'updateRelationship',\n record: identifier,\n field: this.key,\n value: newData\n });\n });\n if (!skipFetch) return this.load();\n }\n _isLoaded() {\n const hasRelationshipDataProperty = this.hasManyRelationship.state.hasReceivedData;\n if (!hasRelationshipDataProperty) {\n return false;\n }\n const relationship = this.graph.getData(this.hasManyRelationship.identifier, this.key);\n return relationship.data?.every(identifier => {\n return this.store._instanceCache.recordIsLoaded(identifier, true) === true;\n });\n }\n\n /**\n `value()` synchronously returns the current value of the has-many\n relationship. Unlike `record.relationshipName`, calling\n `value()` on a reference does not trigger a fetch if the async\n relationship is not yet loaded. If the relationship is not loaded\n it will always return `null`.\n Example\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany('comment', { async: true, inverse: null }) comments;\n }\n ```\n ```javascript\n let post = store.push({\n data: {\n type: 'post',\n id: 1,\n relationships: {\n comments: {\n data: [{ type: 'comment', id: 1 }]\n }\n }\n }\n });\n let commentsRef = post.hasMany('comments');\n post.comments.then(function(comments) {\n commentsRef.value() === comments\n })\n ```\n @method value\n @public\n @return {ManyArray}\n */\n value() {\n const support = LEGACY_SUPPORT.get(this.___identifier);\n const loaded = this._isLoaded();\n if (!loaded) {\n // subscribe to changes\n // for when we are not loaded yet\n this._ref;\n return null;\n }\n return support.getManyArray(this.key);\n }\n\n /**\n Loads the relationship if it is not already loaded. If the\n relationship is already loaded this method does not trigger a new\n load. This causes a request to the specified\n relationship link or reloads all items currently in the relationship.\n Example\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany('comment', { async: true, inverse: null }) comments;\n }\n ```\n ```javascript\n let post = store.push({\n data: {\n type: 'post',\n id: 1,\n relationships: {\n comments: {\n data: [{ type: 'comment', id: 1 }]\n }\n }\n }\n });\n let commentsRef = post.hasMany('comments');\n commentsRef.load().then(function(comments) {\n //...\n });\n ```\n You may also pass in an options object whose properties will be\n fed forward. This enables you to pass `adapterOptions` into the\n request given to the adapter via the reference.\n Example\n ```javascript\n commentsRef.load({ adapterOptions: { isPrivate: true } })\n .then(function(comments) {\n //...\n });\n ```\n ```app/adapters/comment.js\n export default ApplicationAdapter.extend({\n findMany(store, type, id, snapshots) {\n // In the adapter you will have access to adapterOptions.\n let adapterOptions = snapshots[0].adapterOptions;\n }\n });\n ```\n @method load\n @public\n @param {Object} options the options to pass in.\n @return {Promise} a promise that resolves with the ManyArray in\n this has-many relationship.\n */\n async load(options) {\n const support = LEGACY_SUPPORT.get(this.___identifier);\n const fetchSyncRel = !this.hasManyRelationship.definition.isAsync && !areAllInverseRecordsLoaded(this.store, this._resource());\n return fetchSyncRel ? support.reloadHasMany(this.key, options) :\n // we cast to fix the return type since typescript and eslint don't understand async functions\n // properly\n support.getHasMany(this.key, options);\n }\n\n /**\n Reloads this has-many relationship. This causes a request to the specified\n relationship link or reloads all items currently in the relationship.\n Example\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany('comment', { async: true, inverse: null }) comments;\n }\n ```\n ```javascript\n let post = store.push({\n data: {\n type: 'post',\n id: 1,\n relationships: {\n comments: {\n data: [{ type: 'comment', id: 1 }]\n }\n }\n }\n });\n let commentsRef = post.hasMany('comments');\n commentsRef.reload().then(function(comments) {\n //...\n });\n ```\n You may also pass in an options object whose properties will be\n fed forward. This enables you to pass `adapterOptions` into the\n request given to the adapter via the reference. A full example\n can be found in the `load` method.\n Example\n ```javascript\n commentsRef.reload({ adapterOptions: { isPrivate: true } })\n ```\n @method reload\n @public\n @param {Object} options the options to pass in.\n @return {Promise} a promise that resolves with the ManyArray in this has-many relationship.\n */\n reload(options) {\n const support = LEGACY_SUPPORT.get(this.___identifier);\n return support.reloadHasMany(this.key, options);\n }\n}, _applyDecoratedDescriptor(_class$4.prototype, \"identifiers\", [cached, compat], Object.getOwnPropertyDescriptor(_class$4.prototype, \"identifiers\"), _class$4.prototype), _class$4);\ndefineSignal(HasManyReference.prototype, '_ref', 0);\nfunction isMaybeResource(object) {\n const keys = Object.keys(object).filter(k => k !== 'id' && k !== 'type' && k !== 'lid');\n return keys.length > 0;\n}\nvar _class$3;\nfunction isResourceIdentiferWithRelatedLinks(value) {\n return Boolean(value && value.links && value.links.related);\n}\n\n/**\n A `BelongsToReference` is a low-level API that allows access\n and manipulation of a belongsTo relationship.\n\n It is especially useful when you're dealing with `async` relationships\n from `@ember-data/model` as it allows synchronous access to\n the relationship data if loaded, as well as APIs for loading, reloading\n the data or accessing available information without triggering a load.\n\n It may also be useful when using `sync` relationships with `@ember-data/model`\n that need to be loaded/reloaded with more precise timing than marking the\n relationship as `async` and relying on autofetch would have allowed.\n\n However,keep in mind that marking a relationship as `async: false` will introduce\n bugs into your application if the data is not always guaranteed to be available\n by the time the relationship is accessed. Ergo, it is recommended when using this\n approach to utilize `links` for unloaded relationship state instead of identifiers.\n\n Reference APIs are entangled with the relationship's underlying state,\n thus any getters or cached properties that utilize these will properly\n invalidate if the relationship state changes.\n\n References are \"stable\", meaning that multiple calls to retrieve the reference\n for a given relationship will always return the same HasManyReference.\n\n @class BelongsToReference\n @public\n */\nlet BelongsToReference = (_class$3 = class BelongsToReference {\n /**\n * The field name on the parent record for this has-many relationship.\n *\n * @property {String} key\n * @public\n */\n\n /**\n * The type of resource this relationship will contain.\n *\n * @property {String} type\n * @public\n */\n\n // unsubscribe tokens given to us by the notification manager\n\n constructor(store, graph, parentIdentifier, belongsToRelationship, key) {\n this.graph = graph;\n this.key = key;\n this.belongsToRelationship = belongsToRelationship;\n this.type = belongsToRelationship.definition.type;\n this.store = store;\n this.___identifier = parentIdentifier;\n this.___relatedToken = null;\n this.___token = store.notifications.subscribe(parentIdentifier, (_, bucket, notifiedKey) => {\n if (bucket === 'relationships' && notifiedKey === key) {\n this._ref++;\n }\n });\n\n // TODO inverse\n }\n destroy() {\n // TODO @feature we need the notification manager often enough\n // we should potentially just expose it fully public\n this.store.notifications.unsubscribe(this.___token);\n this.___token = null;\n if (this.___relatedToken) {\n this.store.notifications.unsubscribe(this.___relatedToken);\n this.___relatedToken = null;\n }\n }\n\n /**\n * The identifier of the record that this reference refers to.\n * `null` if no related record is known.\n *\n * @property {StableRecordIdentifier | null} identifier\n * @public\n */\n get identifier() {\n if (this.___relatedToken) {\n this.store.notifications.unsubscribe(this.___relatedToken);\n this.___relatedToken = null;\n }\n const resource = this._resource();\n if (resource && resource.data) {\n const identifier = this.store.identifierCache.getOrCreateRecordIdentifier(resource.data);\n this.___relatedToken = this.store.notifications.subscribe(identifier, (_, bucket, notifiedKey) => {\n if (bucket === 'identity' || bucket === 'attributes' && notifiedKey === 'id') {\n this._ref++;\n }\n });\n return identifier;\n }\n return null;\n }\n\n /**\n The `id` of the record that this reference refers to. Together, the\n `type()` and `id()` methods form a composite key for the identity\n map. This can be used to access the id of an async relationship\n without triggering a fetch that would normally happen if you\n attempted to use `record.relationship.id`.\n Example\n ```javascript\n // models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default class BlogModel extends Model {\n @belongsTo('user', { async: true, inverse: null }) user;\n }\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n data: { type: 'user', id: 1 }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n // get the identifier of the reference\n if (userRef.remoteType() === \"id\") {\n let id = userRef.id();\n }\n ```\n @method id\n @public\n @return {String} The id of the record in this belongsTo relationship.\n */\n id() {\n return this.identifier?.id || null;\n }\n\n /**\n The link Ember Data will use to fetch or reload this belongs-to\n relationship. By default it uses only the \"related\" resource linkage.\n Example\n ```javascript\n // models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default Model.extend({\n user: belongsTo('user', { async: true, inverse: null })\n });\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n links: {\n related: '/articles/1/author'\n }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n // get the identifier of the reference\n if (userRef.remoteType() === \"link\") {\n let link = userRef.link();\n }\n ```\n @method link\n @public\n @return {String} The link Ember Data will use to fetch or reload this belongs-to relationship.\n */\n link() {\n const resource = this._resource();\n if (isResourceIdentiferWithRelatedLinks(resource)) {\n if (resource.links) {\n const related = resource.links.related;\n return !related || typeof related === 'string' ? related : related.href;\n }\n }\n return null;\n }\n\n /**\n * any links that have been received for this relationship\n *\n * @method links\n * @public\n * @return\n */\n links() {\n const resource = this._resource();\n return resource && resource.links ? resource.links : null;\n }\n\n /**\n The meta data for the belongs-to relationship.\n Example\n ```javascript\n // models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default Model.extend({\n user: belongsTo('user', { async: true, inverse: null })\n });\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n links: {\n related: {\n href: '/articles/1/author'\n },\n },\n meta: {\n lastUpdated: 1458014400000\n }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n userRef.meta() // { lastUpdated: 1458014400000 }\n ```\n @method meta\n @public\n @return {Object} The meta information for the belongs-to relationship.\n */\n meta() {\n let meta = null;\n const resource = this._resource();\n if (resource && resource.meta && typeof resource.meta === 'object') {\n meta = resource.meta;\n }\n return meta;\n }\n _resource() {\n this._ref; // subscribe\n const cache = this.store.cache;\n return cache.getRelationship(this.___identifier, this.key);\n }\n\n /**\n This returns a string that represents how the reference will be\n looked up when it is loaded. If the relationship has a link it will\n use the \"link\" otherwise it defaults to \"id\".\n Example\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany('comment', { async: true, inverse: null }) comments;\n }\n ```\n ```javascript\n let post = store.push({\n data: {\n type: 'post',\n id: 1,\n relationships: {\n comments: {\n data: [{ type: 'comment', id: 1 }]\n }\n }\n }\n });\n let commentsRef = post.hasMany('comments');\n // get the identifier of the reference\n if (commentsRef.remoteType() === \"ids\") {\n let ids = commentsRef.ids();\n } else if (commentsRef.remoteType() === \"link\") {\n let link = commentsRef.link();\n }\n ```\n @method remoteType\n @public\n @return {String} The name of the remote type. This should either be `link` or `id`\n */\n remoteType() {\n const value = this._resource();\n if (isResourceIdentiferWithRelatedLinks(value)) {\n return 'link';\n }\n return 'id';\n }\n\n /**\n `push` can be used to update the data in the relationship and EmberData\n will treat the new data as the canonical value of this relationship on\n the backend. A value of `null` (e.g. `{ data: null }`) can be passed to\n clear the relationship.\n Example model\n ```app/models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default class BlogModel extends Model {\n @belongsTo('user', { async: true, inverse: null }) user;\n }\n ```\n Setup some initial state, note we haven't loaded the user yet:\n ```js\n const blog = store.push({\n data: {\n type: 'blog',\n id: '1',\n relationships: {\n user: {\n data: { type: 'user', id: '1' }\n }\n }\n }\n });\n const userRef = blog.belongsTo('user');\n userRef.id(); // '1'\n ```\n Update the state using `push`, note we can do this even without\n having loaded the user yet by providing a resource-identifier.\n Both full a resource and a resource-identifier are supported.\n ```js\n await userRef.push({\n data: {\n type: 'user',\n id: '2',\n }\n });\n userRef.id(); // '2'\n ```\n You may also pass in links and meta fore the relationship, and sideload\n additional resources that might be required.\n ```js\n await userRef.push({\n data: {\n type: 'user',\n id: '2',\n },\n links: {\n related: '/articles/1/author'\n },\n meta: {\n lastUpdated: Date.now()\n },\n included: [\n {\n type: 'user-preview',\n id: '2',\n attributes: {\n username: '@runspired'\n }\n }\n ]\n });\n ```\n By default, the store will attempt to fetch the record if it is not loaded or its\n resource data is not included in the call to `push` before resolving the returned\n promise with the new state..\n Alternatively, pass `true` as the second argument to avoid fetching unloaded records\n and instead the promise will resolve with void without attempting to fetch. This is\n particularly useful if you want to update the state of the relationship without\n forcing the load of all of the associated record.\n @method push\n @public\n @param {Object} doc a JSONAPI document object describing the new value of this relationship.\n @param {Boolean} [skipFetch] if `true`, do not attempt to fetch unloaded records\n @return {Promise}\n */\n async push(doc, skipFetch) {\n const {\n store\n } = this;\n const isResourceData = doc.data && isMaybeResource(doc.data);\n const added = isResourceData ? store._push(doc, true) : doc.data ? store.identifierCache.getOrCreateRecordIdentifier(doc.data) : null;\n const {\n identifier\n } = this.belongsToRelationship;\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (added) {\n assertPolymorphicType(identifier, this.belongsToRelationship.definition, added, store);\n }\n }\n const newData = {};\n\n // only set data if it was passed in\n if (doc.data || doc.data === null) {\n newData.data = added;\n }\n if ('links' in doc) {\n newData.links = doc.links;\n }\n if ('meta' in doc) {\n newData.meta = doc.meta;\n }\n store._join(() => {\n this.graph.push({\n op: 'updateRelationship',\n record: identifier,\n field: this.key,\n value: newData\n });\n });\n if (!skipFetch) return this.load();\n }\n\n /**\n `value()` synchronously returns the current value of the belongs-to\n relationship. Unlike `record.relationshipName`, calling\n `value()` on a reference does not trigger a fetch if the async\n relationship is not yet loaded. If the relationship is not loaded\n it will always return `null`.\n Example\n ```javascript\n // models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default class BlogModel extends Model {\n @belongsTo('user', { async: true, inverse: null }) user;\n }\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n data: { type: 'user', id: 1 }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n userRef.value(); // null\n // provide data for reference\n userRef.push({\n data: {\n type: 'user',\n id: 1,\n attributes: {\n username: \"@user\"\n }\n }\n }).then(function(user) {\n userRef.value(); // user\n });\n ```\n @method value\n @public\n @return {Model} the record in this relationship\n */\n value() {\n const resource = this._resource();\n return resource && resource.data ? this.store.peekRecord(resource.data) : null;\n }\n\n /**\n Loads a record in a belongs-to relationship if it is not already\n loaded. If the relationship is already loaded this method does not\n trigger a new load.\n Example\n ```javascript\n // models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default class BlogModel extends Model {\n @belongsTo('user', { async: true, inverse: null }) user;\n }\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n data: { type: 'user', id: 1 }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n userRef.value(); // null\n userRef.load().then(function(user) {\n userRef.value() === user\n });\n ```\n You may also pass in an options object whose properties will be\n fed forward. This enables you to pass `adapterOptions` into the\n request given to the adapter via the reference.\n Example\n ```javascript\n userRef.load({ adapterOptions: { isPrivate: true } }).then(function(user) {\n userRef.value() === user;\n });\n ```\n ```app/adapters/user.js\n import Adapter from '@ember-data/adapter';\n export default class UserAdapter extends Adapter {\n findRecord(store, type, id, snapshot) {\n // In the adapter you will have access to adapterOptions.\n let adapterOptions = snapshot.adapterOptions;\n }\n });\n ```\n @method load\n @public\n @param {Object} options the options to pass in.\n @return {Promise} a promise that resolves with the record in this belongs-to relationship.\n */\n async load(options) {\n const support = LEGACY_SUPPORT.get(this.___identifier);\n const fetchSyncRel = !this.belongsToRelationship.definition.isAsync && !areAllInverseRecordsLoaded(this.store, this._resource());\n return fetchSyncRel ? support.reloadBelongsTo(this.key, options).then(() => this.value()) :\n // we cast to fix the return type since typescript and eslint don't understand async functions\n // properly\n support.getBelongsTo(this.key, options);\n }\n\n /**\n Triggers a reload of the value in this relationship. If the\n remoteType is `\"link\"` Ember Data will use the relationship link to\n reload the relationship. Otherwise it will reload the record by its\n id.\n Example\n ```javascript\n // models/blog.js\n import Model, { belongsTo } from '@ember-data/model';\n export default class BlogModel extends Model {\n @belongsTo('user', { async: true, inverse: null }) user;\n }\n let blog = store.push({\n data: {\n type: 'blog',\n id: 1,\n relationships: {\n user: {\n data: { type: 'user', id: 1 }\n }\n }\n }\n });\n let userRef = blog.belongsTo('user');\n userRef.reload().then(function(user) {\n userRef.value() === user\n });\n ```\n You may also pass in an options object whose properties will be\n fed forward. This enables you to pass `adapterOptions` into the\n request given to the adapter via the reference. A full example\n can be found in the `load` method.\n Example\n ```javascript\n userRef.reload({ adapterOptions: { isPrivate: true } })\n ```\n @method reload\n @public\n @param {Object} options the options to pass in.\n @return {Promise} a promise that resolves with the record in this belongs-to relationship after the reload has completed.\n */\n reload(options) {\n const support = LEGACY_SUPPORT.get(this.___identifier);\n return support.reloadBelongsTo(this.key, options).then(() => this.value());\n }\n}, _applyDecoratedDescriptor(_class$3.prototype, \"identifier\", [cached, compat], Object.getOwnPropertyDescriptor(_class$3.prototype, \"identifier\"), _class$3.prototype), _class$3);\ndefineSignal(BelongsToReference.prototype, '_ref', 0);\nconst LEGACY_SUPPORT = new Map();\nfunction lookupLegacySupport(record) {\n const identifier = recordIdentifierFor(record);\n assert(`Expected a record`, identifier);\n let support = LEGACY_SUPPORT.get(identifier);\n if (!support) {\n assert(`Memory Leak Detected`, !record.isDestroyed && !record.isDestroying);\n support = new LegacySupport(record);\n LEGACY_SUPPORT.set(identifier, support);\n LEGACY_SUPPORT.set(record, support);\n }\n return support;\n}\nclass LegacySupport {\n constructor(record) {\n this.record = record;\n this.store = storeFor(record);\n this.identifier = recordIdentifierFor(record);\n this.cache = peekCache(record);\n if (macroCondition(getOwnConfig().packages.HAS_JSON_API_PACKAGE)) {\n const graphFor = importSync('@ember-data/graph/-private').graphFor;\n this.graph = graphFor(this.store);\n }\n this._manyArrayCache = Object.create(null);\n this._relationshipPromisesCache = Object.create(null);\n this._relationshipProxyCache = Object.create(null);\n this._pending = Object.create(null);\n this.references = Object.create(null);\n }\n _syncArray(array) {\n // It’s possible the parent side of the relationship may have been destroyed by this point\n if (this.isDestroyed || this.isDestroying) {\n return;\n }\n const currentState = array[SOURCE];\n const identifier = this.identifier;\n const [identifiers, jsonApi] = this._getCurrentState(identifier, array.key);\n if (jsonApi.meta) {\n array.meta = jsonApi.meta;\n }\n if (jsonApi.links) {\n array.links = jsonApi.links;\n }\n currentState.length = 0;\n fastPush(currentState, identifiers);\n }\n mutate(mutation) {\n this.cache.mutate(mutation);\n }\n _findBelongsTo(key, resource, relationship, options) {\n // TODO @runspired follow up if parent isNew then we should not be attempting load here\n // TODO @runspired follow up on whether this should be in the relationship requests cache\n return this._findBelongsToByJsonApiResource(resource, this.identifier, relationship, options).then(identifier => handleCompletedRelationshipRequest(this, key, relationship, identifier), e => handleCompletedRelationshipRequest(this, key, relationship, null, e));\n }\n reloadBelongsTo(key, options) {\n const loadingPromise = this._relationshipPromisesCache[key];\n if (loadingPromise) {\n return loadingPromise;\n }\n const relationship = this.graph.get(this.identifier, key);\n assert(`Expected ${key} to be a belongs-to relationship`, isBelongsTo(relationship));\n const resource = this.cache.getRelationship(this.identifier, key);\n relationship.state.hasFailedLoadAttempt = false;\n relationship.state.shouldForceReload = true;\n const promise = this._findBelongsTo(key, resource, relationship, options);\n if (this._relationshipProxyCache[key]) {\n // @ts-expect-error\n return this._updatePromiseProxyFor('belongsTo', key, {\n promise\n });\n }\n return promise;\n }\n getBelongsTo(key, options) {\n const {\n identifier,\n cache\n } = this;\n const resource = cache.getRelationship(this.identifier, key);\n const relatedIdentifier = resource && resource.data ? resource.data : null;\n assert(`Expected a stable identifier`, !relatedIdentifier || isStableIdentifier(relatedIdentifier));\n const store = this.store;\n const relationship = this.graph.get(this.identifier, key);\n assert(`Expected ${key} to be a belongs-to relationship`, isBelongsTo(relationship));\n const isAsync = relationship.definition.isAsync;\n const _belongsToState = {\n key,\n store,\n legacySupport: this,\n modelName: relationship.definition.type\n };\n if (isAsync) {\n if (relationship.state.hasFailedLoadAttempt) {\n return this._relationshipProxyCache[key];\n }\n const promise = this._findBelongsTo(key, resource, relationship, options);\n const isLoaded = relatedIdentifier && store._instanceCache.recordIsLoaded(relatedIdentifier);\n return this._updatePromiseProxyFor('belongsTo', key, {\n promise,\n content: isLoaded ? store._instanceCache.getRecord(relatedIdentifier) : null,\n _belongsToState\n });\n } else {\n if (relatedIdentifier === null) {\n return null;\n } else {\n const toReturn = store._instanceCache.getRecord(relatedIdentifier);\n assert(`You looked up the '${key}' relationship on a '${identifier.type}' with id ${identifier.id || 'null'} but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (\\`belongsTo(, { async: true, inverse: })\\`)`, toReturn === null || store._instanceCache.recordIsLoaded(relatedIdentifier, true));\n return toReturn;\n }\n }\n }\n setDirtyBelongsTo(key, value) {\n return this.cache.mutate({\n op: 'replaceRelatedRecord',\n record: this.identifier,\n field: key,\n value: extractIdentifierFromRecord(value)\n },\n // @ts-expect-error\n true);\n }\n _getCurrentState(identifier, field) {\n const jsonApi = this.cache.getRelationship(identifier, field);\n const cache = this.store._instanceCache;\n const identifiers = [];\n if (jsonApi.data) {\n for (let i = 0; i < jsonApi.data.length; i++) {\n const relatedIdentifier = jsonApi.data[i];\n assert(`Expected a stable identifier`, isStableIdentifier(relatedIdentifier));\n if (cache.recordIsLoaded(relatedIdentifier, true)) {\n identifiers.push(relatedIdentifier);\n }\n }\n }\n return [identifiers, jsonApi];\n }\n getManyArray(key, definition) {\n if (macroCondition(getOwnConfig().packages.HAS_JSON_API_PACKAGE)) {\n let manyArray = this._manyArrayCache[key];\n if (!definition) {\n definition = this.graph.get(this.identifier, key).definition;\n }\n if (!manyArray) {\n const [identifiers, doc] = this._getCurrentState(this.identifier, key);\n manyArray = new RelatedCollection({\n store: this.store,\n type: definition.type,\n identifier: this.identifier,\n cache: this.cache,\n identifiers,\n key,\n meta: doc.meta || null,\n links: doc.links || null,\n isPolymorphic: definition.isPolymorphic,\n isAsync: definition.isAsync,\n _inverseIsAsync: definition.inverseIsAsync,\n manager: this,\n isLoaded: !definition.isAsync,\n allowMutation: true\n });\n this._manyArrayCache[key] = manyArray;\n }\n return manyArray;\n }\n assert('hasMany only works with the @ember-data/json-api package');\n }\n fetchAsyncHasMany(key, relationship, manyArray, options) {\n if (macroCondition(getOwnConfig().packages.HAS_JSON_API_PACKAGE)) {\n let loadingPromise = this._relationshipPromisesCache[key];\n if (loadingPromise) {\n return loadingPromise;\n }\n const jsonApi = this.cache.getRelationship(this.identifier, key);\n const promise = this._findHasManyByJsonApiResource(jsonApi, this.identifier, relationship, options);\n if (!promise) {\n manyArray.isLoaded = true;\n return Promise.resolve(manyArray);\n }\n loadingPromise = promise.then(() => handleCompletedRelationshipRequest(this, key, relationship, manyArray), e => handleCompletedRelationshipRequest(this, key, relationship, manyArray, e));\n this._relationshipPromisesCache[key] = loadingPromise;\n return loadingPromise;\n }\n assert('hasMany only works with the @ember-data/json-api package');\n }\n reloadHasMany(key, options) {\n if (macroCondition(getOwnConfig().packages.HAS_JSON_API_PACKAGE)) {\n const loadingPromise = this._relationshipPromisesCache[key];\n if (loadingPromise) {\n return loadingPromise;\n }\n const relationship = this.graph.get(this.identifier, key);\n const {\n definition,\n state\n } = relationship;\n state.hasFailedLoadAttempt = false;\n state.shouldForceReload = true;\n const manyArray = this.getManyArray(key, definition);\n const promise = this.fetchAsyncHasMany(key, relationship, manyArray, options);\n if (this._relationshipProxyCache[key]) {\n return this._updatePromiseProxyFor('hasMany', key, {\n promise\n });\n }\n return promise;\n }\n assert(`hasMany only works with the @ember-data/json-api package`);\n }\n getHasMany(key, options) {\n if (macroCondition(getOwnConfig().packages.HAS_JSON_API_PACKAGE)) {\n const relationship = this.graph.get(this.identifier, key);\n const {\n definition,\n state\n } = relationship;\n const manyArray = this.getManyArray(key, definition);\n if (definition.isAsync) {\n if (state.hasFailedLoadAttempt) {\n return this._relationshipProxyCache[key];\n }\n const promise = this.fetchAsyncHasMany(key, relationship, manyArray, options);\n return this._updatePromiseProxyFor('hasMany', key, {\n promise,\n content: manyArray\n });\n } else {\n assert(`You looked up the '${key}' relationship on a '${this.identifier.type}' with id ${this.identifier.id || 'null'} but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async ('hasMany(, { async: true, inverse: })')`, !anyUnloaded(this.store, relationship));\n return manyArray;\n }\n }\n assert(`hasMany only works with the @ember-data/json-api package`);\n }\n _updatePromiseProxyFor(kind, key, args) {\n let promiseProxy = this._relationshipProxyCache[key];\n if (kind === 'hasMany') {\n const {\n promise,\n content\n } = args;\n if (promiseProxy) {\n assert(`Expected a PromiseManyArray`, '_update' in promiseProxy);\n promiseProxy._update(promise, content);\n } else {\n promiseProxy = this._relationshipProxyCache[key] = new PromiseManyArray(promise, content);\n }\n return promiseProxy;\n }\n if (promiseProxy) {\n const {\n promise,\n content\n } = args;\n assert(`Expected a PromiseBelongsTo`, '_belongsToState' in promiseProxy);\n if (content !== undefined) {\n promiseProxy.set('content', content);\n }\n void promiseProxy.set('promise', promise);\n } else {\n promiseProxy = PromiseBelongsTo.create(args);\n this._relationshipProxyCache[key] = promiseProxy;\n }\n return promiseProxy;\n }\n referenceFor(kind, name) {\n let reference = this.references[name];\n if (!reference) {\n if (macroCondition(!getOwnConfig().packages.HAS_JSON_API_PACKAGE)) {\n // TODO @runspired while this feels odd, it is not a regression in capability because we do\n // not today support references pulling from RecordDatas other than our own\n // because of the intimate API access involved. This is something we will need to redesign.\n assert(`snapshot.belongsTo only supported for @ember-data/json-api`);\n }\n const {\n graph,\n identifier\n } = this;\n const relationship = graph.get(identifier, name);\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (kind) {\n const modelName = identifier.type;\n const actualRelationshipKind = relationship.definition.kind;\n assert(`You tried to get the '${name}' relationship on a '${modelName}' via record.${kind}('${name}'), but the relationship is of kind '${actualRelationshipKind}'. Use record.${actualRelationshipKind}('${name}') instead.`, actualRelationshipKind === kind);\n }\n }\n const relationshipKind = relationship.definition.kind;\n if (relationshipKind === 'belongsTo') {\n reference = new BelongsToReference(this.store, graph, identifier, relationship, name);\n } else if (relationshipKind === 'hasMany') {\n reference = new HasManyReference(this.store, graph, identifier, relationship, name);\n }\n this.references[name] = reference;\n }\n return reference;\n }\n _findHasManyByJsonApiResource(resource, parentIdentifier, relationship, options = {}) {\n if (macroCondition(getOwnConfig().packages.HAS_JSON_API_PACKAGE)) {\n if (!resource) {\n return;\n }\n const {\n definition,\n state\n } = relationship;\n upgradeStore(this.store);\n const adapter = this.store.adapterFor(definition.type);\n const {\n isStale,\n hasDematerializedInverse,\n hasReceivedData,\n isEmpty,\n shouldForceReload\n } = state;\n const allInverseRecordsAreLoaded = areAllInverseRecordsLoaded(this.store, resource);\n const identifiers = resource.data;\n const shouldFindViaLink = resource.links && resource.links.related && (typeof adapter.findHasMany === 'function' || typeof identifiers === 'undefined') && (shouldForceReload || hasDematerializedInverse || isStale || !allInverseRecordsAreLoaded && !isEmpty);\n const relationshipMeta = this.store.getSchemaDefinitionService().relationshipsDefinitionFor({\n type: definition.inverseType\n })[definition.key];\n const request = {\n useLink: shouldFindViaLink,\n field: relationshipMeta,\n links: resource.links,\n meta: resource.meta,\n options,\n record: parentIdentifier\n };\n\n // fetch via link\n if (shouldFindViaLink) {\n assert(`Expected collection to be an array`, !identifiers || Array.isArray(identifiers));\n assert(`Expected stable identifiers`, !identifiers || identifiers.every(isStableIdentifier));\n return this.store.request({\n op: 'findHasMany',\n records: identifiers || [],\n data: request,\n cacheOptions: {\n [Symbol.for('wd:skip-cache')]: true\n }\n });\n }\n const preferLocalCache = hasReceivedData && !isEmpty;\n const hasLocalPartialData = hasDematerializedInverse || isEmpty && Array.isArray(identifiers) && identifiers.length > 0;\n const attemptLocalCache = !shouldForceReload && !isStale && (preferLocalCache || hasLocalPartialData);\n if (attemptLocalCache && allInverseRecordsAreLoaded) {\n return;\n }\n const hasData = hasReceivedData && !isEmpty;\n if (attemptLocalCache || hasData || hasLocalPartialData) {\n assert(`Expected collection to be an array`, Array.isArray(identifiers));\n assert(`Expected stable identifiers`, identifiers.every(isStableIdentifier));\n options.reload = options.reload || !attemptLocalCache || undefined;\n return this.store.request({\n op: 'findHasMany',\n records: identifiers,\n data: request,\n cacheOptions: {\n [Symbol.for('wd:skip-cache')]: true\n }\n });\n }\n\n // we were explicitly told we have no data and no links.\n // TODO if the relationshipIsStale, should we hit the adapter anyway?\n return;\n }\n assert(`hasMany only works with the @ember-data/json-api package`);\n }\n _findBelongsToByJsonApiResource(resource, parentIdentifier, relationship, options = {}) {\n if (!resource) {\n return Promise.resolve(null);\n }\n const key = relationship.definition.key;\n\n // interleaved promises mean that we MUST cache this here\n // in order to prevent infinite re-render if the request\n // fails.\n if (this._pending[key]) {\n return this._pending[key];\n }\n const identifier = resource.data ? resource.data : null;\n assert(`Expected a stable identifier`, !identifier || isStableIdentifier(identifier));\n const {\n isStale,\n hasDematerializedInverse,\n hasReceivedData,\n isEmpty,\n shouldForceReload\n } = relationship.state;\n const allInverseRecordsAreLoaded = areAllInverseRecordsLoaded(this.store, resource);\n const shouldFindViaLink = resource.links?.related && (shouldForceReload || hasDematerializedInverse || isStale || !allInverseRecordsAreLoaded && !isEmpty);\n const relationshipMeta = this.store.getSchemaDefinitionService().relationshipsDefinitionFor(this.identifier)[relationship.definition.key];\n assert(`Attempted to access a belongsTo relationship but no definition exists for it`, relationshipMeta);\n const request = {\n useLink: shouldFindViaLink,\n field: relationshipMeta,\n links: resource.links,\n meta: resource.meta,\n options,\n record: parentIdentifier\n };\n\n // fetch via link\n if (shouldFindViaLink) {\n const future = this.store.request({\n op: 'findBelongsTo',\n records: identifier ? [identifier] : [],\n data: request,\n cacheOptions: {\n [Symbol.for('wd:skip-cache')]: true\n }\n });\n this._pending[key] = future.then(doc => doc.content).finally(() => {\n this._pending[key] = undefined;\n });\n return this._pending[key];\n }\n const preferLocalCache = hasReceivedData && allInverseRecordsAreLoaded && !isEmpty;\n const hasLocalPartialData = hasDematerializedInverse || isEmpty && resource.data;\n // null is explicit empty, undefined is \"we don't know anything\"\n const localDataIsEmpty = !identifier;\n const attemptLocalCache = !shouldForceReload && !isStale && (preferLocalCache || hasLocalPartialData);\n\n // we dont need to fetch and are empty\n if (attemptLocalCache && localDataIsEmpty) {\n return Promise.resolve(null);\n }\n\n // we dont need to fetch because we are local state\n const resourceIsLocal = identifier?.id === null;\n if (attemptLocalCache && allInverseRecordsAreLoaded || resourceIsLocal) {\n return Promise.resolve(identifier);\n }\n\n // we may need to fetch\n if (identifier) {\n assert(`Cannot fetch belongs-to relationship with no information`, identifier);\n options.reload = options.reload || !attemptLocalCache || undefined;\n this._pending[key] = this.store.request({\n op: 'findBelongsTo',\n records: [identifier],\n data: request,\n cacheOptions: {\n [Symbol.for('wd:skip-cache')]: true\n }\n }).then(doc => doc.content).finally(() => {\n this._pending[key] = undefined;\n });\n return this._pending[key];\n }\n\n // we were explicitly told we have no data and no links.\n // TODO if the relationshipIsStale, should we hit the adapter anyway?\n return Promise.resolve(null);\n }\n destroy() {\n this.isDestroying = true;\n let cache = this._manyArrayCache;\n this._manyArrayCache = Object.create(null);\n Object.keys(cache).forEach(key => {\n cache[key].destroy();\n });\n cache = this._relationshipProxyCache;\n this._relationshipProxyCache = Object.create(null);\n Object.keys(cache).forEach(key => {\n const proxy = cache[key];\n if (proxy.destroy) {\n proxy.destroy();\n }\n });\n cache = this.references;\n this.references = Object.create(null);\n Object.keys(cache).forEach(key => {\n cache[key].destroy();\n });\n this.isDestroyed = true;\n }\n}\nfunction handleCompletedRelationshipRequest(recordExt, key, relationship, value, error) {\n delete recordExt._relationshipPromisesCache[key];\n relationship.state.shouldForceReload = false;\n const isHasMany = relationship.definition.kind === 'hasMany';\n if (isHasMany) {\n // we don't notify the record property here to avoid refetch\n // only the many array\n value.notify();\n }\n if (error) {\n relationship.state.hasFailedLoadAttempt = true;\n const proxy = recordExt._relationshipProxyCache[key];\n // belongsTo relationships are sometimes unloaded\n // when a load fails, in this case we need\n // to make sure that we aren't proxying\n // to destroyed content\n // for the sync belongsTo reload case there will be no proxy\n // for the async reload case there will be no proxy if the ui\n // has never been accessed\n if (proxy && !isHasMany) {\n // @ts-expect-error unsure why this is not resolving the boolean but async belongsTo is weird\n if (proxy.content && proxy.content.isDestroying) {\n proxy.set('content', null);\n }\n recordExt.store.notifications._flush();\n }\n throw error;\n }\n if (isHasMany) {\n value.isLoaded = true;\n } else {\n recordExt.store.notifications._flush();\n }\n relationship.state.hasFailedLoadAttempt = false;\n // only set to not stale if no error is thrown\n relationship.state.isStale = false;\n return isHasMany || !value ? value : recordExt.store.peekRecord(value);\n}\nfunction extractIdentifierFromRecord(record) {\n if (!record) {\n return null;\n }\n return recordIdentifierFor(record);\n}\nfunction anyUnloaded(store, relationship) {\n const graph = store._graph;\n assert(`Expected a Graph instance to be available`, graph);\n const relationshipData = graph.getData(relationship.identifier, relationship.definition.key);\n const state = relationshipData.data;\n const cache = store._instanceCache;\n const unloaded = state?.find(s => {\n const isLoaded = cache.recordIsLoaded(s, true);\n return !isLoaded;\n });\n return unloaded || false;\n}\nfunction areAllInverseRecordsLoaded(store, resource) {\n const instanceCache = store._instanceCache;\n const identifiers = resource.data;\n if (Array.isArray(identifiers)) {\n assert(`Expected stable identifiers`, identifiers.every(isStableIdentifier));\n // treat as collection\n // check for unloaded records\n return identifiers.every(identifier => instanceCache.recordIsLoaded(identifier));\n }\n\n // treat as single resource\n if (!identifiers) return true;\n assert(`Expected stable identifiers`, isStableIdentifier(identifiers));\n return instanceCache.recordIsLoaded(identifiers);\n}\nfunction isBelongsTo(relationship) {\n return relationship.definition.kind === 'belongsTo';\n}\nfunction _initializerDefineProperty(target, property, descriptor, context) {\n if (!descriptor) return;\n Object.defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n });\n}\nvar _dec, _dec2, _dec3, _dec4, _class$2, _descriptor, _descriptor2;\n\n/**\n @module @ember-data/model\n*/\n\n// we force the type here to our own construct because mixin and extend patterns\n// lose generic signatures. We also do this because we need to Omit `clear` from\n// the type of ArrayProxy as we override it's signature.\nconst ArrayProxyWithCustomOverrides = ArrayProxy;\n\n/**\n Holds validation errors for a given record, organized by attribute names.\n\n This class is not directly instantiable.\n\n Every `Model` has an `errors` property that is an instance of\n `Errors`. This can be used to display validation error\n messages returned from the server when a `record.save()` rejects.\n\n For Example, if you had a `User` model that looked like this:\n\n ```app/models/user.js\n import Model, { attr } from '@ember-data/model';\n\n export default class UserModel extends Model {\n @attr('string') username;\n @attr('string') email;\n }\n ```\n And you attempted to save a record that did not validate on the backend:\n\n ```javascript\n let user = store.createRecord('user', {\n username: 'tomster',\n email: 'invalidEmail'\n });\n user.save();\n ```\n\n Your backend would be expected to return an error response that described\n the problem, so that error messages can be generated on the app.\n\n API responses will be translated into instances of `Errors` differently,\n depending on the specific combination of adapter and serializer used. You\n may want to check the documentation or the source code of the libraries\n that you are using, to know how they expect errors to be communicated.\n\n Errors can be displayed to the user by accessing their property name\n to get an array of all the error objects for that property. Each\n error object is a JavaScript object with two keys:\n\n - `message` A string containing the error message from the backend\n - `attribute` The name of the property associated with this error message\n\n ```handlebars\n \n {{#each @model.errors.username as |error|}}\n
\n {{error.message}}\n
\n {{/each}}\n\n \n {{#each @model.errors.email as |error|}}\n
\n {{error.message}}\n
\n {{/each}}\n ```\n\n You can also access the special `messages` property on the error\n object to get an array of all the error strings.\n\n ```handlebars\n {{#each @model.errors.messages as |message|}}\n
\n {{message}}\n
\n {{/each}}\n ```\n\n @class Errors\n @public\n @extends Ember.ArrayProxy\n */\nlet Errors = (_dec = computed(), _dec2 = mapBy('content', 'message'), _dec3 = computed(), _dec4 = not('length'), (_class$2 = class Errors extends ArrayProxyWithCustomOverrides {\n constructor(...args) {\n super(...args);\n /**\n An array containing all of the error messages for this\n record. This is useful for displaying all errors to the user.\n ```handlebars\n {{#each @model.errors.messages as |message|}}\n
\n {{message}}\n
\n {{/each}}\n ```\n @property messages\n @public\n @type {Array}\n */\n _initializerDefineProperty(this, \"messages\", _descriptor, this);\n /**\n Total number of errors.\n @property length\n @type {Number}\n @public\n @readOnly\n */\n /**\n `true` if we have no errors.\n @property isEmpty\n @type {Boolean}\n @public\n @readOnly\n */\n _initializerDefineProperty(this, \"isEmpty\", _descriptor2, this);\n }\n /**\n @property errorsByAttributeName\n @type {MapWithDefault}\n @private\n */\n get errorsByAttributeName() {\n return new Map();\n }\n\n /**\n Returns errors for a given attribute\n ```javascript\n let user = store.createRecord('user', {\n username: 'tomster',\n email: 'invalidEmail'\n });\n user.save().catch(function(){\n user.errors.errorsFor('email'); // returns:\n // [{attribute: \"email\", message: \"Doesn't look like a valid email.\"}]\n });\n ```\n @method errorsFor\n @public\n @param {String} attribute\n @return {Array}\n */\n errorsFor(attribute) {\n const map = this.errorsByAttributeName;\n let errors = map.get(attribute);\n if (errors === undefined) {\n errors = A();\n map.set(attribute, errors);\n }\n\n // Errors may be a native array with extensions turned on. Since we access\n // the array via a method, and not a computed or using `Ember.get`, it does\n // not entangle properly with autotracking, so we entangle manually by\n // getting the `[]` property.\n get(errors, '[]');\n return errors;\n }\n /**\n @property content\n @type {Array}\n @private\n */\n get content() {\n return A();\n }\n\n /**\n @method unknownProperty\n @private\n */\n unknownProperty(attribute) {\n const errors = this.errorsFor(attribute);\n if (errors.length === 0) {\n return undefined;\n }\n return errors;\n }\n /**\n Manually adds errors to the record. This will trigger the `becameInvalid` event/ lifecycle method on\n the record and transition the record into an `invalid` state.\n Example\n ```javascript\n let errors = user.errors;\n // add multiple errors\n errors.add('password', [\n 'Must be at least 12 characters',\n 'Must contain at least one symbol',\n 'Cannot contain your name'\n ]);\n errors.errorsFor('password');\n // =>\n // [\n // { attribute: 'password', message: 'Must be at least 12 characters' },\n // { attribute: 'password', message: 'Must contain at least one symbol' },\n // { attribute: 'password', message: 'Cannot contain your name' },\n // ]\n // add a single error\n errors.add('username', 'This field is required');\n errors.errorsFor('username');\n // =>\n // [\n // { attribute: 'username', message: 'This field is required' },\n // ]\n ```\n @method add\n @public\n @param {string} attribute - the property name of an attribute or relationship\n @param {string[]|string} messages - an error message or array of error messages for the attribute\n */\n add(attribute, messages) {\n const errors = this._findOrCreateMessages(attribute, messages);\n this.addObjects(errors);\n this.errorsFor(attribute).addObjects(errors);\n this.__record.currentState.notify('isValid');\n this.notifyPropertyChange(attribute);\n }\n\n /**\n @method _findOrCreateMessages\n @private\n */\n _findOrCreateMessages(attribute, messages) {\n const errors = this.errorsFor(attribute);\n const messagesArray = Array.isArray(messages) ? messages : [messages];\n const _messages = new Array(messagesArray.length);\n for (let i = 0; i < messagesArray.length; i++) {\n const message = messagesArray[i];\n const err = errors.findBy('message', message);\n if (err) {\n _messages[i] = err;\n } else {\n _messages[i] = {\n attribute: attribute,\n message\n };\n }\n }\n return _messages;\n }\n\n /**\n Manually removes all errors for a given member from the record.\n This will transition the record into a `valid` state, and\n triggers the `becameValid` event and lifecycle method.\n Example:\n ```javascript\n let errors = user.errors;\n errors.add('phone', ['error-1', 'error-2']);\n errors.errorsFor('phone');\n // =>\n // [\n // { attribute: 'phone', message: 'error-1' },\n // { attribute: 'phone', message: 'error-2' },\n // ]\n errors.remove('phone');\n errors.errorsFor('phone');\n // => undefined\n ```\n @method remove\n @public\n @param {string} member - the property name of an attribute or relationship\n */\n remove(attribute) {\n if (this.isEmpty) {\n return;\n }\n const content = this.rejectBy('attribute', attribute);\n this.content.setObjects(content);\n\n // Although errorsByAttributeName.delete is technically enough to sync errors state, we also\n // must mutate the array as well for autotracking\n const errors = this.errorsFor(attribute);\n for (let i = 0; i < errors.length; i++) {\n if (errors[i].attribute === attribute) {\n // .replace from Ember.NativeArray is necessary. JS splice will not work.\n errors.replace(i, 1);\n }\n }\n this.errorsByAttributeName.delete(attribute);\n this.__record.currentState.notify('isValid');\n this.notifyPropertyChange(attribute);\n this.notifyPropertyChange('length');\n }\n\n /**\n Manually clears all errors for the record.\n This will transition the record into a `valid` state, and\n will trigger the `becameValid` event and lifecycle method.\n Example:\n ```javascript\n let errors = user.errors;\n errors.add('username', ['error-a']);\n errors.add('phone', ['error-1', 'error-2']);\n errors.errorsFor('username');\n // =>\n // [\n // { attribute: 'username', message: 'error-a' },\n // ]\n errors.errorsFor('phone');\n // =>\n // [\n // { attribute: 'phone', message: 'error-1' },\n // { attribute: 'phone', message: 'error-2' },\n // ]\n errors.clear();\n errors.errorsFor('username');\n // => undefined\n errors.errorsFor('phone');\n // => undefined\n errors.messages\n // => []\n ```\n @method clear\n @public\n */\n clear() {\n if (this.isEmpty) {\n return;\n }\n const errorsByAttributeName = this.errorsByAttributeName;\n const attributes = [];\n errorsByAttributeName.forEach(function (_, attribute) {\n attributes.push(attribute);\n });\n errorsByAttributeName.clear();\n attributes.forEach(attribute => {\n this.notifyPropertyChange(attribute);\n });\n this.__record.currentState.notify('isValid');\n super.clear();\n }\n\n /**\n Checks if there are error messages for the given attribute.\n ```app/controllers/user/edit.js\n import Controller from '@ember/controller';\n import { action } from '@ember/object';\n export default class UserEditController extends Controller {\n @action\n save(user) {\n if (user.errors.has('email')) {\n return alert('Please update your email before attempting to save.');\n }\n user.save();\n }\n }\n ```\n @method has\n @public\n @param {String} attribute\n @return {Boolean} true if there some errors on given attribute\n */\n has(attribute) {\n return this.errorsFor(attribute).length > 0;\n }\n}, (_applyDecoratedDescriptor(_class$2.prototype, \"errorsByAttributeName\", [_dec], Object.getOwnPropertyDescriptor(_class$2.prototype, \"errorsByAttributeName\"), _class$2.prototype), _descriptor = _applyDecoratedDescriptor(_class$2.prototype, \"messages\", [_dec2], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _applyDecoratedDescriptor(_class$2.prototype, \"content\", [_dec3], Object.getOwnPropertyDescriptor(_class$2.prototype, \"content\"), _class$2.prototype), _descriptor2 = _applyDecoratedDescriptor(_class$2.prototype, \"isEmpty\", [_dec4], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n})), _class$2));\nfunction rollbackAttributes() {\n const {\n currentState\n } = this;\n const {\n isNew\n } = currentState;\n this[RecordStore]._join(() => {\n peekCache(this).rollbackAttrs(recordIdentifierFor$1(this));\n this.errors.clear();\n currentState.cleanErrorRequests();\n if (isNew) {\n this.unloadRecord();\n }\n });\n}\nfunction unloadRecord() {\n if (this.currentState.isNew && (this.isDestroyed || this.isDestroying)) {\n return;\n }\n this[RecordStore].unloadRecord(this);\n}\nfunction belongsTo(prop) {\n return lookupLegacySupport(this).referenceFor('belongsTo', prop);\n}\nfunction hasMany(prop) {\n return lookupLegacySupport(this).referenceFor('hasMany', prop);\n}\nfunction reload(options = {}) {\n options.isReloading = true;\n options.reload = true;\n const identifier = recordIdentifierFor$1(this);\n assert(`You cannot reload a record without an ID`, identifier.id);\n this.isReloading = true;\n const promise = this[RecordStore].request({\n op: 'findRecord',\n data: {\n options,\n record: identifier\n },\n cacheOptions: {\n [Symbol.for('wd:skip-cache')]: true\n }\n }).then(() => this).finally(() => {\n this.isReloading = false;\n });\n return promise;\n}\nfunction changedAttributes() {\n return peekCache(this).changedAttrs(recordIdentifierFor$1(this));\n}\nfunction serialize(options) {\n upgradeStore(this[RecordStore]);\n return this[RecordStore].serializeRecord(this, options);\n}\nfunction deleteRecord() {\n // ensure we've populated currentState prior to deleting a new record\n if (this.currentState) {\n this[RecordStore].deleteRecord(this);\n }\n}\nfunction save(options) {\n let promise;\n if (this.currentState.isNew && this.currentState.isDeleted) {\n promise = Promise.resolve(this);\n } else {\n this.errors.clear();\n promise = this[RecordStore].saveRecord(this, options);\n }\n return promise;\n}\nfunction destroyRecord(options) {\n const {\n isNew\n } = this.currentState;\n this.deleteRecord();\n if (isNew) {\n return Promise.resolve(this);\n }\n return this.save(options).then(_ => {\n this.unloadRecord();\n return this;\n });\n}\nfunction createSnapshot() {\n const store = this[RecordStore];\n upgradeStore(store);\n if (!store._fetchManager) {\n const FetchManager = importSync('@ember-data/legacy-compat/-private').FetchManager;\n store._fetchManager = new FetchManager(store);\n }\n return store._fetchManager.createSnapshot(recordIdentifierFor$1(this));\n}\nfunction notifyChanges(identifier, value, key, record, store) {\n if (value === 'attributes') {\n if (key) {\n notifyAttribute(store, identifier, key, record);\n } else {\n record.eachAttribute(name => {\n notifyAttribute(store, identifier, name, record);\n });\n }\n } else if (value === 'relationships') {\n if (key) {\n const meta = record.constructor.relationshipsByName.get(key);\n assert(`Expected to find a relationship for ${key} on ${identifier.type}`, meta);\n notifyRelationship(identifier, key, record, meta);\n } else {\n record.eachRelationship((name, meta) => {\n notifyRelationship(identifier, name, record, meta);\n });\n }\n } else if (value === 'identity') {\n record.notifyPropertyChange('id');\n }\n}\nfunction notifyRelationship(identifier, key, record, meta) {\n if (meta.kind === 'belongsTo') {\n record.notifyPropertyChange(key);\n } else if (meta.kind === 'hasMany') {\n const support = LEGACY_SUPPORT.get(identifier);\n const manyArray = support && support._manyArrayCache[key];\n const hasPromise = support && support._relationshipPromisesCache[key];\n if (manyArray && hasPromise) {\n // do nothing, we will notify the ManyArray directly\n // once the fetch has completed.\n return;\n }\n if (manyArray) {\n manyArray.notify();\n\n //We need to notifyPropertyChange in the adding case because we need to make sure\n //we fetch the newly added record in case it is unloaded\n //TODO(Igor): Consider whether we could do this only if the record state is unloaded\n assert(`Expected options to exist on relationship meta`, meta.options);\n assert(`Expected async to exist on relationship meta options`, 'async' in meta.options);\n if (meta.options.async) {\n record.notifyPropertyChange(key);\n }\n }\n }\n}\nfunction notifyAttribute(store, identifier, key, record) {\n const currentValue = cacheFor(record, key);\n const cache = store.cache;\n if (currentValue !== cache.getAttr(identifier, key)) {\n record.notifyPropertyChange(key);\n }\n}\nvar _class$1;\nconst SOURCE_POINTER_REGEXP = /^\\/?data\\/(attributes|relationships)\\/(.*)/;\nconst SOURCE_POINTER_PRIMARY_REGEXP = /^\\/?data/;\nconst PRIMARY_ATTRIBUTE_KEY = 'base';\nfunction isInvalidError(error) {\n return !!error && error instanceof Error && 'isAdapterError' in error && error.isAdapterError === true && 'code' in error && error.code === 'InvalidError';\n}\n\n/**\n * A decorator that caches a getter while\n * providing the ability to bust that cache\n * when we so choose in a way that notifies\n * tracking systems.\n *\n * @internal\n */\nfunction tagged(_target, key, desc) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const getter = desc.get;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const setter = desc.set;\n desc.get = function () {\n const signal = getSignal(this, key, true);\n subscribe(signal);\n if (signal.shouldReset) {\n signal.shouldReset = false;\n signal.lastValue = getter.call(this);\n }\n return signal.lastValue;\n };\n desc.set = function (v) {\n getSignal(this, key, true); // ensure signal is setup in case we want to use it.\n // probably notify here but not yet.\n setter.call(this, v);\n };\n compat(desc);\n return desc;\n}\nfunction notifySignal(obj, key) {\n const signal = peekSignal(obj, key);\n if (signal) {\n signal.shouldReset = true;\n addToTransaction(signal);\n }\n}\n\n/**\nHistorically EmberData managed a state machine\nfor each record, the localState for which\nwas reflected onto Model.\n\nThis implements the flags and stateName for backwards compat\nwith the state tree that used to be possible (listed below).\n\nstateName and dirtyType are candidates for deprecation.\n\nroot\n empty\n deleted // hidden from stateName\n preloaded // hidden from stateName\n\n loading\n empty // hidden from stateName\n preloaded // hidden from stateName\n\n loaded\n saved\n updated\n uncommitted\n invalid\n inFlight\n created\n uncommitted\n invalid\n inFlight\n\n deleted\n saved\n new // hidden from stateName\n uncommitted\n invalid\n inFlight\n\n @internal\n*/\nlet RecordState = (_class$1 = class RecordState {\n constructor(record) {\n const store = storeFor$1(record);\n const identity = recordIdentifierFor(record);\n this.identifier = identity;\n this.record = record;\n this.cache = store.cache;\n this.pendingCount = 0;\n this.fulfilledCount = 0;\n this.rejectedCount = 0;\n this._errorRequests = [];\n this._lastError = null;\n const requests = store.getRequestStateService();\n const notifications = store.notifications;\n const handleRequest = req => {\n if (req.type === 'mutation') {\n switch (req.state) {\n case 'pending':\n this.isSaving = true;\n break;\n case 'rejected':\n this.isSaving = false;\n this._lastError = req;\n if (!(req.response && isInvalidError(req.response.data))) {\n this._errorRequests.push(req);\n }\n notifyErrorsStateChanged(this);\n break;\n case 'fulfilled':\n this._errorRequests = [];\n this._lastError = null;\n this.isSaving = false;\n this.notify('isDirty');\n notifyErrorsStateChanged(this);\n break;\n }\n } else {\n switch (req.state) {\n case 'pending':\n this.pendingCount++;\n this.notify('isLoading');\n break;\n case 'rejected':\n this.pendingCount--;\n this._lastError = req;\n if (!(req.response && isInvalidError(req.response.data))) {\n this._errorRequests.push(req);\n }\n this.notify('isLoading');\n notifyErrorsStateChanged(this);\n break;\n case 'fulfilled':\n this.pendingCount--;\n this.fulfilledCount++;\n this.notify('isLoading');\n this.notify('isDirty');\n notifyErrorsStateChanged(this);\n this._errorRequests = [];\n this._lastError = null;\n break;\n }\n }\n };\n requests.subscribeForRecord(identity, handleRequest);\n\n // we instantiate lazily\n // so we grab anything we don't have yet\n const lastRequest = requests.getLastRequestForRecord(identity);\n if (lastRequest) {\n handleRequest(lastRequest);\n }\n this.handler = notifications.subscribe(identity, (identifier, type, key) => {\n switch (type) {\n case 'state':\n this.notify('isSaved');\n this.notify('isNew');\n this.notify('isDeleted');\n this.notify('isDirty');\n break;\n case 'attributes':\n this.notify('isEmpty');\n this.notify('isDirty');\n break;\n case 'errors':\n this.updateInvalidErrors(this.record.errors);\n this.notify('isValid');\n break;\n }\n });\n }\n destroy() {\n storeFor$1(this.record).notifications.unsubscribe(this.handler);\n }\n notify(key) {\n notifySignal(this, key);\n }\n updateInvalidErrors(errors) {\n assert(`Expected the Cache instance for ${this.identifier.lid} to implement getErrors(identifier)`, typeof this.cache.getErrors === 'function');\n const jsonApiErrors = this.cache.getErrors(this.identifier);\n errors.clear();\n for (let i = 0; i < jsonApiErrors.length; i++) {\n const error = jsonApiErrors[i];\n if (error.source && error.source.pointer) {\n const keyMatch = error.source.pointer.match(SOURCE_POINTER_REGEXP);\n let key;\n if (keyMatch) {\n key = keyMatch[2];\n } else if (error.source.pointer.search(SOURCE_POINTER_PRIMARY_REGEXP) !== -1) {\n key = PRIMARY_ATTRIBUTE_KEY;\n }\n if (key) {\n const errMsg = error.detail || error.title;\n assert(`Expected field error to have a detail or title to use as the message`, errMsg);\n errors.add(key, errMsg);\n }\n }\n }\n }\n cleanErrorRequests() {\n this.notify('isValid');\n this.notify('isError');\n this.notify('adapterError');\n this._errorRequests = [];\n this._lastError = null;\n }\n get isLoading() {\n return !this.isLoaded && this.pendingCount > 0 && this.fulfilledCount === 0;\n }\n get isLoaded() {\n if (this.isNew) {\n return true;\n }\n return this.fulfilledCount > 0 || !this.isEmpty;\n }\n get isSaved() {\n const rd = this.cache;\n if (this.isDeleted) {\n assert(`Expected Cache to implement isDeletionCommitted()`, typeof rd.isDeletionCommitted === 'function');\n return rd.isDeletionCommitted(this.identifier);\n }\n if (this.isNew || this.isEmpty || !this.isValid || this.isDirty || this.isLoading) {\n return false;\n }\n return true;\n }\n get isEmpty() {\n const rd = this.cache;\n // TODO this is not actually an RFC'd concept. Determine the\n // correct heuristic to replace this with.\n assert(`Expected Cache to implement isEmpty()`, typeof rd.isEmpty === 'function');\n return !this.isNew && rd.isEmpty(this.identifier);\n }\n get isNew() {\n const rd = this.cache;\n assert(`Expected Cache to implement isNew()`, typeof rd.isNew === 'function');\n return rd.isNew(this.identifier);\n }\n get isDeleted() {\n const rd = this.cache;\n assert(`Expected Cache to implement isDeleted()`, typeof rd.isDeleted === 'function');\n return rd.isDeleted(this.identifier);\n }\n get isValid() {\n return this.record.errors.length === 0;\n }\n get isDirty() {\n const rd = this.cache;\n if (this.isEmpty || rd.isDeletionCommitted(this.identifier) || this.isDeleted && this.isNew) {\n return false;\n }\n return this.isDeleted || this.isNew || rd.hasChangedAttrs(this.identifier);\n }\n get isError() {\n const errorReq = this._errorRequests[this._errorRequests.length - 1];\n if (!errorReq) {\n return false;\n } else {\n return true;\n }\n }\n get adapterError() {\n const request = this._lastError;\n if (!request) {\n return null;\n }\n return request.state === 'rejected' && request.response.data;\n }\n get isPreloaded() {\n return !this.isEmpty && this.isLoading;\n }\n get stateName() {\n // we might be empty while loading so check this first\n if (this.isLoading) {\n return 'root.loading';\n\n // got nothing yet or were unloaded\n } else if (this.isEmpty) {\n return 'root.empty';\n\n // deleted substates\n } else if (this.isDeleted) {\n if (this.isSaving) {\n return 'root.deleted.inFlight';\n } else if (this.isSaved) {\n // TODO ensure isSaved isn't true from previous requests\n return 'root.deleted.saved';\n } else if (!this.isValid) {\n return 'root.deleted.invalid';\n } else {\n return 'root.deleted.uncommitted';\n }\n\n // loaded.created substates\n } else if (this.isNew) {\n if (this.isSaving) {\n return 'root.loaded.created.inFlight';\n } else if (!this.isValid) {\n return 'root.loaded.created.invalid';\n }\n return 'root.loaded.created.uncommitted';\n\n // loaded.updated substates\n } else if (this.isSaving) {\n return 'root.loaded.updated.inFlight';\n } else if (!this.isValid) {\n return 'root.loaded.updated.invalid';\n } else if (this.isDirty) {\n return 'root.loaded.updated.uncommitted';\n\n // if nothing remains, we are loaded saved!\n } else {\n return 'root.loaded.saved';\n }\n }\n get dirtyType() {\n // we might be empty while loading so check this first\n if (this.isLoading || this.isEmpty) {\n return '';\n\n // deleted substates\n } else if (this.isDirty && this.isDeleted) {\n return 'deleted';\n\n // loaded.created substates\n } else if (this.isNew) {\n return 'created';\n\n // loaded.updated substates\n } else if (this.isSaving || !this.isValid || this.isDirty) {\n return 'updated';\n\n // if nothing remains, we are loaded saved!\n } else {\n return '';\n }\n }\n}, (_applyDecoratedDescriptor(_class$1.prototype, \"isLoading\", [tagged], Object.getOwnPropertyDescriptor(_class$1.prototype, \"isLoading\"), _class$1.prototype), _applyDecoratedDescriptor(_class$1.prototype, \"isLoaded\", [tagged], Object.getOwnPropertyDescriptor(_class$1.prototype, \"isLoaded\"), _class$1.prototype), _applyDecoratedDescriptor(_class$1.prototype, \"isSaved\", [tagged], Object.getOwnPropertyDescriptor(_class$1.prototype, \"isSaved\"), _class$1.prototype), _applyDecoratedDescriptor(_class$1.prototype, \"isEmpty\", [tagged], Object.getOwnPropertyDescriptor(_class$1.prototype, \"isEmpty\"), _class$1.prototype), _applyDecoratedDescriptor(_class$1.prototype, \"isNew\", [tagged], Object.getOwnPropertyDescriptor(_class$1.prototype, \"isNew\"), _class$1.prototype), _applyDecoratedDescriptor(_class$1.prototype, \"isDeleted\", [tagged], Object.getOwnPropertyDescriptor(_class$1.prototype, \"isDeleted\"), _class$1.prototype), _applyDecoratedDescriptor(_class$1.prototype, \"isValid\", [tagged], Object.getOwnPropertyDescriptor(_class$1.prototype, \"isValid\"), _class$1.prototype), _applyDecoratedDescriptor(_class$1.prototype, \"isDirty\", [tagged], Object.getOwnPropertyDescriptor(_class$1.prototype, \"isDirty\"), _class$1.prototype), _applyDecoratedDescriptor(_class$1.prototype, \"isError\", [tagged], Object.getOwnPropertyDescriptor(_class$1.prototype, \"isError\"), _class$1.prototype), _applyDecoratedDescriptor(_class$1.prototype, \"adapterError\", [tagged], Object.getOwnPropertyDescriptor(_class$1.prototype, \"adapterError\"), _class$1.prototype), _applyDecoratedDescriptor(_class$1.prototype, \"isPreloaded\", [cached], Object.getOwnPropertyDescriptor(_class$1.prototype, \"isPreloaded\"), _class$1.prototype), _applyDecoratedDescriptor(_class$1.prototype, \"stateName\", [cached], Object.getOwnPropertyDescriptor(_class$1.prototype, \"stateName\"), _class$1.prototype), _applyDecoratedDescriptor(_class$1.prototype, \"dirtyType\", [cached], Object.getOwnPropertyDescriptor(_class$1.prototype, \"dirtyType\"), _class$1.prototype)), _class$1);\ndefineSignal(RecordState.prototype, 'isSaving', false);\nfunction notifyErrorsStateChanged(state) {\n state.notify('isValid');\n state.notify('isError');\n state.notify('adapterError');\n}\nvar _class, _class2;\nfunction findPossibleInverses(type, inverseType, name, relationshipsSoFar) {\n const possibleRelationships = relationshipsSoFar || [];\n const relationshipMap = inverseType.relationships;\n if (!relationshipMap) {\n return possibleRelationships;\n }\n const relationshipsForType = relationshipMap.get(type.modelName);\n const relationships = Array.isArray(relationshipsForType) ? relationshipsForType.filter(relationship => {\n const optionsForRelationship = relationship.options;\n if (!optionsForRelationship.inverse && optionsForRelationship.inverse !== null) {\n return true;\n }\n return name === optionsForRelationship.inverse;\n }) : null;\n if (relationships) {\n possibleRelationships.push.apply(possibleRelationships, relationships);\n }\n\n //Recurse to support polymorphism\n if (type.superclass) {\n findPossibleInverses(type.superclass, inverseType, name, possibleRelationships);\n }\n return possibleRelationships;\n}\n\n/*\n * This decorator allows us to lazily compute\n * an expensive getter on first-access and thereafter\n * never recompute it.\n */\nfunction computeOnce(target, propertyName, desc) {\n const cache = new WeakMap();\n const getter = desc.get;\n desc.get = function () {\n let meta = cache.get(this);\n if (!meta) {\n meta = {\n hasComputed: false,\n value: undefined\n };\n cache.set(this, meta);\n }\n if (!meta.hasComputed) {\n meta.value = getter.call(this);\n meta.hasComputed = true;\n }\n return meta.value;\n };\n return desc;\n}\n\n/**\n Base class from which Models can be defined.\n\n ```js\n import Model, { attr } from '@ember-data/model';\n\n export default class User extends Model {\n @attr name;\n }\n ```\n\n Models are used both to define the static schema for a\n particular resource type as well as the class to instantiate\n to present that data from cache.\n\n @class Model\n @public\n @extends Ember.EmberObject\n*/\nlet Model = (_class = (_class2 = class Model extends EmberObject {\n constructor(...args) {\n super(...args);\n this.___private_notifications = void 0;\n }\n init(options = {}) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (!options._secretInit && !options._createProps) {\n throw new Error('You should not call `create` on a model. Instead, call `store.createRecord` with the attributes you would like to set.');\n }\n }\n const createProps = options._createProps;\n const _secretInit = options._secretInit;\n options._createProps = null;\n options._secretInit = null;\n const store = this.store = _secretInit.store;\n super.init(options);\n this[RecordStore] = store;\n const identity = _secretInit.identifier;\n _secretInit.cb(this, _secretInit.cache, identity, _secretInit.store);\n this.___recordState = macroCondition(getOwnConfig().env.DEBUG) ? new RecordState(this) : null;\n this.setProperties(createProps);\n const notifications = store.notifications;\n this.___private_notifications = notifications.subscribe(identity, (identifier, type, field) => {\n notifyChanges(identifier, type, field, this, store);\n });\n }\n destroy() {\n const identifier = recordIdentifierFor$1(this);\n this.___recordState?.destroy();\n const store = storeFor$1(this);\n store.notifications.unsubscribe(this.___private_notifications);\n // Legacy behavior is to notify the relationships on destroy\n // such that they \"clear\". It's uncertain this behavior would\n // be good for a new model paradigm, likely cheaper and safer\n // to simply not notify, for this reason the store does not itself\n // notify individual changes once the delete has been signaled,\n // this decision is left to model instances.\n\n this.eachRelationship((name, meta) => {\n if (meta.kind === 'belongsTo') {\n this.notifyPropertyChange(name);\n }\n });\n LEGACY_SUPPORT.get(this)?.destroy();\n LEGACY_SUPPORT.delete(this);\n LEGACY_SUPPORT.delete(identifier);\n super.destroy();\n }\n\n /**\n If this property is `true` the record is in the `empty`\n state. Empty is the first state all records enter after they have\n been created. Most records created by the store will quickly\n transition to the `loading` state if data needs to be fetched from\n the server or the `created` state if the record is created on the\n client. A record can also enter the empty state if the adapter is\n unable to locate the record.\n @property isEmpty\n @public\n @type {Boolean}\n @readOnly\n */\n get isEmpty() {\n return this.currentState.isEmpty;\n }\n\n /**\n If this property is `true` the record is in the `loading` state. A\n record enters this state when the store asks the adapter for its\n data. It remains in this state until the adapter provides the\n requested data.\n @property isLoading\n @public\n @type {Boolean}\n @readOnly\n */\n get isLoading() {\n return this.currentState.isLoading;\n }\n\n /**\n If this property is `true` the record is in the `loaded` state. A\n record enters this state when its data is populated. Most of a\n record's lifecycle is spent inside substates of the `loaded`\n state.\n Example\n ```javascript\n let record = store.createRecord('model');\n record.isLoaded; // true\n store.findRecord('model', 1).then(function(model) {\n model.isLoaded; // true\n });\n ```\n @property isLoaded\n @public\n @type {Boolean}\n @readOnly\n */\n get isLoaded() {\n return this.currentState.isLoaded;\n }\n\n /**\n If this property is `true` the record is in the `dirty` state. The\n record has local changes that have not yet been saved by the\n adapter. This includes records that have been created (but not yet\n saved) or deleted.\n Example\n ```javascript\n let record = store.createRecord('model');\n record.hasDirtyAttributes; // true\n store.findRecord('model', 1).then(function(model) {\n model.hasDirtyAttributes; // false\n model.set('foo', 'some value');\n model.hasDirtyAttributes; // true\n });\n ```\n @since 1.13.0\n @property hasDirtyAttributes\n @public\n @type {Boolean}\n @readOnly\n */\n get hasDirtyAttributes() {\n return this.currentState.isDirty;\n }\n\n /**\n If this property is `true` the record is in the `saving` state. A\n record enters the saving state when `save` is called, but the\n adapter has not yet acknowledged that the changes have been\n persisted to the backend.\n Example\n ```javascript\n let record = store.createRecord('model');\n record.isSaving; // false\n let promise = record.save();\n record.isSaving; // true\n promise.then(function() {\n record.isSaving; // false\n });\n ```\n @property isSaving\n @public\n @type {Boolean}\n @readOnly\n */\n get isSaving() {\n return this.currentState.isSaving;\n }\n\n /**\n If this property is `true` the record is in the `deleted` state\n and has been marked for deletion. When `isDeleted` is true and\n `hasDirtyAttributes` is true, the record is deleted locally but the deletion\n was not yet persisted. When `isSaving` is true, the change is\n in-flight. When both `hasDirtyAttributes` and `isSaving` are false, the\n change has persisted.\n Example\n ```javascript\n let record = store.createRecord('model');\n record.isDeleted; // false\n record.deleteRecord();\n // Locally deleted\n record.isDeleted; // true\n record.hasDirtyAttributes; // true\n record.isSaving; // false\n // Persisting the deletion\n let promise = record.save();\n record.isDeleted; // true\n record.isSaving; // true\n // Deletion Persisted\n promise.then(function() {\n record.isDeleted; // true\n record.isSaving; // false\n record.hasDirtyAttributes; // false\n });\n ```\n @property isDeleted\n @public\n @type {Boolean}\n @readOnly\n */\n get isDeleted() {\n return this.currentState.isDeleted;\n }\n\n /**\n If this property is `true` the record is in the `new` state. A\n record will be in the `new` state when it has been created on the\n client and the adapter has not yet report that it was successfully\n saved.\n Example\n ```javascript\n let record = store.createRecord('model');\n record.isNew; // true\n record.save().then(function(model) {\n model.isNew; // false\n });\n ```\n @property isNew\n @public\n @type {Boolean}\n @readOnly\n */\n get isNew() {\n return this.currentState.isNew;\n }\n\n /**\n If this property is `true` the record is in the `valid` state.\n A record will be in the `valid` state when the adapter did not report any\n server-side validation failures.\n @property isValid\n @public\n @type {Boolean}\n @readOnly\n */\n get isValid() {\n return this.currentState.isValid;\n }\n\n /**\n If the record is in the dirty state this property will report what\n kind of change has caused it to move into the dirty\n state. Possible values are:\n - `created` The record has been created by the client and not yet saved to the adapter.\n - `updated` The record has been updated by the client and not yet saved to the adapter.\n - `deleted` The record has been deleted by the client and not yet saved to the adapter.\n Example\n ```javascript\n let record = store.createRecord('model');\n record.dirtyType; // 'created'\n ```\n @property dirtyType\n @public\n @type {String}\n @readOnly\n */\n get dirtyType() {\n return this.currentState.dirtyType;\n }\n\n /**\n If `true` the adapter reported that it was unable to save local\n changes to the backend for any reason other than a server-side\n validation error.\n Example\n ```javascript\n record.isError; // false\n record.set('foo', 'valid value');\n record.save().then(null, function() {\n record.isError; // true\n });\n ```\n @property isError\n @public\n @type {Boolean}\n @readOnly\n */\n get isError() {\n return this.currentState.isError;\n }\n set isError(v) {\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n throw new Error(`isError is not directly settable`);\n }\n }\n\n /**\n If `true` the store is attempting to reload the record from the adapter.\n Example\n ```javascript\n record.isReloading; // false\n record.reload();\n record.isReloading; // true\n ```\n @property isReloading\n @public\n @type {Boolean}\n @readOnly\n */\n\n /**\n All ember models have an id property. This is an identifier\n managed by an external source. These are always coerced to be\n strings before being used internally. Note when declaring the\n attributes for a model it is an error to declare an id\n attribute.\n ```javascript\n let record = store.createRecord('model');\n record.id; // null\n store.findRecord('model', 1).then(function(model) {\n model.id; // '1'\n });\n ```\n @property id\n @public\n @type {String}\n */\n get id() {\n // this guard exists, because some dev-only deprecation code\n // (addListener via validatePropertyInjections) invokes toString before the\n // object is real.\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n try {\n return recordIdentifierFor$1(this).id;\n } catch {\n return void 0;\n }\n }\n return recordIdentifierFor$1(this).id;\n }\n set id(id) {\n const normalizedId = coerceId(id);\n const identifier = recordIdentifierFor$1(this);\n const didChange = normalizedId !== identifier.id;\n assert(`Cannot set ${identifier.type} record's id to ${id}, because id is already ${identifier.id}`, !didChange || identifier.id === null);\n if (normalizedId !== null && didChange) {\n this.store._instanceCache.setRecordId(identifier, normalizedId);\n this.store.notifications.notify(identifier, 'identity');\n }\n }\n toString() {\n return ``;\n }\n\n /**\n @property currentState\n @private\n @type {Object}\n */\n // TODO we can probably make this a computeOnce\n // we likely do not need to notify the currentState root anymore\n get currentState() {\n // descriptors are called with the wrong `this` context during mergeMixins\n // when using legacy/classic ember classes. Basically: lazy in prod and eager in dev.\n // so we do this to try to steer folks to the nicer \"dont user currentState\"\n // error.\n if (macroCondition(!getOwnConfig().env.DEBUG)) {\n if (!this.___recordState) {\n this.___recordState = new RecordState(this);\n }\n }\n return this.___recordState;\n }\n set currentState(_v) {\n throw new Error('cannot set currentState');\n }\n\n /**\n The store service instance which created this record instance\n @property store\n @public\n */\n\n /**\n When the record is in the `invalid` state this object will contain\n any errors returned by the adapter. When present the errors hash\n contains keys corresponding to the invalid property names\n and values which are arrays of Javascript objects with two keys:\n - `message` A string containing the error message from the backend\n - `attribute` The name of the property associated with this error message\n ```javascript\n record.errors.length; // 0\n record.set('foo', 'invalid value');\n record.save().catch(function() {\n record.errors.foo;\n // [{message: 'foo should be a number.', attribute: 'foo'}]\n });\n ```\n The `errors` property is useful for displaying error messages to\n the user.\n ```handlebars\n \n {{#each @model.errors.username as |error|}}\n
\n {{error.message}}\n
\n {{/each}}\n \n {{#each @model.errors.email as |error|}}\n
\n {{error.message}}\n
\n {{/each}}\n ```\n You can also access the special `messages` property on the error\n object to get an array of all the error strings.\n ```handlebars\n {{#each @model.errors.messages as |message|}}\n
\n {{message}}\n
\n {{/each}}\n ```\n @property errors\n @public\n @type {Errors}\n */\n get errors() {\n const errors = Errors.create({\n __record: this\n });\n this.currentState.updateInvalidErrors(errors);\n return errors;\n }\n\n /**\n This property holds the `AdapterError` object with which\n last adapter operation was rejected.\n @property adapterError\n @public\n @type {AdapterError}\n */\n get adapterError() {\n return this.currentState.adapterError;\n }\n set adapterError(v) {\n throw new Error(`adapterError is not directly settable`);\n }\n\n /**\n Create a JSON representation of the record, using the serialization\n strategy of the store's adapter.\n `serialize` takes an optional hash as a parameter, currently\n supported options are:\n - `includeId`: `true` if the record's ID should be included in the\n JSON representation.\n @method serialize\n @public\n @param {Object} options\n @return {Object} an object whose values are primitive JSON values only\n */\n\n /*\n We hook the default implementation to ensure\n our tagged properties are properly notified\n as well. We still super for everything because\n sync observers require a direct call occuring\n to trigger their flush. We wouldn't need to\n super in 4.0+ where sync observers are removed.\n */\n notifyPropertyChange(prop) {\n notifySignal(this, prop);\n super.notifyPropertyChange(prop);\n }\n\n /**\n Marks the record as deleted but does not save it. You must call\n `save` afterwards if you want to persist it. You might use this\n method if you want to allow the user to still `rollbackAttributes()`\n after a delete was made.\n Example\n ```js\n import Component from '@glimmer/component';\n export default class extends Component {\n softDelete = () => {\n this.args.model.deleteRecord();\n }\n confirm = () => {\n this.args.model.save();\n }\n undo = () => {\n this.args.model.rollbackAttributes();\n }\n }\n ```\n @method deleteRecord\n @public\n */\n\n /**\n Same as `deleteRecord`, but saves the record immediately.\n Example\n ```js\n import Component from '@glimmer/component';\n export default class extends Component {\n delete = () => {\n this.args.model.destroyRecord().then(function() {\n this.transitionToRoute('model.index');\n });\n }\n }\n ```\n If you pass an object on the `adapterOptions` property of the options\n argument it will be passed to your adapter via the snapshot\n ```js\n record.destroyRecord({ adapterOptions: { subscribe: false } });\n ```\n ```app/adapters/post.js\n import MyCustomAdapter from './custom-adapter';\n export default class PostAdapter extends MyCustomAdapter {\n deleteRecord(store, type, snapshot) {\n if (snapshot.adapterOptions.subscribe) {\n // ...\n }\n // ...\n }\n }\n ```\n @method destroyRecord\n @public\n @param {Object} options\n @return {Promise} a promise that will be resolved when the adapter returns\n successfully or rejected if the adapter returns with an error.\n */\n\n /**\n Unloads the record from the store. This will not send a delete request\n to your server, it just unloads the record from memory.\n @method unloadRecord\n @public\n */\n\n /**\n Returns an object, whose keys are changed properties, and value is\n an [oldProp, newProp] array.\n The array represents the diff of the canonical state with the local state\n of the model. Note: if the model is created locally, the canonical state is\n empty since the adapter hasn't acknowledged the attributes yet:\n Example\n ```app/models/mascot.js\n import Model, { attr } from '@ember-data/model';\n export default class MascotModel extends Model {\n @attr('string') name;\n @attr('boolean', {\n defaultValue: false\n })\n isAdmin;\n }\n ```\n ```javascript\n let mascot = store.createRecord('mascot');\n mascot.changedAttributes(); // {}\n mascot.set('name', 'Tomster');\n mascot.changedAttributes(); // { name: [undefined, 'Tomster'] }\n mascot.set('isAdmin', true);\n mascot.changedAttributes(); // { isAdmin: [undefined, true], name: [undefined, 'Tomster'] }\n mascot.save().then(function() {\n mascot.changedAttributes(); // {}\n mascot.set('isAdmin', false);\n mascot.changedAttributes(); // { isAdmin: [true, false] }\n });\n ```\n @method changedAttributes\n @public\n @return {Object} an object, whose keys are changed properties,\n and value is an [oldProp, newProp] array.\n */\n\n /**\n If the model `hasDirtyAttributes` this function will discard any unsaved\n changes. If the model `isNew` it will be removed from the store.\n Example\n ```javascript\n record.name; // 'Untitled Document'\n record.set('name', 'Doc 1');\n record.name; // 'Doc 1'\n record.rollbackAttributes();\n record.name; // 'Untitled Document'\n ```\n @since 1.13.0\n @method rollbackAttributes\n @public\n */\n\n /**\n @method _createSnapshot\n @private\n */\n // TODO @deprecate in favor of a public API or examples of how to test successfully\n\n /**\n Save the record and persist any changes to the record to an\n external source via the adapter.\n Example\n ```javascript\n record.set('name', 'Tomster');\n record.save().then(function() {\n // Success callback\n }, function() {\n // Error callback\n });\n ```\n If you pass an object using the `adapterOptions` property of the options\n argument it will be passed to your adapter via the snapshot.\n ```js\n record.save({ adapterOptions: { subscribe: false } });\n ```\n ```app/adapters/post.js\n import MyCustomAdapter from './custom-adapter';\n export default class PostAdapter extends MyCustomAdapter {\n updateRecord(store, type, snapshot) {\n if (snapshot.adapterOptions.subscribe) {\n // ...\n }\n // ...\n }\n }\n ```\n @method save\n @public\n @param {Object} options\n @return {Promise} a promise that will be resolved when the adapter returns\n successfully or rejected if the adapter returns with an error.\n */\n\n /**\n Reload the record from the adapter.\n This will only work if the record has already finished loading.\n Example\n ```js\n import Component from '@glimmer/component';\n export default class extends Component {\n async reload = () => {\n await this.args.model.reload();\n // do something with the reloaded model\n }\n }\n ```\n @method reload\n @public\n @param {Object} options optional, may include `adapterOptions` hash which will be passed to adapter request\n @return {Promise} a promise that will be resolved with the record when the\n adapter returns successfully or rejected if the adapter returns\n with an error.\n */\n\n attr() {\n assert('The `attr` method is not available on Model, a Snapshot was probably expected. Are you passing a Model instead of a Snapshot to your serializer?', false);\n }\n\n /**\n Get the reference for the specified belongsTo relationship.\n For instance, given the following model\n ```app/models/blog-post.js\n import Model, { belongsTo } from '@ember-data/model';\n export default class BlogPost extends Model {\n @belongsTo('user', { async: true, inverse: null }) author;\n }\n ```\n Then the reference for the author relationship would be\n retrieved from a record instance like so:\n ```js\n blogPost.belongsTo('author');\n ```\n A `BelongsToReference` is a low-level API that allows access\n and manipulation of a belongsTo relationship.\n It is especially useful when you're dealing with `async` relationships\n as it allows synchronous access to the relationship data if loaded, as\n well as APIs for loading, reloading the data or accessing available\n information without triggering a load.\n It may also be useful when using `sync` relationships that need to be\n loaded/reloaded with more precise timing than marking the\n relationship as `async` and relying on autofetch would have allowed.\n However,keep in mind that marking a relationship as `async: false` will introduce\n bugs into your application if the data is not always guaranteed to be available\n by the time the relationship is accessed. Ergo, it is recommended when using this\n approach to utilize `links` for unloaded relationship state instead of identifiers.\n Reference APIs are entangled with the relationship's underlying state,\n thus any getters or cached properties that utilize these will properly\n invalidate if the relationship state changes.\n References are \"stable\", meaning that multiple calls to retrieve the reference\n for a given relationship will always return the same HasManyReference.\n @method belongsTo\n @public\n @param {String} name of the relationship\n @since 2.5.0\n @return {BelongsToReference} reference for this relationship\n */\n\n /**\n Get the reference for the specified hasMany relationship.\n For instance, given the following model\n ```app/models/blog-post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class BlogPost extends Model {\n @hasMany('comment', { async: true, inverse: null }) comments;\n }\n ```\n Then the reference for the comments relationship would be\n retrieved from a record instance like so:\n ```js\n blogPost.hasMany('comments');\n ```\n A `HasManyReference` is a low-level API that allows access\n and manipulation of a hasMany relationship.\n It is especially useful when you are dealing with `async` relationships\n as it allows synchronous access to the relationship data if loaded, as\n well as APIs for loading, reloading the data or accessing available\n information without triggering a load.\n It may also be useful when using `sync` relationships with `@ember-data/model`\n that need to be loaded/reloaded with more precise timing than marking the\n relationship as `async` and relying on autofetch would have allowed.\n However,keep in mind that marking a relationship as `async: false` will introduce\n bugs into your application if the data is not always guaranteed to be available\n by the time the relationship is accessed. Ergo, it is recommended when using this\n approach to utilize `links` for unloaded relationship state instead of identifiers.\n Reference APIs are entangled with the relationship's underlying state,\n thus any getters or cached properties that utilize these will properly\n invalidate if the relationship state changes.\n References are \"stable\", meaning that multiple calls to retrieve the reference\n for a given relationship will always return the same HasManyReference.\n @method hasMany\n @public\n @param {String} name of the relationship\n @since 2.5.0\n @return {HasManyReference} reference for this relationship\n */\n\n /**\n Given a callback, iterates over each of the relationships in the model,\n invoking the callback with the name of each relationship and its relationship\n descriptor.\n The callback method you provide should have the following signature (all\n parameters are optional):\n ```javascript\n function(name, descriptor);\n ```\n - `name` the name of the current property in the iteration\n - `descriptor` the meta object that describes this relationship\n The relationship descriptor argument is an object with the following properties.\n - **name** String the name of this relationship on the Model\n - **kind** String \"hasMany\" or \"belongsTo\"\n - **options** Object the original options hash passed when the relationship was declared\n - **parentType** Model the type of the Model that owns this relationship\n - **type** String the type name of the related Model\n Note that in addition to a callback, you can also pass an optional target\n object that will be set as `this` on the context.\n Example\n ```app/serializers/application.js\n import JSONSerializer from '@ember-data/serializer/json';\n export default class ApplicationSerializer extends JSONSerializer {\n serialize(record, options) {\n let json = {};\n record.eachRelationship(function(name, descriptor) {\n if (descriptor.kind === 'hasMany') {\n let serializedHasManyName = name.toUpperCase() + '_IDS';\n json[serializedHasManyName] = record.get(name).map(r => r.id);\n }\n });\n return json;\n }\n }\n ```\n @method eachRelationship\n @public\n @param {Function} callback the callback to invoke\n @param {any} binding the value to which the callback's `this` should be bound\n */\n eachRelationship(callback, binding) {\n this.constructor.eachRelationship(callback, binding);\n }\n relationshipFor(name) {\n return this.constructor.relationshipsByName.get(name);\n }\n inverseFor(name) {\n return this.constructor.inverseFor(name, storeFor$1(this));\n }\n eachAttribute(callback, binding) {\n this.constructor.eachAttribute(callback, binding);\n }\n /*\n These class methods below provide relationship\n introspection abilities about relationships.\n A note about the computed properties contained here:\n **These properties are effectively sealed once called for the first time.**\n To avoid repeatedly doing expensive iteration over a model's fields, these\n values are computed once and then cached for the remainder of the runtime of\n your application.\n If your application needs to modify a class after its initial definition\n (for example, using `reopen()` to add additional attributes), make sure you\n do it before using your model with the store, which uses these properties\n extensively.\n */\n\n /**\n For a given relationship name, returns the model type of the relationship.\n For example, if you define a model like this:\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany('comment') comments;\n }\n ```\n Calling `store.modelFor('post').typeForRelationship('comments', store)` will return `Comment`.\n @method typeForRelationship\n @public\n @static\n @param {String} name the name of the relationship\n @param {store} store an instance of Store\n @return {Model} the type of the relationship, or undefined\n */\n static typeForRelationship(name, store) {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n const relationship = this.relationshipsByName.get(name);\n return relationship && store.modelFor(relationship.type);\n }\n static get inverseMap() {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n return Object.create(null);\n }\n\n /**\n Find the relationship which is the inverse of the one asked for.\n For example, if you define models like this:\n ```app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n export default class PostModel extends Model {\n @hasMany('message') comments;\n }\n ```\n ```app/models/message.js\n import Model, { belongsTo } from '@ember-data/model';\n export default class MessageModel extends Model {\n @belongsTo('post') owner;\n }\n ```\n ``` js\n store.modelFor('post').inverseFor('comments', store) // { type: App.Message, name: 'owner', kind: 'belongsTo' }\n store.modelFor('message').inverseFor('owner', store) // { type: App.Post, name: 'comments', kind: 'hasMany' }\n ```\n @method inverseFor\n @public\n @static\n @param {String} name the name of the relationship\n @param {Store} store\n @return {Object} the inverse relationship, or null\n */\n static inverseFor(name, store) {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n const inverseMap = this.inverseMap;\n if (inverseMap[name]) {\n return inverseMap[name];\n } else {\n const inverse = this._findInverseFor(name, store);\n inverseMap[name] = inverse;\n return inverse;\n }\n }\n\n //Calculate the inverse, ignoring the cache\n static _findInverseFor(name, store) {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n const relationship = this.relationshipsByName.get(name);\n const {\n options\n } = relationship;\n const isPolymorphic = options.polymorphic;\n\n //If inverse is manually specified to be null, like `comments: hasMany('message', { inverse: null })`\n const isExplicitInverseNull = options.inverse === null;\n const isAbstractType = !isExplicitInverseNull && isPolymorphic && !store.getSchemaDefinitionService().doesTypeExist(relationship.type);\n if (isExplicitInverseNull || isAbstractType) {\n assert(`No schema for the abstract type '${relationship.type}' for the polymorphic relationship '${name}' on '${this.modelName}' was provided by the SchemaDefinitionService.`, !isPolymorphic || isExplicitInverseNull);\n return null;\n }\n let fieldOnInverse, inverseKind, inverseRelationship, inverseOptions;\n const inverseSchema = this.typeForRelationship(name, store);\n\n // if the type does not exist and we are not polymorphic\n //If inverse is specified manually, return the inverse\n if (options.inverse !== undefined) {\n fieldOnInverse = options.inverse;\n inverseRelationship = inverseSchema && inverseSchema.relationshipsByName.get(fieldOnInverse);\n assert(`We found no field named '${fieldOnInverse}' on the schema for '${inverseSchema.modelName}' to be the inverse of the '${name}' relationship on '${this.modelName}'. This is most likely due to a missing field on your model definition.`, inverseRelationship);\n\n // TODO probably just return the whole inverse here\n inverseKind = inverseRelationship.kind;\n inverseOptions = inverseRelationship.options;\n } else {\n //No inverse was specified manually, we need to use a heuristic to guess one\n if (relationship.type === relationship.parentModelName) {\n warn(`Detected a reflexive relationship named '${name}' on the schema for '${relationship.type}' without an inverse option. Look at https://guides.emberjs.com/current/models/relationships/#toc_reflexive-relations for how to explicitly specify inverses.`, false, {\n id: 'ds.model.reflexive-relationship-without-inverse'\n });\n }\n let possibleRelationships = findPossibleInverses(this, inverseSchema, name);\n if (possibleRelationships.length === 0) {\n return null;\n }\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n const filteredRelationships = possibleRelationships.filter(possibleRelationship => {\n const optionsForRelationship = possibleRelationship.options;\n return name === optionsForRelationship.inverse;\n });\n assert(\"You defined the '\" + name + \"' relationship on \" + this + ', but you defined the inverse relationships of type ' + inverseSchema.toString() + ' multiple times. Look at https://guides.emberjs.com/current/models/relationships/#toc_explicit-inverses for how to explicitly specify inverses', filteredRelationships.length < 2);\n }\n const explicitRelationship = possibleRelationships.find(relationship => relationship.options.inverse === name);\n if (explicitRelationship) {\n possibleRelationships = [explicitRelationship];\n }\n assert(\"You defined the '\" + name + \"' relationship on \" + this + ', but multiple possible inverse relationships of type ' + this + ' were found on ' + inverseSchema + '. Look at https://guides.emberjs.com/current/models/relationships/#toc_explicit-inverses for how to explicitly specify inverses', possibleRelationships.length === 1);\n fieldOnInverse = possibleRelationships[0].name;\n inverseKind = possibleRelationships[0].kind;\n inverseOptions = possibleRelationships[0].options;\n }\n\n // ensure inverse is properly configured\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (isPolymorphic) {\n assert(`Relationships that satisfy polymorphic relationships MUST define which abstract-type they are satisfying using 'as'. The field '${fieldOnInverse}' on type '${inverseSchema.modelName}' is misconfigured.`, inverseOptions.as);\n assert(`options.as should match the expected type of the polymorphic relationship. Expected field '${fieldOnInverse}' on type '${inverseSchema.modelName}' to specify '${relationship.type}' but found '${inverseOptions.as}'`, !!inverseOptions.as && relationship.type === inverseOptions.as);\n }\n }\n\n // ensure we are properly configured\n if (macroCondition(getOwnConfig().env.DEBUG)) {\n if (inverseOptions.polymorphic) {\n assert(`Relationships that satisfy polymorphic relationships MUST define which abstract-type they are satisfying using 'as'. The field '${name}' on type '${this.modelName}' is misconfigured.`, options.as);\n assert(`options.as should match the expected type of the polymorphic relationship. Expected field '${name}' on type '${this.modelName}' to specify '${inverseRelationship.type}' but found '${options.as}'`, !!options.as && inverseRelationship.type === options.as);\n }\n }\n assert(`The ${inverseSchema.modelName}:${fieldOnInverse} relationship declares 'inverse: null', but it was resolved as the inverse for ${this.modelName}:${name}.`, inverseOptions.inverse !== null);\n return {\n type: inverseSchema,\n name: fieldOnInverse,\n kind: inverseKind,\n options: inverseOptions\n };\n }\n\n /**\n The model's relationships as a map, keyed on the type of the\n relationship. The value of each entry is an array containing a descriptor\n for each relationship with that type, describing the name of the relationship\n as well as the type.\n For example, given the following model definition:\n ```app/models/blog.js\n import Model, { belongsTo, hasMany } from '@ember-data/model';\n export default class BlogModel extends Model {\n @hasMany('user') users;\n @belongsTo('user') owner;\n @hasMany('post') posts;\n }\n ```\n This computed property would return a map describing these\n relationships, like this:\n ```javascript\n import Blog from 'app/models/blog';\n import User from 'app/models/user';\n import Post from 'app/models/post';\n let relationships = Blog.relationships;\n relationships.user;\n //=> [ { name: 'users', kind: 'hasMany' },\n // { name: 'owner', kind: 'belongsTo' } ]\n relationships.post;\n //=> [ { name: 'posts', kind: 'hasMany' } ]\n ```\n @property relationships\n @public\n @static\n @type Map\n @readOnly\n */\n\n static get relationships() {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n const map = new Map();\n const relationshipsByName = this.relationshipsByName;\n\n // Loop through each computed property on the class\n relationshipsByName.forEach(desc => {\n const {\n type\n } = desc;\n if (!map.has(type)) {\n map.set(type, []);\n }\n map.get(type).push(desc);\n });\n return map;\n }\n\n /**\n A hash containing lists of the model's relationships, grouped\n by the relationship kind. For example, given a model with this\n definition:\n ```app/models/blog.js\n import Model, { belongsTo, hasMany } from '@ember-data/model';\n export default class BlogModel extends Model {\n @hasMany('user') users;\n @belongsTo('user') owner;\n @hasMany('post') posts;\n }\n ```\n This property would contain the following:\n ```javascript\n import Blog from 'app/models/blog';\n let relationshipNames = Blog.relationshipNames;\n relationshipNames.hasMany;\n //=> ['users', 'posts']\n relationshipNames.belongsTo;\n //=> ['owner']\n ```\n @property relationshipNames\n @public\n @static\n @type Object\n @readOnly\n */\n static get relationshipNames() {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n const names = {\n hasMany: [],\n belongsTo: []\n };\n this.eachComputedProperty((name, meta) => {\n if (meta.kind === 'hasMany' || meta.kind === 'belongsTo') {\n names[meta.kind].push(name);\n }\n });\n return names;\n }\n\n /**\n An array of types directly related to a model. Each type will be\n included once, regardless of the number of relationships it has with\n the model.\n For example, given a model with this definition:\n ```app/models/blog.js\n import Model, { belongsTo, hasMany } from '@ember-data/model';\n export default class BlogModel extends Model {\n @hasMany('user') users;\n @belongsTo('user') owner;\n @hasMany('post') posts;\n }\n ```\n This property would contain the following:\n ```javascript\n import Blog from 'app/models/blog';\n let relatedTypes = Blog.relatedTypes');\n //=> ['user', 'post']\n ```\n @property relatedTypes\n @public\n @static\n @type Array\n @readOnly\n */\n static get relatedTypes() {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n const types = [];\n const rels = this.relationshipsObject;\n const relationships = Object.keys(rels);\n\n // create an array of the unique types involved\n // in relationships\n for (let i = 0; i < relationships.length; i++) {\n const name = relationships[i];\n const meta = rels[name];\n const modelName = meta.type;\n if (types.indexOf(modelName) === -1) {\n types.push(modelName);\n }\n }\n return types;\n }\n\n /**\n A map whose keys are the relationships of a model and whose values are\n relationship descriptors.\n For example, given a model with this\n definition:\n ```app/models/blog.js\n import Model, { belongsTo, hasMany } from '@ember-data/model';\n export default class BlogModel extends Model {\n @hasMany('user') users;\n @belongsTo('user') owner;\n @hasMany('post') posts;\n }\n ```\n This property would contain the following:\n ```javascript\n import Blog from 'app/models/blog';\n let relationshipsByName = Blog.relationshipsByName;\n relationshipsByName.users;\n //=> { name: 'users', kind: 'hasMany', type: 'user', options: Object }\n relationshipsByName.owner;\n //=> { name: 'owner', kind: 'belongsTo', type: 'user', options: Object }\n ```\n @property relationshipsByName\n @public\n @static\n @type Map\n @readOnly\n */\n static get relationshipsByName() {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n const map = new Map();\n const rels = this.relationshipsObject;\n const relationships = Object.keys(rels);\n for (let i = 0; i < relationships.length; i++) {\n const name = relationships[i];\n const value = rels[name];\n map.set(value.name, value);\n }\n return map;\n }\n static get relationshipsObject() {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n const relationships = Object.create(null);\n const modelName = this.modelName;\n this.eachComputedProperty((name, meta) => {\n if (meta.kind === 'hasMany' || meta.kind === 'belongsTo') {\n // TODO deprecate key being here\n meta.key = name;\n meta.name = name;\n meta.parentModelName = modelName;\n relationships[name] = meta;\n assert(`You should not specify both options.as and options.inverse as null on ${modelName}.${meta.name}, as if there is no inverse field there is no abstract type to conform to. You may have intended for this relationship to be polymorphic, or you may have mistakenly set inverse to null.`, !(meta.options.inverse === null && meta.options.as?.length > 0));\n }\n });\n return relationships;\n }\n\n /**\n A map whose keys are the fields of the model and whose values are strings\n describing the kind of the field. A model's fields are the union of all of its\n attributes and relationships.\n For example:\n ```app/models/blog.js\n import Model, { attr, belongsTo, hasMany } from '@ember-data/model';\n export default class BlogModel extends Model {\n @hasMany('user') users;\n @belongsTo('user') owner;\n @hasMany('post') posts;\n @attr('string') title;\n }\n ```\n ```js\n import Blog from 'app/models/blog'\n let fields = Blog.fields;\n fields.forEach(function(kind, field) {\n // do thing\n });\n // prints:\n // users, hasMany\n // owner, belongsTo\n // posts, hasMany\n // title, attribute\n ```\n @property fields\n @public\n @static\n @type Map\n @readOnly\n */\n static get fields() {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n const map = new Map();\n this.eachComputedProperty((name, meta) => {\n if (meta.kind === 'hasMany' || meta.kind === 'belongsTo') {\n map.set(name, meta.kind);\n } else if (meta.kind === 'attribute') {\n map.set(name, 'attribute');\n }\n });\n return map;\n }\n\n /**\n Given a callback, iterates over each of the relationships in the model,\n invoking the callback with the name of each relationship and its relationship\n descriptor.\n @method eachRelationship\n @public\n @static\n @param {Function} callback the callback to invoke\n @param {any} binding the value to which the callback's `this` should be bound\n */\n static eachRelationship(callback, binding) {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n this.relationshipsByName.forEach((relationship, name) => {\n callback.call(binding, name, relationship);\n });\n }\n\n /**\n Given a callback, iterates over each of the types related to a model,\n invoking the callback with the related type's class. Each type will be\n returned just once, regardless of how many different relationships it has\n with a model.\n @method eachRelatedType\n @public\n @static\n @param {Function} callback the callback to invoke\n @param {any} binding the value to which the callback's `this` should be bound\n */\n static eachRelatedType(callback, binding) {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n const relationshipTypes = this.relatedTypes;\n for (let i = 0; i < relationshipTypes.length; i++) {\n const type = relationshipTypes[i];\n callback.call(binding, type);\n }\n }\n static determineRelationshipType(knownSide, store) {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n const knownKey = knownSide.name;\n const knownKind = knownSide.kind;\n const inverse = this.inverseFor(knownKey, store);\n // let key;\n\n if (!inverse) {\n return knownKind === 'belongsTo' ? 'oneToNone' : 'manyToNone';\n }\n\n // key = inverse.name;\n const otherKind = inverse.kind;\n if (otherKind === 'belongsTo') {\n return knownKind === 'belongsTo' ? 'oneToOne' : 'manyToOne';\n } else {\n return knownKind === 'belongsTo' ? 'oneToMany' : 'manyToMany';\n }\n }\n\n /**\n A map whose keys are the attributes of the model (properties\n described by attr) and whose values are the meta object for the\n property.\n Example\n ```app/models/person.js\n import Model, { attr } from '@ember-data/model';\n export default class PersonModel extends Model {\n @attr('string') firstName;\n @attr('string') lastName;\n @attr('date') birthday;\n }\n ```\n ```javascript\n import Person from 'app/models/person'\n let attributes = Person.attributes\n attributes.forEach(function(meta, name) {\n // do thing\n });\n // prints:\n // firstName {type: \"string\", kind: 'attribute', options: Object, parentType: function, name: \"firstName\"}\n // lastName {type: \"string\", kind: 'attribute', options: Object, parentType: function, name: \"lastName\"}\n // birthday {type: \"date\", kind: 'attribute', options: Object, parentType: function, name: \"birthday\"}\n ```\n @property attributes\n @public\n @static\n @type {Map}\n @readOnly\n */\n static get attributes() {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n const map = new Map();\n this.eachComputedProperty((name, meta) => {\n if (meta.kind === 'attribute') {\n assert(\"You may not set `id` as an attribute on your model. Please remove any lines that look like: `id: attr('')` from \" + this.toString(), name !== 'id');\n\n // TODO deprecate key being here\n meta.key = name;\n meta.name = name;\n map.set(name, meta);\n }\n });\n return map;\n }\n\n /**\n A map whose keys are the attributes of the model (properties\n described by attr) and whose values are type of transformation\n applied to each attribute. This map does not include any\n attributes that do not have an transformation type.\n Example\n ```app/models/person.js\n import Model, { attr } from '@ember-data/model';\n export default class PersonModel extends Model {\n @attr firstName;\n @attr('string') lastName;\n @attr('date') birthday;\n }\n ```\n ```javascript\n import Person from 'app/models/person';\n let transformedAttributes = Person.transformedAttributes\n transformedAttributes.forEach(function(field, type) {\n // do thing\n });\n // prints:\n // lastName string\n // birthday date\n ```\n @property transformedAttributes\n @public\n @static\n @type {Map}\n @readOnly\n */\n static get transformedAttributes() {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n const map = new Map();\n this.eachAttribute((name, meta) => {\n if (meta.type) {\n map.set(name, meta.type);\n }\n });\n return map;\n }\n\n /**\n Iterates through the attributes of the model, calling the passed function on each\n attribute.\n The callback method you provide should have the following signature (all\n parameters are optional):\n ```javascript\n function(name, meta);\n ```\n - `name` the name of the current property in the iteration\n - `meta` the meta object for the attribute property in the iteration\n Note that in addition to a callback, you can also pass an optional target\n object that will be set as `this` on the context.\n Example\n ```javascript\n import Model, { attr } from '@ember-data/model';\n class PersonModel extends Model {\n @attr('string') firstName;\n @attr('string') lastName;\n @attr('date') birthday;\n }\n PersonModel.eachAttribute(function(name, meta) {\n // do thing\n });\n // prints:\n // firstName {type: \"string\", kind: 'attribute', options: Object, parentType: function, name: \"firstName\"}\n // lastName {type: \"string\", kind: 'attribute', options: Object, parentType: function, name: \"lastName\"}\n // birthday {type: \"date\", kind: 'attribute', options: Object, parentType: function, name: \"birthday\"}\n ```\n @method eachAttribute\n @public\n @param {Function} callback The callback to execute\n @param {Object} [binding] the value to which the callback's `this` should be bound\n @static\n */\n static eachAttribute(callback, binding) {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n this.attributes.forEach((meta, name) => {\n callback.call(binding, name, meta);\n });\n }\n\n /**\n Iterates through the transformedAttributes of the model, calling\n the passed function on each attribute. Note the callback will not be\n called for any attributes that do not have an transformation type.\n The callback method you provide should have the following signature (all\n parameters are optional):\n ```javascript\n function(name, type);\n ```\n - `name` the name of the current property in the iteration\n - `type` a string containing the name of the type of transformed\n applied to the attribute\n Note that in addition to a callback, you can also pass an optional target\n object that will be set as `this` on the context.\n Example\n ```javascript\n import Model, { attr } from '@ember-data/model';\n let Person = Model.extend({\n firstName: attr(),\n lastName: attr('string'),\n birthday: attr('date')\n });\n Person.eachTransformedAttribute(function(name, type) {\n // do thing\n });\n // prints:\n // lastName string\n // birthday date\n ```\n @method eachTransformedAttribute\n @public\n @param {Function} callback The callback to execute\n @param {Object} [binding] the value to which the callback's `this` should be bound\n @static\n */\n static eachTransformedAttribute(callback, binding) {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n this.transformedAttributes.forEach((type, name) => {\n callback.call(binding, name, type);\n });\n }\n\n /**\n Returns the name of the model class.\n @method toString\n @public\n @static\n */\n static toString() {\n assert(`Accessing schema information on Models without looking up the model via the store is disallowed.`, this.modelName);\n return `model:${this.modelName}`;\n }\n}, _class2.isModel = true, _class2.modelName = null, _class2), (_applyDecoratedDescriptor(_class.prototype, \"isEmpty\", [compat], Object.getOwnPropertyDescriptor(_class.prototype, \"isEmpty\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isLoading\", [compat], Object.getOwnPropertyDescriptor(_class.prototype, \"isLoading\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isLoaded\", [compat], Object.getOwnPropertyDescriptor(_class.prototype, \"isLoaded\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"hasDirtyAttributes\", [compat], Object.getOwnPropertyDescriptor(_class.prototype, \"hasDirtyAttributes\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isSaving\", [compat], Object.getOwnPropertyDescriptor(_class.prototype, \"isSaving\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isDeleted\", [compat], Object.getOwnPropertyDescriptor(_class.prototype, \"isDeleted\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isNew\", [compat], Object.getOwnPropertyDescriptor(_class.prototype, \"isNew\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isValid\", [compat], Object.getOwnPropertyDescriptor(_class.prototype, \"isValid\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"dirtyType\", [compat], Object.getOwnPropertyDescriptor(_class.prototype, \"dirtyType\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"isError\", [compat], Object.getOwnPropertyDescriptor(_class.prototype, \"isError\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"id\", [tagged], Object.getOwnPropertyDescriptor(_class.prototype, \"id\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"currentState\", [tagged], Object.getOwnPropertyDescriptor(_class.prototype, \"currentState\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"errors\", [computeOnce], Object.getOwnPropertyDescriptor(_class.prototype, \"errors\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"adapterError\", [compat], Object.getOwnPropertyDescriptor(_class.prototype, \"adapterError\"), _class.prototype), _applyDecoratedDescriptor(_class, \"inverseMap\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"inverseMap\"), _class), _applyDecoratedDescriptor(_class, \"relationships\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"relationships\"), _class), _applyDecoratedDescriptor(_class, \"relationshipNames\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"relationshipNames\"), _class), _applyDecoratedDescriptor(_class, \"relatedTypes\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"relatedTypes\"), _class), _applyDecoratedDescriptor(_class, \"relationshipsByName\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"relationshipsByName\"), _class), _applyDecoratedDescriptor(_class, \"relationshipsObject\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"relationshipsObject\"), _class), _applyDecoratedDescriptor(_class, \"fields\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"fields\"), _class), _applyDecoratedDescriptor(_class, \"attributes\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"attributes\"), _class), _applyDecoratedDescriptor(_class, \"transformedAttributes\", [computeOnce], Object.getOwnPropertyDescriptor(_class, \"transformedAttributes\"), _class)), _class);\nModel.prototype.save = save;\nModel.prototype.destroyRecord = destroyRecord;\nModel.prototype.unloadRecord = unloadRecord;\nModel.prototype.hasMany = hasMany;\nModel.prototype.belongsTo = belongsTo;\nModel.prototype.serialize = serialize;\nModel.prototype._createSnapshot = createSnapshot;\nModel.prototype.deleteRecord = deleteRecord;\nModel.prototype.changedAttributes = changedAttributes;\nModel.prototype.rollbackAttributes = rollbackAttributes;\nModel.prototype.reload = reload;\ndefineSignal(Model.prototype, 'isReloading', false);\n\n// this is required to prevent `init` from passing\n// the values initialized during create to `setUnknownProperty`\nModel.prototype._createProps = null;\nModel.prototype._secretInit = null;\nif (macroCondition(getOwnConfig().includeDataAdapter)) {\n /**\n Provides info about the model for debugging purposes\n by grouping the properties into more semantic groups.\n Meant to be used by debugging tools such as the Chrome Ember Extension.\n - Groups all attributes in \"Attributes\" group.\n - Groups all belongsTo relationships in \"Belongs To\" group.\n - Groups all hasMany relationships in \"Has Many\" group.\n - Groups all flags in \"Flags\" group.\n - Flags relationship CPs as expensive properties.\n @method _debugInfo\n @for Model\n @private\n */\n Model.prototype._debugInfo = function () {\n const relationships = {};\n const expensiveProperties = [];\n const identifier = recordIdentifierFor$1(this);\n const schema = this.store.getSchemaDefinitionService();\n const attrDefs = schema.attributesDefinitionFor(identifier);\n const relDefs = schema.relationshipsDefinitionFor(identifier);\n const attributes = Object.keys(attrDefs);\n attributes.unshift('id');\n const groups = [{\n name: 'Attributes',\n properties: attributes,\n expand: true\n }];\n Object.keys(relDefs).forEach(name => {\n const relationship = relDefs[name];\n let properties = relationships[relationship.kind];\n if (properties === undefined) {\n properties = relationships[relationship.kind] = [];\n groups.push({\n name: relationship.kind,\n properties,\n expand: true\n });\n }\n properties.push(name);\n expensiveProperties.push(name);\n });\n groups.push({\n name: 'Flags',\n properties: ['isLoaded', 'hasDirtyAttributes', 'isSaving', 'isDeleted', 'isError', 'isNew', 'isValid']\n });\n return {\n propertyInfo: {\n // include all other mixins / properties (not just the grouped ones)\n includeOtherProperties: true,\n groups: groups,\n // don't pre-calculate unless cached\n expensiveProperties: expensiveProperties\n }\n };\n };\n}\nif (macroCondition(getOwnConfig().env.DEBUG)) {\n const lookupDescriptor = function lookupDescriptor(obj, keyName) {\n let current = obj;\n do {\n const descriptor = Object.getOwnPropertyDescriptor(current, keyName);\n if (descriptor !== undefined) {\n return descriptor;\n }\n current = Object.getPrototypeOf(current);\n } while (current !== null);\n return null;\n };\n Model.reopen({\n init() {\n this._super(...arguments);\n const ourDescriptor = lookupDescriptor(Model.prototype, 'currentState');\n const theirDescriptor = lookupDescriptor(this, 'currentState');\n const realState = this.___recordState;\n if (ourDescriptor.get !== theirDescriptor.get || realState !== this.currentState) {\n throw new Error(`'currentState' is a reserved property name on instances of classes extending Model. Please choose a different property name for ${this.constructor.toString()}`);\n }\n const ID_DESCRIPTOR = lookupDescriptor(Model.prototype, 'id');\n const idDesc = lookupDescriptor(this, 'id');\n if (idDesc.get !== ID_DESCRIPTOR.get) {\n throw new Error(`You may not set 'id' as an attribute on your model. Please remove any lines that look like: \\`id: attr('')\\` from ${this.constructor.toString()}`);\n }\n }\n });\n Model.reopen = function deprecatedReopen() {\n assert(`Model.reopen is deprecated. Use Foo extends Model to extend your class instead.`);\n };\n Model.reopenClass = function deprecatedReopenClass() {\n assert(`Model.reopenClass is deprecated. Use Foo extends Model to add static methods and properties to your class instead.`);\n };\n}\nexport { Errors as E, LEGACY_SUPPORT as L, Model as M, PromiseBelongsTo as P, RelatedCollection as R, PromiseManyArray as a, save as b, reload as c, destroyRecord as d, deleteRecord as e, RecordState as f, changedAttributes as g, hasMany as h, belongsTo as i, createSnapshot as j, lookupLegacySupport as l, rollbackAttributes as r, serialize as s, unloadRecord as u };","import { deprecate } from '@ember/debug';\nimport { dasherize } from '@ember/string';\nimport { macroCondition, getOwnConfig } from '@embroider/macros';\nfunction isElementDescriptor(args) {\n const [maybeTarget, maybeKey, maybeDesc] = args;\n return (\n // Ensure we have the right number of args\n args.length === 3 && (\n // Make sure the target is a class or object (prototype)\n typeof maybeTarget === 'function' || typeof maybeTarget === 'object' && maybeTarget !== null) &&\n // Make sure the key is a string\n typeof maybeKey === 'string' && (\n // Make sure the descriptor is the right shape\n typeof maybeDesc === 'object' && maybeDesc !== null && 'enumerable' in maybeDesc && 'configurable' in maybeDesc ||\n // TS compatibility\n maybeDesc === undefined)\n );\n}\nfunction computedMacroWithOptionalParams(fn) {\n return (...maybeDesc) => isElementDescriptor(maybeDesc) ? fn()(...maybeDesc) : fn(...maybeDesc);\n}\nfunction normalizeModelName(type) {\n if (macroCondition(getOwnConfig().deprecations.DEPRECATE_NON_STRICT_TYPES)) {\n const result = dasherize(type);\n deprecate(`The resource type '${type}' is not normalized. Update your application code to use '${result}' instead of '${type}'.`, result === type, {\n id: 'ember-data:deprecate-non-strict-types',\n until: '6.0',\n for: 'ember-data',\n since: {\n available: '5.3',\n enabled: '5.3'\n }\n });\n return result;\n }\n return type;\n}\nexport { computedMacroWithOptionalParams as c, normalizeModelName as n };","import { getOwner, setOwner } from '@ember/application';\nimport { assert } from '@ember/debug';\nimport { setRecordIdentifier, StoreMap, setCacheFor } from '@ember-data/store/-private';\nimport { M as Model } from \"./model-YsOraZ6y\";\nimport { n as normalizeModelName } from \"./util-3DHZJC9h\";\n\n/*\n In case someone defined a relationship to a mixin, for example:\n ```ts\n class CommentModel extends Model {\n @belongsTo('commentable', { polymorphic: true }) owner;\n }\n\n let Commentable = Mixin.create({\n @hasMany('comment') comments;\n });\n ```\n we want to look up a Commentable class which has all the necessary\n relationship meta data. Thus, we look up the mixin and create a mock\n Model, so we can access the relationship CPs of the mixin (`comments`)\n in this case\n */\nfunction modelForMixin(store, normalizedModelName) {\n const owner = getOwner(store);\n const MaybeMixin = owner.factoryFor(`mixin:${normalizedModelName}`);\n const mixin = MaybeMixin && MaybeMixin.class;\n if (mixin) {\n const ModelForMixin = Model.extend(mixin);\n ModelForMixin.__isMixin = true;\n ModelForMixin.__mixin = mixin;\n //Cache the class as a model\n owner.register(`model:${normalizedModelName}`, ModelForMixin);\n }\n return owner.factoryFor(`model:${normalizedModelName}`);\n}\nclass ModelSchemaProvider {\n constructor(store) {\n this.store = store;\n this._relationshipsDefCache = Object.create(null);\n this._attributesDefCache = Object.create(null);\n this._fieldsDefCache = Object.create(null);\n }\n fields(identifier) {\n const {\n type\n } = identifier;\n let fieldDefs = this._fieldsDefCache[type];\n if (fieldDefs === undefined) {\n fieldDefs = new Map();\n this._fieldsDefCache[type] = fieldDefs;\n const attributes = this.attributesDefinitionFor(identifier);\n const relationships = this.relationshipsDefinitionFor(identifier);\n for (const attr of Object.values(attributes)) {\n fieldDefs.set(attr.name, attr);\n }\n for (const rel of Object.values(relationships)) {\n fieldDefs.set(rel.name, rel);\n }\n }\n return fieldDefs;\n }\n\n // Following the existing RD implementation\n attributesDefinitionFor(identifier) {\n const {\n type\n } = identifier;\n let attributes;\n attributes = this._attributesDefCache[type];\n if (attributes === undefined) {\n const modelClass = this.store.modelFor(type);\n const attributeMap = modelClass.attributes;\n attributes = Object.create(null);\n attributeMap.forEach((meta, name) => attributes[name] = meta);\n this._attributesDefCache[type] = attributes;\n }\n return attributes;\n }\n\n // Following the existing RD implementation\n relationshipsDefinitionFor(identifier) {\n const {\n type\n } = identifier;\n let relationships;\n relationships = this._relationshipsDefCache[type];\n if (relationships === undefined) {\n const modelClass = this.store.modelFor(type);\n relationships = modelClass.relationshipsObject || null;\n this._relationshipsDefCache[type] = relationships;\n }\n return relationships;\n }\n doesTypeExist(modelName) {\n const type = normalizeModelName(modelName);\n const factory = getModelFactory(this.store, type);\n return factory !== null;\n }\n}\nfunction buildSchema(store) {\n return new ModelSchemaProvider(store);\n}\nfunction getModelFactory(store, type) {\n if (!store._modelFactoryCache) {\n store._modelFactoryCache = Object.create(null);\n }\n const cache = store._modelFactoryCache;\n let factory = cache[type];\n if (!factory) {\n const owner = getOwner(store);\n factory = owner.factoryFor(`model:${type}`);\n if (!factory) {\n //Support looking up mixins as base types for polymorphic relationships\n factory = modelForMixin(store, type);\n }\n if (!factory) {\n // we don't cache misses in case someone wants to register a missing model\n return null;\n }\n const klass = factory.class;\n if (klass.isModel) {\n const hasOwnModelNameSet = klass.modelName && Object.prototype.hasOwnProperty.call(klass, 'modelName');\n if (!hasOwnModelNameSet) {\n Object.defineProperty(klass, 'modelName', {\n value: type\n });\n }\n }\n cache[type] = factory;\n }\n return factory;\n}\nfunction instantiateRecord(identifier, createRecordArgs) {\n const type = identifier.type;\n const cache = this.cache;\n // TODO deprecate allowing unknown args setting\n const createOptions = {\n _createProps: createRecordArgs,\n // TODO @deprecate consider deprecating accessing record properties during init which the below is necessary for\n _secretInit: {\n identifier,\n cache,\n store: this,\n cb: secretInit\n }\n };\n\n // ensure that `getOwner(this)` works inside a model instance\n setOwner(createOptions, getOwner(this));\n const factory = getModelFactory(this, type);\n assert(`No model was found for '${type}'`, factory);\n return factory.class.create(createOptions);\n}\nfunction teardownRecord(record) {\n assert(`expected to receive an instance of Model from @ember-data/model. If using a custom model make sure you implement teardownRecord`, 'destroy' in record);\n record.destroy();\n}\nfunction modelFor(modelName) {\n assert(`Attempted to call store.modelFor(), but the store instance has already been destroyed.`, !this.isDestroyed && !this.isDestroying);\n assert(`You need to pass a model name to the store's modelFor method`, modelName);\n assert(`Please pass a proper model name to the store's modelFor method`, typeof modelName === 'string' && modelName.length);\n const type = normalizeModelName(modelName);\n const maybeFactory = getModelFactory(this, type);\n const klass = maybeFactory && maybeFactory.class ? maybeFactory.class : null;\n const ignoreType = !klass || !klass.isModel || this._forceShim;\n if (!ignoreType) {\n return klass;\n }\n assert(`No model was found for '${type}' and no schema handles the type`, this.getSchemaDefinitionService().doesTypeExist(type));\n}\nfunction secretInit(record, cache, identifier, store) {\n setRecordIdentifier(record, identifier);\n StoreMap.set(record, store);\n setCacheFor(record, cache);\n}\nexport { ModelSchemaProvider as M, buildSchema as b, instantiateRecord as i, modelFor as m, teardownRecord as t };","import { macroCondition, getOwnConfig } from '@embroider/macros';\nimport { c as cloneResponseProperties } from \"./context-g9X123os\";\n\n/**\n * A basic Fetch Handler which converts a request into a\n * `fetch` call presuming the response to be `json`.\n *\n * ```ts\n * import Fetch from '@ember-data/request/fetch';\n *\n * manager.use([Fetch]);\n * ```\n *\n * @module @ember-data/request/fetch\n * @main @ember-data/request/fetch\n */\n// Lazily close over fetch to avoid breaking Mirage\nconst _fetch = typeof fetch !== 'undefined' ? (...args) => fetch(...args) : typeof FastBoot !== 'undefined' ? (...args) => FastBoot.require('node-fetch')(...args) : () => {\n throw new Error('No Fetch Implementation Found');\n};\n\n// clones a response in a way that should still\n// allow it to stream\nfunction cloneResponse(response, overrides) {\n const props = cloneResponseProperties(response);\n return new Response(response.body, Object.assign(props, overrides));\n}\nlet IS_MAYBE_MIRAGE = () => false;\nif (macroCondition(getOwnConfig().env.TESTING)) {\n IS_MAYBE_MIRAGE = () => Boolean(typeof window !== 'undefined' && window.server?.pretender);\n}\nconst MUTATION_OPS = new Set(['updateRecord', 'createRecord', 'deleteRecord']);\nconst ERROR_STATUS_CODE_FOR = new Map([[400, 'Bad Request'], [401, 'Unauthorized'], [402, 'Payment Required'], [403, 'Forbidden'], [404, 'Not Found'], [405, 'Method Not Allowed'], [406, 'Not Acceptable'], [407, 'Proxy Authentication Required'], [408, 'Request Timeout'], [409, 'Conflict'], [410, 'Gone'], [411, 'Length Required'], [412, 'Precondition Failed'], [413, 'Payload Too Large'], [414, 'URI Too Long'], [415, 'Unsupported Media Type'], [416, 'Range Not Satisfiable'], [417, 'Expectation Failed'], [419, 'Page Expired'], [420, 'Enhance Your Calm'], [421, 'Misdirected Request'], [422, 'Unprocessable Entity'], [423, 'Locked'], [424, 'Failed Dependency'], [425, 'Too Early'], [426, 'Upgrade Required'], [428, 'Precondition Required'], [429, 'Too Many Requests'], [430, 'Request Header Fields Too Large'], [431, 'Request Header Fields Too Large'], [450, 'Blocked By Windows Parental Controls'], [451, 'Unavailable For Legal Reasons'], [500, 'Internal Server Error'], [501, 'Not Implemented'], [502, 'Bad Gateway'], [503, 'Service Unavailable'], [504, 'Gateway Timeout'], [505, 'HTTP Version Not Supported'], [506, 'Variant Also Negotiates'], [507, 'Insufficient Storage'], [508, 'Loop Detected'], [509, 'Bandwidth Limit Exceeded'], [510, 'Not Extended'], [511, 'Network Authentication Required']]);\n\n/**\n * A basic handler which converts a request into a\n * `fetch` call presuming the response to be `json`.\n *\n * ```ts\n * import Fetch from '@ember-data/request/fetch';\n *\n * manager.use([Fetch]);\n * ```\n *\n * @class Fetch\n * @public\n */\nconst Fetch = {\n async request(context) {\n let response;\n try {\n response = await _fetch(context.request.url, context.request);\n } catch (e) {\n if (e instanceof DOMException && e.name === 'AbortError') {\n e.statusText = 'Aborted';\n e.status = 20;\n e.isRequestError = true;\n } else {\n e.statusText = 'Unknown Network Error';\n e.status = 0;\n e.isRequestError = true;\n }\n throw e;\n }\n const isError = !response.ok || response.status >= 400;\n const op = context.request.op;\n const isMutationOp = Boolean(op && MUTATION_OPS.has(op));\n if (!isError && !isMutationOp && response.status !== 204 && !response.headers.has('date')) {\n if (IS_MAYBE_MIRAGE()) {\n response.headers.set('date', new Date().toUTCString());\n } else {\n const headers = new Headers(response.headers);\n headers.set('date', new Date().toUTCString());\n response = cloneResponse(response, {\n headers\n });\n }\n }\n context.setResponse(response);\n\n // if we are an error, we will want to throw\n if (isError) {\n const text = await response.text();\n let errorPayload;\n try {\n errorPayload = JSON.parse(text);\n } catch {\n // void;\n }\n // attempt errors discovery\n const errors = Array.isArray(errorPayload) ? errorPayload : isDict(errorPayload) && Array.isArray(errorPayload.errors) ? errorPayload.errors : null;\n const statusText = response.statusText || ERROR_STATUS_CODE_FOR.get(response.status) || 'Unknown Request Error';\n const msg = `[${response.status} ${statusText}] ${context.request.method ?? 'GET'} (${response.type}) - ${response.url}`;\n const error = errors ? new AggregateError(errors, msg) : new Error(msg);\n error.status = response.status;\n error.statusText = statusText;\n error.isRequestError = true;\n error.code = error.status;\n error.name = error.statusText.replaceAll(' ', '') + 'Error';\n error.content = errorPayload;\n throw error;\n } else {\n return response.status === 204 ? null : response.json();\n }\n }\n};\nfunction isDict(v) {\n return v !== null && typeof v === 'object';\n}\nexport { Fetch as default };","import JSONAPICache from '@ember-data/json-api';\nimport { adapterFor, cleanup, LegacyNetworkHandler, normalize, pushPayload, serializeRecord, serializerFor } from '@ember-data/legacy-compat';\nimport { buildSchema, instantiateRecord, modelFor, teardownRecord } from '@ember-data/model/hooks';\nimport RequestManager from '@ember-data/request';\nimport Fetch from '@ember-data/request/fetch';\nimport BaseStore, { CacheHandler } from '@ember-data/store';\nfunction hasRequestManager(store) {\n return 'requestManager' in store;\n}\nexport default class Store extends BaseStore {\n constructor(args) {\n super(args);\n this.adapterFor = adapterFor;\n this.serializerFor = serializerFor;\n this.pushPayload = pushPayload;\n this.normalize = normalize;\n this.serializeRecord = serializeRecord;\n if (!hasRequestManager(this)) {\n this.requestManager = new RequestManager();\n this.requestManager.use([LegacyNetworkHandler, Fetch]);\n }\n this.requestManager.useCache(CacheHandler);\n this.registerSchema(buildSchema(this));\n }\n createCache(storeWrapper) {\n return new JSONAPICache(storeWrapper);\n }\n instantiateRecord(identifier, createRecordArgs) {\n return instantiateRecord.call(this, identifier, createRecordArgs);\n }\n teardownRecord(record) {\n teardownRecord.call(this, record);\n }\n modelFor(type) {\n return modelFor.call(this, type) || super.modelFor(type);\n }\n destroy() {\n cleanup.call(this);\n super.destroy();\n }\n}","import { A } from '@ember/array';\nimport ContainerDebugAdapter from '@ember/debug/container-debug-adapter';\nimport { ModuleRegistry } from './index';\nimport { getOwner } from '@ember/application';\n\nfunction getPod(type, key, prefix) {\n let match = key.match(new RegExp('^/?' + prefix + '/(.+)/' + type + '$'));\n if (match !== null) {\n return match[1];\n }\n}\n\n/*\n * This module defines a subclass of Ember.ContainerDebugAdapter that adds\n * support for resolving from modules.\n *\n */\n\n/* eslint-disable ember/no-classic-classes */\nexport default ContainerDebugAdapter.extend({\n _moduleRegistry: null,\n\n init() {\n this._super(...arguments);\n this.namespace = getOwner(this).lookup('application:main');\n\n if (!this._moduleRegistry) {\n this._moduleRegistry = new ModuleRegistry();\n }\n },\n\n /**\n The container of the application being debugged.\n This property will be injected\n on creation.\n\n @property container\n @default null\n */\n\n /**\n The resolver instance of the application\n being debugged. This property will be injected\n on creation.\n\n @property resolver\n @default null\n */\n\n /**\n Returns true if it is possible to catalog a list of available\n classes in the resolver for a given type.\n\n @method canCatalogEntriesByType\n @param {string} type The type. e.g. \"model\", \"controller\", \"route\"\n @return {boolean} whether a list is available for this type.\n */\n canCatalogEntriesByType(type) {\n if (type === 'model') {\n return true;\n }\n return this._super(...arguments);\n },\n\n /**\n Returns the available classes a given type.\n\n @method catalogEntriesByType\n @param {string} type The type. e.g. \"model\", \"controller\", \"route\"\n @return {Array} An array of classes.\n */\n catalogEntriesByType(type) {\n let moduleNames = this._moduleRegistry.moduleNames();\n let types = A();\n\n let prefix = this.namespace.modulePrefix;\n\n for (let i = 0, l = moduleNames.length; i < l; i++) {\n let key = moduleNames[i];\n\n if (key.indexOf(type) !== -1) {\n // Check if it's a pod module\n let name = getPod(type, key, this.namespace.podModulePrefix || prefix);\n if (!name) {\n // Not pod\n name = key.split(type + 's/').pop();\n\n // Support for different prefix (such as ember-cli addons).\n // Uncomment the code below when\n // https://github.com/ember-cli/ember-resolver/pull/80 is merged.\n\n //let match = key.match('^/?(.+)/' + type);\n //if (match && match[1] !== prefix) {\n // Different prefix such as an addon\n //name = match[1] + '@' + name;\n //}\n }\n types.addObject(name);\n }\n }\n return types;\n },\n});\n","export default class Cache {\n constructor(limit, func, store) {\n this.limit = limit;\n this.func = func;\n this.store = store;\n this.size = 0;\n this.misses = 0;\n this.hits = 0;\n this.store = store || new Map();\n }\n get(key) {\n let value = this.store.get(key);\n if (this.store.has(key)) {\n this.hits++;\n return this.store.get(key);\n } else {\n this.misses++;\n value = this.set(key, this.func(key));\n }\n return value;\n }\n set(key, value) {\n if (this.limit > this.size) {\n this.size++;\n this.store.set(key, value);\n }\n return value;\n }\n purge() {\n this.store.clear();\n this.size = 0;\n this.hits = 0;\n this.misses = 0;\n }\n}\n","/* eslint-disable no-useless-escape */\nimport Cache from './cache';\nlet STRINGS = {};\nexport function setStrings(strings) {\n STRINGS = strings;\n}\nexport function getStrings() {\n return STRINGS;\n}\nexport function getString(name) {\n return STRINGS[name];\n}\nconst STRING_DASHERIZE_REGEXP = /[ _]/g;\nconst STRING_DASHERIZE_CACHE = new Cache(1000, (key) =>\n decamelize(key).replace(STRING_DASHERIZE_REGEXP, '-')\n);\nconst STRING_CLASSIFY_REGEXP_1 = /^(\\-|_)+(.)?/;\nconst STRING_CLASSIFY_REGEXP_2 = /(.)(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CLASSIFY_REGEXP_3 = /(^|\\/|\\.)([a-z])/g;\nconst CLASSIFY_CACHE = new Cache(1000, (str) => {\n const replace1 = (_match, _separator, chr) =>\n chr ? `_${chr.toUpperCase()}` : '';\n const replace2 = (_match, initialChar, _separator, chr) =>\n initialChar + (chr ? chr.toUpperCase() : '');\n const parts = str.split('/');\n for (let i = 0; i < parts.length; i++) {\n parts[i] = parts[i]\n .replace(STRING_CLASSIFY_REGEXP_1, replace1)\n .replace(STRING_CLASSIFY_REGEXP_2, replace2);\n }\n return parts\n .join('/')\n .replace(STRING_CLASSIFY_REGEXP_3, (match /*, separator, chr */) =>\n match.toUpperCase()\n );\n});\nconst STRING_UNDERSCORE_REGEXP_1 = /([a-z\\d])([A-Z]+)/g;\nconst STRING_UNDERSCORE_REGEXP_2 = /\\-|\\s+/g;\nconst UNDERSCORE_CACHE = new Cache(1000, (str) =>\n str\n .replace(STRING_UNDERSCORE_REGEXP_1, '$1_$2')\n .replace(STRING_UNDERSCORE_REGEXP_2, '_')\n .toLowerCase()\n);\nconst STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g;\nconst DECAMELIZE_CACHE = new Cache(1000, (str) =>\n str.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase()\n);\n/**\n Converts a camelized string into all lower case separated by underscores.\n\n ```javascript\n import { decamelize } from '@ember/string';\n\n decamelize('innerHTML'); // 'inner_html'\n decamelize('action_name'); // 'action_name'\n decamelize('css-class-name'); // 'css-class-name'\n decamelize('my favorite items'); // 'my favorite items'\n ```\n\n @method decamelize\n @param {String} str The string to decamelize.\n @return {String} the decamelized string.\n @public\n*/\nexport function decamelize(str) {\n return DECAMELIZE_CACHE.get(str);\n}\n/**\n Replaces underscores, spaces, or camelCase with dashes.\n\n ```javascript\n import { dasherize } from '@ember/string';\n\n dasherize('innerHTML'); // 'inner-html'\n dasherize('action_name'); // 'action-name'\n dasherize('css-class-name'); // 'css-class-name'\n dasherize('my favorite items'); // 'my-favorite-items'\n dasherize('privateDocs/ownerInvoice'; // 'private-docs/owner-invoice'\n ```\n\n @method dasherize\n @param {String} str The string to dasherize.\n @return {String} the dasherized string.\n @public\n*/\nexport function dasherize(str) {\n return STRING_DASHERIZE_CACHE.get(str);\n}\n/**\n Returns the UpperCamelCase form of a string.\n\n ```javascript\n import { classify } from '@ember/string';\n\n classify('innerHTML'); // 'InnerHTML'\n classify('action_name'); // 'ActionName'\n classify('css-class-name'); // 'CssClassName'\n classify('my favorite items'); // 'MyFavoriteItems'\n classify('private-docs/owner-invoice'); // 'PrivateDocs/OwnerInvoice'\n ```\n\n @method classify\n @param {String} str the string to classify\n @return {String} the classified string\n @public\n*/\nexport function classify(str) {\n return CLASSIFY_CACHE.get(str);\n}\n/**\n More general than decamelize. Returns the lower\\_case\\_and\\_underscored\n form of a string.\n\n ```javascript\n import { underscore } from '@ember/string';\n\n underscore('innerHTML'); // 'inner_html'\n underscore('action_name'); // 'action_name'\n underscore('css-class-name'); // 'css_class_name'\n underscore('my favorite items'); // 'my_favorite_items'\n underscore('privateDocs/ownerInvoice'); // 'private_docs/owner_invoice'\n ```\n\n @method underscore\n @param {String} str The string to underscore.\n @return {String} the underscored string.\n @public\n*/\nexport function underscore(str) {\n return UNDERSCORE_CACHE.get(str);\n}\n","/* globals requirejs, require */\n\nimport Ember from 'ember';\nimport { assert, deprecate, warn } from '@ember/debug';\nimport EmberObject from '@ember/object';\nimport { dasherize, classify, underscore } from './string';\nimport { DEBUG } from '@glimmer/env';\nimport classFactory from './utils/class-factory';\n\nif (typeof requirejs.entries === 'undefined') {\n requirejs.entries = requirejs._eak_seen;\n}\n\nexport class ModuleRegistry {\n constructor(entries) {\n this._entries = entries || requirejs.entries;\n }\n moduleNames() {\n return Object.keys(this._entries);\n }\n has(moduleName) {\n return moduleName in this._entries;\n }\n get(...args) {\n return require(...args);\n }\n}\n\n/**\n * This module defines a subclass of Ember.DefaultResolver that adds two\n * important features:\n *\n * 1) The resolver makes the container aware of es6 modules via the AMD\n * output. The loader's _moduleEntries is consulted so that classes can be\n * resolved directly via the module loader, without needing a manual\n * `import`.\n * 2) is able to provide injections to classes that implement `extend`\n * (as is typical with Ember).\n */\nclass Resolver extends EmberObject {\n static moduleBasedResolver = true;\n moduleBasedResolver = true;\n\n _deprecatedPodModulePrefix = false;\n _normalizeCache = Object.create(null);\n\n /**\n A listing of functions to test for moduleName's based on the provided\n `parsedName`. This allows easy customization of additional module based\n lookup patterns.\n\n @property moduleNameLookupPatterns\n @returns {Ember.Array}\n */\n moduleNameLookupPatterns = [\n this.podBasedModuleName,\n this.podBasedComponentsInSubdir,\n this.mainModuleName,\n this.defaultModuleName,\n this.nestedColocationComponentModuleName,\n ];\n\n constructor() {\n super(...arguments);\n\n if (!this._moduleRegistry) {\n this._moduleRegistry = new ModuleRegistry();\n }\n\n this.pluralizedTypes = this.pluralizedTypes || Object.create(null);\n\n if (!this.pluralizedTypes.config) {\n this.pluralizedTypes.config = 'config';\n }\n }\n\n makeToString(factory, fullName) {\n return '' + this.namespace.modulePrefix + '@' + fullName + ':';\n }\n\n shouldWrapInClassFactory(/* module, parsedName */) {\n return false;\n }\n\n parseName(fullName) {\n if (fullName.parsedName === true) {\n return fullName;\n }\n\n let prefix, type, name;\n let fullNameParts = fullName.split('@');\n\n if (fullNameParts.length === 3) {\n if (fullNameParts[0].length === 0) {\n // leading scoped namespace: `@scope/pkg@type:name`\n prefix = `@${fullNameParts[1]}`;\n let prefixParts = fullNameParts[2].split(':');\n type = prefixParts[0];\n name = prefixParts[1];\n } else {\n // interweaved scoped namespace: `type:@scope/pkg@name`\n prefix = `@${fullNameParts[1]}`;\n type = fullNameParts[0].slice(0, -1);\n name = fullNameParts[2];\n }\n\n if (type === 'template:components') {\n name = `components/${name}`;\n type = 'template';\n }\n } else if (fullNameParts.length === 2) {\n let prefixParts = fullNameParts[0].split(':');\n\n if (prefixParts.length === 2) {\n if (prefixParts[1].length === 0) {\n type = prefixParts[0];\n name = `@${fullNameParts[1]}`;\n } else {\n prefix = prefixParts[1];\n type = prefixParts[0];\n name = fullNameParts[1];\n }\n } else {\n let nameParts = fullNameParts[1].split(':');\n\n prefix = fullNameParts[0];\n type = nameParts[0];\n name = nameParts[1];\n }\n\n if (type === 'template' && prefix.lastIndexOf('components/', 0) === 0) {\n name = `components/${name}`;\n prefix = prefix.slice(11);\n }\n } else {\n fullNameParts = fullName.split(':');\n type = fullNameParts[0];\n name = fullNameParts[1];\n }\n\n let fullNameWithoutType = name;\n let namespace = this.namespace;\n let root = namespace;\n\n return {\n parsedName: true,\n fullName: fullName,\n prefix: prefix || this.prefix({ type: type }),\n type: type,\n fullNameWithoutType: fullNameWithoutType,\n name: name,\n root: root,\n resolveMethodName: 'resolve' + classify(type),\n };\n }\n\n resolveOther(parsedName) {\n assert('`modulePrefix` must be defined', this.namespace.modulePrefix);\n\n let normalizedModuleName = this.findModuleName(parsedName);\n\n if (normalizedModuleName) {\n let defaultExport = this._extractDefaultExport(\n normalizedModuleName,\n parsedName\n );\n\n if (defaultExport === undefined) {\n throw new Error(\n ` Expected to find: '${parsedName.fullName}' within '${normalizedModuleName}' but got 'undefined'. Did you forget to 'export default' within '${normalizedModuleName}'?`\n );\n }\n\n if (this.shouldWrapInClassFactory(defaultExport, parsedName)) {\n defaultExport = classFactory(defaultExport);\n }\n\n return defaultExport;\n }\n }\n\n normalize(fullName) {\n return (\n this._normalizeCache[fullName] ||\n (this._normalizeCache[fullName] = this._normalize(fullName))\n );\n }\n\n resolve(fullName) {\n let parsedName = this.parseName(fullName);\n let resolveMethodName = parsedName.resolveMethodName;\n let resolved;\n\n if (typeof this[resolveMethodName] === 'function') {\n resolved = this[resolveMethodName](parsedName);\n }\n\n if (resolved == null) {\n resolved = this.resolveOther(parsedName);\n }\n\n return resolved;\n }\n\n _normalize(fullName) {\n // A) Convert underscores to dashes\n // B) Convert camelCase to dash-case, except for components (their\n // templates) and helpers where we want to avoid shadowing camelCase\n // expressions\n // C) replace `.` with `/` in order to make nested controllers work in the following cases\n // 1. `needs: ['posts/post']`\n // 2. `{{render \"posts/post\"}}`\n // 3. `this.render('posts/post')` from Route\n\n let split = fullName.split(':');\n if (split.length > 1) {\n let type = split[0];\n\n if (\n type === 'component' ||\n type === 'helper' ||\n type === 'modifier' ||\n (type === 'template' && split[1].indexOf('components/') === 0)\n ) {\n return type + ':' + split[1].replace(/_/g, '-');\n } else {\n return type + ':' + dasherize(split[1].replace(/\\./g, '/'));\n }\n } else {\n return fullName;\n }\n }\n\n pluralize(type) {\n return (\n this.pluralizedTypes[type] || (this.pluralizedTypes[type] = type + 's')\n );\n }\n\n podBasedLookupWithPrefix(podPrefix, parsedName) {\n let fullNameWithoutType = parsedName.fullNameWithoutType;\n\n if (parsedName.type === 'template') {\n fullNameWithoutType = fullNameWithoutType.replace(/^components\\//, '');\n }\n\n return podPrefix + '/' + fullNameWithoutType + '/' + parsedName.type;\n }\n\n podBasedModuleName(parsedName) {\n let podPrefix =\n this.namespace.podModulePrefix || this.namespace.modulePrefix;\n\n return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n }\n\n podBasedComponentsInSubdir(parsedName) {\n let podPrefix =\n this.namespace.podModulePrefix || this.namespace.modulePrefix;\n podPrefix = podPrefix + '/components';\n\n if (\n parsedName.type === 'component' ||\n /^components/.test(parsedName.fullNameWithoutType)\n ) {\n return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n }\n }\n\n resolveEngine(parsedName) {\n let engineName = parsedName.fullNameWithoutType;\n let engineModule = engineName + '/engine';\n\n if (this._moduleRegistry.has(engineModule)) {\n return this._extractDefaultExport(engineModule);\n }\n }\n\n resolveRouteMap(parsedName) {\n let engineName = parsedName.fullNameWithoutType;\n let engineRoutesModule = engineName + '/routes';\n\n if (this._moduleRegistry.has(engineRoutesModule)) {\n let routeMap = this._extractDefaultExport(engineRoutesModule);\n\n assert(\n `The route map for ${engineName} should be wrapped by 'buildRoutes' before exporting.`,\n routeMap.isRouteMap\n );\n\n return routeMap;\n }\n }\n\n resolveTemplate(parsedName) {\n let resolved = this.resolveOther(parsedName);\n if (resolved == null) {\n resolved = Ember.TEMPLATES[parsedName.fullNameWithoutType];\n }\n return resolved;\n }\n\n mainModuleName(parsedName) {\n if (parsedName.fullNameWithoutType === 'main') {\n // if router:main or adapter:main look for a module with just the type first\n return parsedName.prefix + '/' + parsedName.type;\n }\n }\n\n defaultModuleName(parsedName) {\n return (\n parsedName.prefix +\n '/' +\n this.pluralize(parsedName.type) +\n '/' +\n parsedName.fullNameWithoutType\n );\n }\n\n nestedColocationComponentModuleName(parsedName) {\n if (parsedName.type === 'component') {\n return (\n parsedName.prefix +\n '/' +\n this.pluralize(parsedName.type) +\n '/' +\n parsedName.fullNameWithoutType +\n '/index'\n );\n }\n }\n\n prefix(parsedName) {\n let tmpPrefix = this.namespace.modulePrefix;\n\n if (this.namespace[parsedName.type + 'Prefix']) {\n tmpPrefix = this.namespace[parsedName.type + 'Prefix'];\n }\n\n return tmpPrefix;\n }\n\n findModuleName(parsedName, loggingDisabled) {\n let moduleNameLookupPatterns = this.moduleNameLookupPatterns;\n let moduleName;\n\n for (\n let index = 0, length = moduleNameLookupPatterns.length;\n index < length;\n index++\n ) {\n let item = moduleNameLookupPatterns[index];\n\n let tmpModuleName = item.call(this, parsedName);\n\n // allow treat all dashed and all underscored as the same thing\n // supports components with dashes and other stuff with underscores.\n if (tmpModuleName) {\n tmpModuleName = this.chooseModuleName(tmpModuleName, parsedName);\n }\n\n if (tmpModuleName && this._moduleRegistry.has(tmpModuleName)) {\n moduleName = tmpModuleName;\n }\n\n if (!loggingDisabled) {\n this._logLookup(moduleName, parsedName, tmpModuleName);\n }\n\n if (moduleName) {\n return moduleName;\n }\n }\n }\n\n chooseModuleName(moduleName, parsedName) {\n let underscoredModuleName = underscore(moduleName);\n\n if (\n moduleName !== underscoredModuleName &&\n this._moduleRegistry.has(moduleName) &&\n this._moduleRegistry.has(underscoredModuleName)\n ) {\n throw new TypeError(\n `Ambiguous module names: '${moduleName}' and '${underscoredModuleName}'`\n );\n }\n\n if (this._moduleRegistry.has(moduleName)) {\n return moduleName;\n } else if (this._moduleRegistry.has(underscoredModuleName)) {\n return underscoredModuleName;\n }\n // workaround for dasherized partials:\n // something/something/-something => something/something/_something\n let partializedModuleName = moduleName.replace(/\\/-([^/]*)$/, '/_$1');\n\n if (this._moduleRegistry.has(partializedModuleName)) {\n deprecate(\n 'Modules should not contain underscores. ' +\n 'Attempted to lookup \"' +\n moduleName +\n '\" which ' +\n 'was not found. Please rename \"' +\n partializedModuleName +\n '\" ' +\n 'to \"' +\n moduleName +\n '\" instead.',\n false,\n {\n id: 'ember-resolver.underscored-modules',\n until: '3.0.0',\n for: 'ember-resolver',\n since: '0.1.0',\n }\n );\n\n return partializedModuleName;\n }\n\n if (DEBUG) {\n let isCamelCaseHelper =\n parsedName.type === 'helper' && /[a-z]+[A-Z]+/.test(moduleName);\n if (isCamelCaseHelper) {\n this._camelCaseHelperWarnedNames =\n this._camelCaseHelperWarnedNames || [];\n let alreadyWarned =\n this._camelCaseHelperWarnedNames.indexOf(parsedName.fullName) > -1;\n if (!alreadyWarned && this._moduleRegistry.has(dasherize(moduleName))) {\n this._camelCaseHelperWarnedNames.push(parsedName.fullName);\n warn(\n 'Attempted to lookup \"' +\n parsedName.fullName +\n '\" which ' +\n 'was not found. In previous versions of ember-resolver, a bug would have ' +\n 'caused the module at \"' +\n dasherize(moduleName) +\n '\" to be ' +\n 'returned for this camel case helper name. This has been fixed. ' +\n 'Use the dasherized name to resolve the module that would have been ' +\n 'returned in previous versions.',\n false,\n { id: 'ember-resolver.camelcase-helper-names', until: '3.0.0' }\n );\n }\n }\n }\n }\n\n // used by Ember.DefaultResolver.prototype._logLookup\n lookupDescription(fullName) {\n let parsedName = this.parseName(fullName);\n\n let moduleName = this.findModuleName(parsedName, true);\n\n return moduleName;\n }\n\n // only needed until 1.6.0-beta.2 can be required\n _logLookup(found, parsedName, description) {\n if (!Ember.ENV.LOG_MODULE_RESOLVER && !parsedName.root.LOG_RESOLVER) {\n return;\n }\n\n let padding;\n let symbol = found ? '[✓]' : '[ ]';\n\n if (parsedName.fullName.length > 60) {\n padding = '.';\n } else {\n padding = new Array(60 - parsedName.fullName.length).join('.');\n }\n\n if (!description) {\n description = this.lookupDescription(parsedName);\n }\n\n /* eslint-disable no-console */\n if (console && console.info) {\n console.info(symbol, parsedName.fullName, padding, description);\n }\n }\n\n knownForType(type) {\n let moduleKeys = this._moduleRegistry.moduleNames();\n\n let items = Object.create(null);\n for (let index = 0, length = moduleKeys.length; index < length; index++) {\n let moduleName = moduleKeys[index];\n let fullname = this.translateToContainerFullname(type, moduleName);\n\n if (fullname) {\n items[fullname] = true;\n }\n }\n\n return items;\n }\n\n translateToContainerFullname(type, moduleName) {\n let prefix = this.prefix({ type });\n\n // Note: using string manipulation here rather than regexes for better performance.\n // pod modules\n // '^' + prefix + '/(.+)/' + type + '$'\n let podPrefix = prefix + '/';\n let podSuffix = '/' + type;\n let start = moduleName.indexOf(podPrefix);\n let end = moduleName.indexOf(podSuffix);\n\n if (\n start === 0 &&\n end === moduleName.length - podSuffix.length &&\n moduleName.length > podPrefix.length + podSuffix.length\n ) {\n return type + ':' + moduleName.slice(start + podPrefix.length, end);\n }\n\n // non-pod modules\n // '^' + prefix + '/' + pluralizedType + '/(.+)$'\n let pluralizedType = this.pluralize(type);\n let nonPodPrefix = prefix + '/' + pluralizedType + '/';\n\n if (\n moduleName.indexOf(nonPodPrefix) === 0 &&\n moduleName.length > nonPodPrefix.length\n ) {\n return type + ':' + moduleName.slice(nonPodPrefix.length);\n }\n }\n\n _extractDefaultExport(normalizedModuleName) {\n let module = this._moduleRegistry.get(\n normalizedModuleName,\n null,\n null,\n true /* force sync */\n );\n\n if (module && module['default']) {\n module = module['default'];\n }\n\n return module;\n }\n}\n\nexport default Resolver;\n","export default function classFactory(klass) {\n return {\n create(injections) {\n if (typeof klass.extend === 'function') {\n return klass.extend(injections);\n } else {\n return klass;\n }\n },\n };\n}\n","// check if window exists and actually is the global\nvar hasDom = typeof self === 'object' && self !== null && self.Object === Object && typeof Window !== 'undefined' && self.constructor === Window && typeof document === 'object' && document !== null && self.document === document && typeof location === 'object' && location !== null && self.location === location && typeof history === 'object' && history !== null && self.history === history && typeof navigator === 'object' && navigator !== null && self.navigator === navigator && typeof navigator.userAgent === 'string';\n\nconst window = hasDom ? self : null;\nconst location$1 = hasDom ? self.location : null;\nconst history$1 = hasDom ? self.history : null;\nconst userAgent = hasDom ? self.navigator.userAgent : 'Lynx (textmode)';\nconst isChrome = hasDom ? typeof chrome === 'object' && !(typeof opera === 'object') : false;\nconst isFirefox = hasDom ? /Firefox|FxiOS/.test(userAgent) : false;\n\nexport { hasDom as hasDOM, history$1 as history, isChrome, isFirefox, location$1 as location, userAgent, window };\n","import { dictionary, intern } from '@ember/-internals/utils';\nimport { assert } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\nimport { setOwner } from '@ember/-internals/owner';\n\nlet leakTracking;\nlet containers;\nif (DEBUG) {\n // requires v8\n // chrome --js-flags=\"--allow-natives-syntax --expose-gc\"\n // node --allow-natives-syntax --expose-gc\n try {\n if (typeof gc === 'function') {\n leakTracking = (() => {\n // avoid syntax errors when --allow-natives-syntax not present\n let GetWeakSetValues = new Function('weakSet', 'return %GetWeakSetValues(weakSet, 0)');\n containers = new WeakSet();\n return {\n hasContainers() {\n gc();\n return GetWeakSetValues(containers).length > 0;\n },\n reset() {\n let values = GetWeakSetValues(containers);\n for (let i = 0; i < values.length; i++) {\n containers.delete(values[i]);\n }\n }\n };\n })();\n }\n } catch (e) {\n // ignore\n }\n}\n/**\n A container used to instantiate and cache objects.\n\n Every `Container` must be associated with a `Registry`, which is referenced\n to determine the factory and options that should be used to instantiate\n objects.\n\n The public API for `Container` is still in flux and should not be considered\n stable.\n\n @private\n @class Container\n */\nclass Container {\n constructor(registry, options = {}) {\n this.registry = registry;\n this.owner = options.owner || null;\n this.cache = dictionary(options.cache || null);\n this.factoryManagerCache = dictionary(options.factoryManagerCache || null);\n this.isDestroyed = false;\n this.isDestroying = false;\n if (DEBUG) {\n this.validationCache = dictionary(options.validationCache || null);\n if (containers !== undefined) {\n containers.add(this);\n }\n }\n }\n /**\n @private\n @property registry\n @type Registry\n @since 1.11.0\n */\n /**\n @private\n @property cache\n @type InheritingDict\n */\n /**\n @private\n @property validationCache\n @type InheritingDict\n */\n /**\n Given a fullName return a corresponding instance.\n The default behavior is for lookup to return a singleton instance.\n The singleton is scoped to the container, allowing multiple containers\n to all have their own locally scoped singletons.\n ```javascript\n let registry = new Registry();\n let container = registry.container();\n registry.register('api:twitter', Twitter);\n let twitter = container.lookup('api:twitter');\n twitter instanceof Twitter; // => true\n // by default the container will return singletons\n let twitter2 = container.lookup('api:twitter');\n twitter2 instanceof Twitter; // => true\n twitter === twitter2; //=> true\n ```\n If singletons are not wanted, an optional flag can be provided at lookup.\n ```javascript\n let registry = new Registry();\n let container = registry.container();\n registry.register('api:twitter', Twitter);\n let twitter = container.lookup('api:twitter', { singleton: false });\n let twitter2 = container.lookup('api:twitter', { singleton: false });\n twitter === twitter2; //=> false\n ```\n @private\n @method lookup\n @param {String} fullName\n @param {RegisterOptions} [options]\n @return {any}\n */\n lookup(fullName, options) {\n if (this.isDestroyed) {\n throw new Error(`Cannot call \\`.lookup('${fullName}')\\` after the owner has been destroyed`);\n }\n assert('fullName must be a proper full name', this.registry.isValidFullName(fullName));\n return lookup(this, this.registry.normalize(fullName), options);\n }\n /**\n A depth first traversal, destroying the container, its descendant containers and all\n their managed objects.\n @private\n @method destroy\n */\n destroy() {\n this.isDestroying = true;\n destroyDestroyables(this);\n }\n finalizeDestroy() {\n resetCache(this);\n this.isDestroyed = true;\n }\n /**\n Clear either the entire cache or just the cache for a particular key.\n @private\n @method reset\n @param {String} fullName optional key to reset; if missing, resets everything\n */\n reset(fullName) {\n if (this.isDestroyed) return;\n if (fullName === undefined) {\n destroyDestroyables(this);\n resetCache(this);\n } else {\n resetMember(this, this.registry.normalize(fullName));\n }\n }\n /**\n Returns an object that can be used to provide an owner to a\n manually created instance.\n @private\n @method ownerInjection\n @returns { Object }\n */\n ownerInjection() {\n let injection = {};\n setOwner(injection, this.owner);\n return injection;\n }\n /**\n Given a fullName, return the corresponding factory. The consumer of the factory\n is responsible for the destruction of any factory instances, as there is no\n way for the container to ensure instances are destroyed when it itself is\n destroyed.\n @public\n @method factoryFor\n @param {String} fullName\n @return {any}\n */\n factoryFor(fullName) {\n if (this.isDestroyed) {\n throw new Error(`Cannot call \\`.factoryFor('${fullName}')\\` after the owner has been destroyed`);\n }\n let normalizedName = this.registry.normalize(fullName);\n assert('fullName must be a proper full name', this.registry.isValidFullName(normalizedName));\n return factoryFor(this, normalizedName, fullName);\n }\n}\nif (DEBUG) {\n Container._leakTracking = leakTracking;\n}\n/*\n * Wrap a factory manager in a proxy which will not permit properties to be\n * set on the manager.\n */\nfunction wrapManagerInDeprecationProxy(manager) {\n let validator = {\n set(_obj, prop) {\n throw new Error(`You attempted to set \"${String(prop)}\" on a factory manager created by container#factoryFor. A factory manager is a read-only construct.`);\n }\n };\n // Note:\n // We have to proxy access to the manager here so that private property\n // access doesn't cause the above errors to occur.\n let m = manager;\n let proxiedManager = {\n class: m.class,\n create(props) {\n return m.create(props);\n }\n };\n return new Proxy(proxiedManager, validator);\n}\nfunction isSingleton(container, fullName) {\n return container.registry.getOption(fullName, 'singleton') !== false;\n}\nfunction isInstantiatable(container, fullName) {\n return container.registry.getOption(fullName, 'instantiate') !== false;\n}\nfunction lookup(container, fullName, options = {}) {\n let normalizedName = fullName;\n if (options.singleton === true || options.singleton === undefined && isSingleton(container, fullName)) {\n let cached = container.cache[normalizedName];\n if (cached !== undefined) {\n return cached;\n }\n }\n return instantiateFactory(container, normalizedName, fullName, options);\n}\nfunction factoryFor(container, normalizedName, fullName) {\n let cached = container.factoryManagerCache[normalizedName];\n if (cached !== undefined) {\n return cached;\n }\n let factory = container.registry.resolve(normalizedName);\n if (factory === undefined) {\n return;\n }\n if (DEBUG && factory && typeof factory._onLookup === 'function') {\n factory._onLookup(fullName);\n }\n let manager = new InternalFactoryManager(container, factory, fullName, normalizedName);\n if (DEBUG) {\n manager = wrapManagerInDeprecationProxy(manager);\n }\n container.factoryManagerCache[normalizedName] = manager;\n return manager;\n}\nfunction isSingletonClass(container, fullName, {\n instantiate,\n singleton\n}) {\n return singleton !== false && !instantiate && isSingleton(container, fullName) && !isInstantiatable(container, fullName);\n}\nfunction isSingletonInstance(container, fullName, {\n instantiate,\n singleton\n}) {\n return singleton !== false && instantiate !== false && (singleton === true || isSingleton(container, fullName)) && isInstantiatable(container, fullName);\n}\nfunction isFactoryClass(container, fullname, {\n instantiate,\n singleton\n}) {\n return instantiate === false && (singleton === false || !isSingleton(container, fullname)) && !isInstantiatable(container, fullname);\n}\nfunction isFactoryInstance(container, fullName, {\n instantiate,\n singleton\n}) {\n return instantiate !== false && (singleton === false || !isSingleton(container, fullName)) && isInstantiatable(container, fullName);\n}\nfunction instantiateFactory(container, normalizedName, fullName, options) {\n let factoryManager = factoryFor(container, normalizedName, fullName);\n if (factoryManager === undefined) {\n return;\n }\n // SomeClass { singleton: true, instantiate: true } | { singleton: true } | { instantiate: true } | {}\n // By default majority of objects fall into this case\n if (isSingletonInstance(container, fullName, options)) {\n let instance = container.cache[normalizedName] = factoryManager.create();\n // if this lookup happened _during_ destruction (emits a deprecation, but\n // is still possible) ensure that it gets destroyed\n if (container.isDestroying) {\n if (typeof instance.destroy === 'function') {\n instance.destroy();\n }\n }\n return instance;\n }\n // SomeClass { singleton: false, instantiate: true }\n if (isFactoryInstance(container, fullName, options)) {\n return factoryManager.create();\n }\n // SomeClass { singleton: true, instantiate: false } | { instantiate: false } | { singleton: false, instantiation: false }\n if (isSingletonClass(container, fullName, options) || isFactoryClass(container, fullName, options)) {\n return factoryManager.class;\n }\n throw new Error('Could not create factory');\n}\nfunction destroyDestroyables(container) {\n let cache = container.cache;\n let keys = Object.keys(cache);\n for (let key of keys) {\n let value = cache[key];\n assert('has cached value', value);\n if (value.destroy) {\n value.destroy();\n }\n }\n}\nfunction resetCache(container) {\n container.cache = dictionary(null);\n container.factoryManagerCache = dictionary(null);\n}\nfunction resetMember(container, fullName) {\n let member = container.cache[fullName];\n delete container.factoryManagerCache[fullName];\n if (member) {\n delete container.cache[fullName];\n if (member.destroy) {\n member.destroy();\n }\n }\n}\nconst INIT_FACTORY = Symbol('INIT_FACTORY');\nfunction getFactoryFor(obj) {\n // SAFETY: since we know `obj` is an `object`, we also know we can safely ask\n // whether a key is set on it.\n return obj[INIT_FACTORY];\n}\nfunction setFactoryFor(obj, factory) {\n // SAFETY: since we know `obj` is an `object`, we also know we can safely set\n // a key it safely at this location. (The only way this could be blocked is if\n // someone has gone out of their way to use `Object.defineProperty()` with our\n // internal-only symbol and made it `writable: false`.)\n obj[INIT_FACTORY] = factory;\n}\nclass InternalFactoryManager {\n constructor(container, factory, fullName, normalizedName) {\n this.container = container;\n this.owner = container.owner;\n this.class = factory;\n this.fullName = fullName;\n this.normalizedName = normalizedName;\n this.madeToString = undefined;\n this.injections = undefined;\n }\n toString() {\n if (this.madeToString === undefined) {\n this.madeToString = this.container.registry.makeToString(this.class, this.fullName);\n }\n return this.madeToString;\n }\n create(options) {\n let {\n container\n } = this;\n if (container.isDestroyed) {\n throw new Error(`Cannot create new instances after the owner has been destroyed (you attempted to create ${this.fullName})`);\n }\n let props = options ? {\n ...options\n } : {};\n setOwner(props, container.owner);\n setFactoryFor(props, this);\n if (DEBUG) {\n let lazyInjections;\n let validationCache = this.container.validationCache;\n // Ensure that all lazy injections are valid at instantiation time\n if (!validationCache[this.fullName] && this.class && typeof this.class._lazyInjections === 'function') {\n lazyInjections = this.class._lazyInjections();\n lazyInjections = this.container.registry.normalizeInjectionsHash(lazyInjections);\n this.container.registry.validateInjections(lazyInjections);\n }\n validationCache[this.fullName] = true;\n assert(`Failed to create an instance of '${this.normalizedName}'. Most likely an improperly defined class or an invalid module export.`, typeof this.class.create === 'function');\n }\n return this.class.create(props);\n }\n}\n\nconst VALID_FULL_NAME_REGEXP = /^[^:]+:[^:]+$/;\n/**\n A registry used to store factory and option information keyed\n by type.\n\n A `Registry` stores the factory and option information needed by a\n `Container` to instantiate and cache objects.\n\n The API for `Registry` is still in flux and should not be considered stable.\n\n @private\n @class Registry\n @since 1.11.0\n*/\nclass Registry {\n constructor(options = {}) {\n this.fallback = options.fallback || null;\n this.resolver = options.resolver || null;\n this.registrations = dictionary(options.registrations || null);\n this._normalizeCache = dictionary(null);\n this._resolveCache = dictionary(null);\n this._failSet = new Set();\n this._options = dictionary(null);\n this._typeOptions = dictionary(null);\n }\n /**\n A backup registry for resolving registrations when no matches can be found.\n @private\n @property fallback\n @type Registry\n */\n /**\n An object that has a `resolve` method that resolves a name.\n @private\n @property resolver\n @type Resolver\n */\n /**\n @private\n @property registrations\n @type InheritingDict\n */\n /**\n @private\n @property _normalizeCache\n @type InheritingDict\n */\n /**\n @private\n @property _resolveCache\n @type InheritingDict\n */\n /**\n @private\n @property _options\n @type InheritingDict\n */\n /**\n @private\n @property _typeOptions\n @type InheritingDict\n */\n /**\n Creates a container based on this registry.\n @private\n @method container\n @param {Object} options\n @return {Container} created container\n */\n container(options) {\n return new Container(this, options);\n }\n register(fullName, factory, options = {}) {\n assert('fullName must be a proper full name', this.isValidFullName(fullName));\n assert(`Attempting to register an unknown factory: '${fullName}'`, factory !== undefined);\n let normalizedName = this.normalize(fullName);\n assert(`Cannot re-register: '${fullName}', as it has already been resolved.`, !this._resolveCache[normalizedName]);\n this._failSet.delete(normalizedName);\n this.registrations[normalizedName] = factory;\n this._options[normalizedName] = options;\n }\n /**\n Unregister a fullName\n ```javascript\n let registry = new Registry();\n registry.register('model:user', User);\n registry.resolve('model:user').create() instanceof User //=> true\n registry.unregister('model:user')\n registry.resolve('model:user') === undefined //=> true\n ```\n @private\n @method unregister\n @param {String} fullName\n */\n unregister(fullName) {\n assert('fullName must be a proper full name', this.isValidFullName(fullName));\n let normalizedName = this.normalize(fullName);\n delete this.registrations[normalizedName];\n delete this._resolveCache[normalizedName];\n delete this._options[normalizedName];\n this._failSet.delete(normalizedName);\n }\n /**\n Given a fullName return the corresponding factory.\n By default `resolve` will retrieve the factory from\n the registry.\n ```javascript\n let registry = new Registry();\n registry.register('api:twitter', Twitter);\n registry.resolve('api:twitter') // => Twitter\n ```\n Optionally the registry can be provided with a custom resolver.\n If provided, `resolve` will first provide the custom resolver\n the opportunity to resolve the fullName, otherwise it will fallback\n to the registry.\n ```javascript\n let registry = new Registry();\n registry.resolver = function(fullName) {\n // lookup via the module system of choice\n };\n // the twitter factory is added to the module system\n registry.resolve('api:twitter') // => Twitter\n ```\n @private\n @method resolve\n @param {String} fullName\n @return {Function} fullName's factory\n */\n resolve(fullName) {\n let factory = resolve(this, this.normalize(fullName));\n if (factory === undefined && this.fallback !== null) {\n factory = this.fallback.resolve(fullName);\n }\n return factory;\n }\n /**\n A hook that can be used to describe how the resolver will\n attempt to find the factory.\n For example, the default Ember `.describe` returns the full\n class name (including namespace) where Ember's resolver expects\n to find the `fullName`.\n @private\n @method describe\n @param {String} fullName\n @return {string} described fullName\n */\n describe(fullName) {\n if (this.resolver !== null && this.resolver.lookupDescription) {\n return this.resolver.lookupDescription(fullName);\n } else if (this.fallback !== null) {\n return this.fallback.describe(fullName);\n } else {\n return fullName;\n }\n }\n /**\n A hook to enable custom fullName normalization behavior\n @private\n @method normalizeFullName\n @param {String} fullName\n @return {string} normalized fullName\n */\n normalizeFullName(fullName) {\n if (this.resolver !== null && this.resolver.normalize) {\n return this.resolver.normalize(fullName);\n } else if (this.fallback !== null) {\n return this.fallback.normalizeFullName(fullName);\n } else {\n return fullName;\n }\n }\n /**\n Normalize a fullName based on the application's conventions\n @private\n @method normalize\n @param {String} fullName\n @return {string} normalized fullName\n */\n normalize(fullName) {\n return this._normalizeCache[fullName] || (this._normalizeCache[fullName] = this.normalizeFullName(fullName));\n }\n /**\n @method makeToString\n @private\n @param {any} factory\n @param {string} fullName\n @return {function} toString function\n */\n makeToString(factory, fullName) {\n if (this.resolver !== null && this.resolver.makeToString) {\n return this.resolver.makeToString(factory, fullName);\n } else if (this.fallback !== null) {\n return this.fallback.makeToString(factory, fullName);\n } else {\n return typeof factory === 'string' ? factory : factory.name ?? '(unknown class)';\n }\n }\n /**\n Given a fullName check if the container is aware of its factory\n or singleton instance.\n @private\n @method has\n @param {String} fullName\n @param {Object} [options]\n @param {String} [options.source] the fullname of the request source (used for local lookups)\n @return {Boolean}\n */\n has(fullName) {\n if (!this.isValidFullName(fullName)) {\n return false;\n }\n return has(this, this.normalize(fullName));\n }\n /**\n Allow registering options for all factories of a type.\n ```javascript\n let registry = new Registry();\n let container = registry.container();\n // if all of type `connection` must not be singletons\n registry.optionsForType('connection', { singleton: false });\n registry.register('connection:twitter', TwitterConnection);\n registry.register('connection:facebook', FacebookConnection);\n let twitter = container.lookup('connection:twitter');\n let twitter2 = container.lookup('connection:twitter');\n twitter === twitter2; // => false\n let facebook = container.lookup('connection:facebook');\n let facebook2 = container.lookup('connection:facebook');\n facebook === facebook2; // => false\n ```\n @private\n @method optionsForType\n @param {String} type\n @param {Object} options\n */\n optionsForType(type, options) {\n this._typeOptions[type] = options;\n }\n getOptionsForType(type) {\n let optionsForType = this._typeOptions[type];\n if (optionsForType === undefined && this.fallback !== null) {\n optionsForType = this.fallback.getOptionsForType(type);\n }\n return optionsForType;\n }\n /**\n @private\n @method options\n @param {String} fullName\n @param {Object} options\n */\n options(fullName, options) {\n let normalizedName = this.normalize(fullName);\n this._options[normalizedName] = options;\n }\n getOptions(fullName) {\n let normalizedName = this.normalize(fullName);\n let options = this._options[normalizedName];\n if (options === undefined && this.fallback !== null) {\n options = this.fallback.getOptions(fullName);\n }\n return options;\n }\n getOption(fullName, optionName) {\n let options = this._options[fullName];\n if (options !== undefined && options[optionName] !== undefined) {\n return options[optionName];\n }\n let type = fullName.split(':')[0];\n assert('has type', type); // split always will have at least one value\n options = this._typeOptions[type];\n if (options && options[optionName] !== undefined) {\n return options[optionName];\n } else if (this.fallback !== null) {\n return this.fallback.getOption(fullName, optionName);\n }\n return undefined;\n }\n /**\n @private\n @method knownForType\n @param {String} type the type to iterate over\n */\n knownForType(type) {\n let localKnown = dictionary(null);\n let registeredNames = Object.keys(this.registrations);\n for (let fullName of registeredNames) {\n let itemType = fullName.split(':')[0];\n if (itemType === type) {\n localKnown[fullName] = true;\n }\n }\n let fallbackKnown, resolverKnown;\n if (this.fallback !== null) {\n fallbackKnown = this.fallback.knownForType(type);\n }\n if (this.resolver !== null && this.resolver.knownForType) {\n resolverKnown = this.resolver.knownForType(type);\n }\n return Object.assign({}, fallbackKnown, localKnown, resolverKnown);\n }\n isValidFullName(fullName) {\n return VALID_FULL_NAME_REGEXP.test(fullName);\n }\n}\nif (DEBUG) {\n const proto = Registry.prototype;\n proto.normalizeInjectionsHash = function (hash) {\n let injections = [];\n for (let key in hash) {\n if (Object.prototype.hasOwnProperty.call(hash, key)) {\n let value = hash[key];\n assert('has value', value);\n let {\n specifier\n } = value;\n assert(`Expected a proper full name, given '${specifier}'`, this.isValidFullName(specifier));\n injections.push({\n property: key,\n specifier\n });\n }\n }\n return injections;\n };\n proto.validateInjections = function (injections) {\n if (!injections) {\n return;\n }\n for (let injection of injections) {\n let {\n specifier\n } = injection;\n assert(`Attempting to inject an unknown injection: '${specifier}'`, this.has(specifier));\n }\n };\n}\nfunction resolve(registry, _normalizedName) {\n let normalizedName = _normalizedName;\n let cached = registry._resolveCache[normalizedName];\n if (cached !== undefined) {\n return cached;\n }\n if (registry._failSet.has(normalizedName)) {\n return;\n }\n let resolved;\n if (registry.resolver) {\n resolved = registry.resolver.resolve(normalizedName);\n }\n if (resolved === undefined) {\n resolved = registry.registrations[normalizedName];\n }\n if (resolved === undefined) {\n registry._failSet.add(normalizedName);\n } else {\n registry._resolveCache[normalizedName] = resolved;\n }\n return resolved;\n}\nfunction has(registry, fullName) {\n return registry.resolve(fullName) !== undefined;\n}\nconst privateNames = dictionary(null);\nconst privateSuffix = `${Math.random()}${Date.now()}`.replace('.', '');\nfunction privatize([fullName]) {\n assert('has a single string argument', arguments.length === 1 && fullName);\n let name = privateNames[fullName];\n if (name) {\n return name;\n }\n let [type, rawName] = fullName.split(':');\n return privateNames[fullName] = intern(`${type}:${rawName}-${privateSuffix}`);\n}\n\nexport { Container, INIT_FACTORY, Registry, getFactoryFor, privatize, setFactoryFor };\n","import { DEBUG } from '@glimmer/env';\n\n// from lodash to catch fake globals\nfunction checkGlobal(value) {\n return value && value.Object === Object ? value : undefined;\n}\n// element ids can ruin global miss checks\nfunction checkElementIdShadowing(value) {\n return value && value.nodeType === undefined ? value : undefined;\n}\n// export real global\nvar global$1 = checkGlobal(checkElementIdShadowing(typeof global === 'object' && global)) || checkGlobal(typeof self === 'object' && self) || checkGlobal(typeof window === 'object' && window) || typeof mainContext !== 'undefined' && mainContext ||\n// set before strict mode in Ember loader/wrapper\nnew Function('return this')(); // eval outside of strict mode\n\n// legacy imports/exports/lookup stuff (should we keep this??)\nconst context = function (global, Ember) {\n return Ember === undefined ? {\n imports: global,\n exports: global,\n lookup: global\n } : {\n // import jQuery\n imports: Ember.imports || global,\n // export Ember\n exports: Ember.exports || global,\n // search for Namespaces\n lookup: Ember.lookup || global\n };\n}(global$1, global$1.Ember);\nfunction getLookup() {\n return context.lookup;\n}\nfunction setLookup(value) {\n context.lookup = value;\n}\n\n/**\n The hash of environment variables used to control various configuration\n settings. To specify your own or override default settings, add the\n desired properties to a global hash named `EmberENV` (or `ENV` for\n backwards compatibility with earlier versions of Ember). The `EmberENV`\n hash must be created before loading Ember.\n\n @class EmberENV\n @type Object\n @public\n*/\nconst ENV = {\n ENABLE_OPTIONAL_FEATURES: false,\n /**\n Determines whether Ember should add to `Array`\n native object prototypes, a few extra methods in order to provide a more\n friendly API.\n We generally recommend leaving this option set to true however, if you need\n to turn it off, you can add the configuration property\n `EXTEND_PROTOTYPES` to `EmberENV` and set it to `false`.\n Note, when disabled (the default configuration for Ember Addons), you will\n instead have to access all methods and functions from the Ember\n namespace.\n @property EXTEND_PROTOTYPES\n @type Boolean\n @default true\n @for EmberENV\n @public\n */\n EXTEND_PROTOTYPES: {\n Array: true\n },\n /**\n The `LOG_STACKTRACE_ON_DEPRECATION` property, when true, tells Ember to log\n a full stack trace during deprecation warnings.\n @property LOG_STACKTRACE_ON_DEPRECATION\n @type Boolean\n @default true\n @for EmberENV\n @public\n */\n LOG_STACKTRACE_ON_DEPRECATION: true,\n /**\n The `LOG_VERSION` property, when true, tells Ember to log versions of all\n dependent libraries in use.\n @property LOG_VERSION\n @type Boolean\n @default true\n @for EmberENV\n @public\n */\n LOG_VERSION: true,\n RAISE_ON_DEPRECATION: false,\n STRUCTURED_PROFILE: false,\n /**\n Whether to insert a `
` wrapper around the\n application template. See RFC #280.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _APPLICATION_TEMPLATE_WRAPPER\n @for EmberENV\n @type Boolean\n @default true\n @private\n */\n _APPLICATION_TEMPLATE_WRAPPER: true,\n /**\n Whether to use Glimmer Component semantics (as opposed to the classic \"Curly\"\n components semantics) for template-only components. See RFC #278.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _TEMPLATE_ONLY_GLIMMER_COMPONENTS\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _TEMPLATE_ONLY_GLIMMER_COMPONENTS: false,\n /**\n Whether to perform extra bookkeeping needed to make the `captureRenderTree`\n API work.\n This has to be set before the ember JavaScript code is evaluated. This is\n usually done by setting `window.EmberENV = { _DEBUG_RENDER_TREE: true };`\n before the \"vendor\" `