@studiometa/js-toolkit 3.9.0-beta.1 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Base/Base.d.ts +5 -1
- package/dist/Base/Base.js +12 -13
- package/dist/Base/Base.js.map +2 -2
- package/dist/Base/managers/AbstractManager.d.ts +1 -1
- package/dist/Base/managers/AbstractManager.js.map +1 -1
- package/dist/Base/managers/ChildrenManager.d.ts +1 -1
- package/dist/Base/managers/ChildrenManager.js +1 -1
- package/dist/Base/managers/ChildrenManager.js.map +2 -2
- package/dist/Base/managers/EventsManager.d.ts +1 -1
- package/dist/Base/managers/EventsManager.js +3 -2
- package/dist/Base/managers/EventsManager.js.map +2 -2
- package/dist/Base/managers/OptionsManager.d.ts +1 -1
- package/dist/Base/managers/OptionsManager.js +2 -9
- package/dist/Base/managers/OptionsManager.js.map +2 -2
- package/dist/Base/managers/RefsManager.js +6 -9
- package/dist/Base/managers/RefsManager.js.map +2 -2
- package/dist/Base/managers/ResponsiveOptionsManager.d.ts +1 -2
- package/dist/Base/managers/ResponsiveOptionsManager.js +3 -3
- package/dist/Base/managers/ResponsiveOptionsManager.js.map +2 -2
- package/dist/Base/managers/ServicesManager.d.ts +6 -2
- package/dist/Base/managers/ServicesManager.js +7 -2
- package/dist/Base/managers/ServicesManager.js.map +2 -2
- package/dist/Base/types.d.ts +7 -3
- package/dist/Base/utils.d.ts +1 -1
- package/dist/Base/utils.js +3 -1
- package/dist/Base/utils.js.map +2 -2
- package/dist/autoload/define-manifest.js.map +1 -1
- package/dist/autoload/loader.d.ts +1 -1
- package/dist/autoload/loader.js.map +2 -2
- package/dist/autoload/types.d.ts +1 -1
- package/dist/decorators/withBreakpointManager.d.ts +1 -1
- package/dist/decorators/withBreakpointManager.js +2 -2
- package/dist/decorators/withBreakpointManager.js.map +2 -2
- package/dist/decorators/withBreakpointObserver.d.ts +1 -1
- package/dist/decorators/withBreakpointObserver.js +3 -2
- package/dist/decorators/withBreakpointObserver.js.map +2 -2
- package/dist/decorators/withDrag.d.ts +2 -2
- package/dist/decorators/withDrag.js +3 -1
- package/dist/decorators/withDrag.js.map +2 -2
- package/dist/decorators/withExtraConfig.d.ts +1 -1
- package/dist/decorators/withExtraConfig.js.map +1 -1
- package/dist/decorators/withFreezedOptions.d.ts +1 -1
- package/dist/decorators/withFreezedOptions.js.map +1 -1
- package/dist/decorators/withGroup.d.ts +1 -1
- package/dist/decorators/withGroup.js.map +1 -1
- package/dist/decorators/withIntersectionObserver.d.ts +1 -1
- package/dist/decorators/withIntersectionObserver.js +1 -1
- package/dist/decorators/withIntersectionObserver.js.map +1 -1
- package/dist/decorators/withMountOnMediaQuery.d.ts +2 -2
- package/dist/decorators/withMountOnMediaQuery.js.map +1 -1
- package/dist/decorators/withMountWhenInView.d.ts +2 -2
- package/dist/decorators/withMountWhenInView.js.map +1 -1
- package/dist/decorators/withMountWhenPrefersMotion.d.ts +1 -1
- package/dist/decorators/withMountWhenPrefersMotion.js.map +2 -2
- package/dist/decorators/withMutation.d.ts +2 -2
- package/dist/decorators/withMutation.js +3 -1
- package/dist/decorators/withMutation.js.map +2 -2
- package/dist/decorators/withName.d.ts +1 -1
- package/dist/decorators/withName.js.map +1 -1
- package/dist/decorators/withRelativePointer.d.ts +2 -2
- package/dist/decorators/withRelativePointer.js +1 -1
- package/dist/decorators/withRelativePointer.js.map +2 -2
- package/dist/decorators/withResponsiveOptions.d.ts +2 -2
- package/dist/decorators/withResponsiveOptions.js +1 -1
- package/dist/decorators/withResponsiveOptions.js.map +2 -2
- package/dist/decorators/withScrolledInView/utils.js +2 -1
- package/dist/decorators/withScrolledInView/utils.js.map +2 -2
- package/dist/decorators/withScrolledInView/withScrolledInView.d.ts +5 -3
- package/dist/decorators/withScrolledInView/withScrolledInView.js +8 -10
- package/dist/decorators/withScrolledInView/withScrolledInView.js.map +2 -2
- package/dist/helpers/createApp.d.ts +2 -2
- package/dist/helpers/createApp.js +1 -1
- package/dist/helpers/createApp.js.map +2 -2
- package/dist/helpers/defineFeatures.d.ts +1 -1
- package/dist/helpers/defineFeatures.js +1 -1
- package/dist/helpers/defineFeatures.js.map +2 -2
- package/dist/helpers/getClosestParent.d.ts +1 -1
- package/dist/helpers/getClosestParent.js +1 -1
- package/dist/helpers/getClosestParent.js.map +2 -2
- package/dist/helpers/getDirectChildren.d.ts +1 -1
- package/dist/helpers/getDirectChildren.js +1 -1
- package/dist/helpers/getDirectChildren.js.map +1 -1
- package/dist/helpers/getInstanceFromElement.d.ts +1 -1
- package/dist/helpers/getInstanceFromElement.js.map +1 -1
- package/dist/helpers/importOnInteraction.d.ts +1 -1
- package/dist/helpers/importOnInteraction.js +2 -1
- package/dist/helpers/importOnInteraction.js.map +2 -2
- package/dist/helpers/importOnMediaQuery.d.ts +1 -1
- package/dist/helpers/importOnMediaQuery.js +1 -1
- package/dist/helpers/importOnMediaQuery.js.map +1 -1
- package/dist/helpers/importWhenIdle.d.ts +1 -1
- package/dist/helpers/importWhenIdle.js +1 -1
- package/dist/helpers/importWhenIdle.js.map +1 -1
- package/dist/helpers/importWhenPrefersMotion.d.ts +1 -1
- package/dist/helpers/importWhenPrefersMotion.js.map +1 -1
- package/dist/helpers/importWhenVisible.d.ts +1 -1
- package/dist/helpers/importWhenVisible.js +1 -1
- package/dist/helpers/importWhenVisible.js.map +2 -2
- package/dist/helpers/logTree.js +1 -1
- package/dist/helpers/logTree.js.map +1 -1
- package/dist/helpers/queryComponent.d.ts +1 -1
- package/dist/helpers/queryComponent.js.map +1 -1
- package/dist/helpers/registerComponent.js +1 -1
- package/dist/helpers/registerComponent.js.map +1 -1
- package/dist/helpers/registerComponents.js +1 -1
- package/dist/helpers/registerComponents.js.map +1 -1
- package/dist/helpers/utils.js +1 -1
- package/dist/helpers/utils.js.map +2 -2
- package/dist/services/DragService.d.ts +1 -2
- package/dist/services/DragService.js +2 -2
- package/dist/services/DragService.js.map +2 -2
- package/dist/subpaths/AbstractService.d.ts +1 -1
- package/dist/subpaths/AbstractService.js +1 -1
- package/dist/subpaths/AbstractService.js.map +1 -1
- package/dist/subpaths/AutoloadHandle.d.ts +1 -1
- package/dist/subpaths/AutoloadOptions.d.ts +1 -1
- package/dist/subpaths/AutoloadRuntime.d.ts +1 -1
- package/dist/subpaths/Base.d.ts +1 -1
- package/dist/subpaths/Base.js +1 -1
- package/dist/subpaths/Base.js.map +1 -1
- package/dist/subpaths/BaseAsyncConstructor.d.ts +1 -1
- package/dist/subpaths/BaseChildren.d.ts +1 -1
- package/dist/subpaths/BaseConfig.d.ts +1 -1
- package/dist/subpaths/BaseConfigComponents.d.ts +1 -1
- package/dist/subpaths/BaseConstructor.d.ts +1 -1
- package/dist/subpaths/BaseEl.d.ts +1 -1
- package/dist/subpaths/BaseOptions.d.ts +1 -1
- package/dist/subpaths/BaseProps.d.ts +1 -1
- package/dist/subpaths/BaseRefs.d.ts +1 -1
- package/dist/subpaths/ComponentLoadStrategy.d.ts +1 -1
- package/dist/subpaths/ComponentLoader.d.ts +1 -1
- package/dist/subpaths/ComponentLoader.js +1 -1
- package/dist/subpaths/ComponentLoader.js.map +1 -1
- package/dist/subpaths/ComponentLoaderOptions.d.ts +1 -1
- package/dist/subpaths/ComponentLoaderStartOptions.d.ts +1 -1
- package/dist/subpaths/ComponentManifest.d.ts +1 -1
- package/dist/subpaths/ComponentManifestEntry.d.ts +1 -1
- package/dist/subpaths/ComponentOverride.d.ts +1 -1
- package/dist/subpaths/CreateAppOptions.d.ts +1 -1
- package/dist/subpaths/DEFAULT_DIAGNOSTIC_PREFIX.d.ts +1 -1
- package/dist/subpaths/DEFAULT_DIAGNOSTIC_PREFIX.js +1 -1
- package/dist/subpaths/DEFAULT_DIAGNOSTIC_PREFIX.js.map +1 -1
- package/dist/subpaths/DefineManifestOptions.d.ts +1 -1
- package/dist/subpaths/DragDecoratorOptions.d.ts +1 -1
- package/dist/subpaths/DragService.d.ts +1 -1
- package/dist/subpaths/DragService.js +1 -1
- package/dist/subpaths/DragService.js.map +1 -1
- package/dist/subpaths/DragServiceInterface.d.ts +1 -1
- package/dist/subpaths/DragServiceOptions.d.ts +1 -1
- package/dist/subpaths/DragServiceProps.d.ts +1 -1
- package/dist/subpaths/IDLE_TIMEOUT.d.ts +1 -1
- package/dist/subpaths/IDLE_TIMEOUT.js +1 -1
- package/dist/subpaths/IDLE_TIMEOUT.js.map +1 -1
- package/dist/subpaths/KeyService.d.ts +1 -1
- package/dist/subpaths/KeyService.js +1 -1
- package/dist/subpaths/KeyService.js.map +1 -1
- package/dist/subpaths/KeyServiceInterface.d.ts +1 -1
- package/dist/subpaths/KeyServiceProps.d.ts +1 -1
- package/dist/subpaths/LoadService.d.ts +1 -1
- package/dist/subpaths/LoadService.js +1 -1
- package/dist/subpaths/LoadService.js.map +1 -1
- package/dist/subpaths/LoadServiceInterface.d.ts +1 -1
- package/dist/subpaths/LoadServiceProps.d.ts +1 -1
- package/dist/subpaths/LoaderDependencies.d.ts +1 -1
- package/dist/subpaths/Managers.d.ts +1 -1
- package/dist/subpaths/ModuleRecord.d.ts +1 -1
- package/dist/subpaths/MutationDecoratorOptions.d.ts +1 -1
- package/dist/subpaths/MutationService.d.ts +1 -1
- package/dist/subpaths/MutationService.js +1 -1
- package/dist/subpaths/MutationService.js.map +1 -1
- package/dist/subpaths/MutationServiceInterface.d.ts +1 -1
- package/dist/subpaths/MutationServiceOptions.d.ts +1 -1
- package/dist/subpaths/MutationServiceProps.d.ts +1 -1
- package/dist/subpaths/NormalizedOffset.d.ts +1 -1
- package/dist/subpaths/OffsetValue.d.ts +1 -1
- package/dist/subpaths/PointerService.d.ts +1 -1
- package/dist/subpaths/PointerService.js +1 -1
- package/dist/subpaths/PointerService.js.map +1 -1
- package/dist/subpaths/PointerServiceInterface.d.ts +1 -1
- package/dist/subpaths/PointerServiceProps.d.ts +1 -1
- package/dist/subpaths/QueryOptions.d.ts +1 -1
- package/dist/subpaths/RafService.d.ts +1 -1
- package/dist/subpaths/RafService.js +1 -1
- package/dist/subpaths/RafService.js.map +1 -1
- package/dist/subpaths/RafServiceInterface.d.ts +1 -1
- package/dist/subpaths/RafServiceProps.d.ts +1 -1
- package/dist/subpaths/RegisterManifestOptions.d.ts +1 -1
- package/dist/subpaths/RelativePointerDecoratorOptions.d.ts +1 -1
- package/dist/subpaths/RelativePointerInterface.d.ts +1 -1
- package/dist/subpaths/ResizeService.d.ts +1 -1
- package/dist/subpaths/ResizeService.js +1 -1
- package/dist/subpaths/ResizeService.js.map +1 -1
- package/dist/subpaths/ResizeServiceInterface.d.ts +1 -1
- package/dist/subpaths/ResizeServiceProps.d.ts +1 -1
- package/dist/subpaths/ScrollInViewProps.d.ts +1 -1
- package/dist/subpaths/ScrollService.d.ts +1 -1
- package/dist/subpaths/ScrollService.js +1 -1
- package/dist/subpaths/ScrollService.js.map +1 -1
- package/dist/subpaths/ScrollServiceInterface.d.ts +1 -1
- package/dist/subpaths/ScrollServiceProps.d.ts +1 -1
- package/dist/subpaths/ServiceConfig.d.ts +1 -1
- package/dist/subpaths/ServiceInterface.d.ts +1 -1
- package/dist/subpaths/VISIBLE_ROOT_MARGIN.d.ts +1 -1
- package/dist/subpaths/VISIBLE_ROOT_MARGIN.js +1 -1
- package/dist/subpaths/VISIBLE_ROOT_MARGIN.js.map +1 -1
- package/dist/subpaths/WebpackContextLike.d.ts +1 -1
- package/dist/subpaths/WithBreakpointObserverInterface.d.ts +1 -1
- package/dist/subpaths/WithBreakpointObserverProps.d.ts +1 -1
- package/dist/subpaths/WithDragInterface.d.ts +1 -1
- package/dist/subpaths/WithFreezedOptionsInterface.d.ts +1 -1
- package/dist/subpaths/WithGroupInterface.d.ts +1 -1
- package/dist/subpaths/WithGroupOptions.d.ts +1 -1
- package/dist/subpaths/WithGroupProps.d.ts +1 -1
- package/dist/subpaths/WithIntersectionObserverInterface.d.ts +1 -1
- package/dist/subpaths/WithIntersectionObserverProps.d.ts +1 -1
- package/dist/subpaths/WithMountWhenInViewInterface.d.ts +1 -1
- package/dist/subpaths/WithMountWhenInViewProps.d.ts +1 -1
- package/dist/subpaths/WithMutationInterface.d.ts +1 -1
- package/dist/subpaths/WithScrolledInViewInterface.d.ts +1 -1
- package/dist/subpaths/WithScrolledInViewOptions.d.ts +1 -1
- package/dist/subpaths/WithScrolledInViewProps.d.ts +1 -1
- package/dist/subpaths/autoload.d.ts +1 -1
- package/dist/subpaths/autoload.js +1 -1
- package/dist/subpaths/autoload.js.map +1 -1
- package/dist/subpaths/closestComponent.d.ts +1 -1
- package/dist/subpaths/closestComponent.js +1 -1
- package/dist/subpaths/closestComponent.js.map +1 -1
- package/dist/subpaths/composeManifests.d.ts +1 -1
- package/dist/subpaths/composeManifests.js +1 -1
- package/dist/subpaths/composeManifests.js.map +1 -1
- package/dist/subpaths/createApp.d.ts +1 -1
- package/dist/subpaths/createApp.js +1 -1
- package/dist/subpaths/createApp.js.map +1 -1
- package/dist/subpaths/defineFeatures.d.ts +1 -1
- package/dist/subpaths/defineFeatures.js +1 -1
- package/dist/subpaths/defineFeatures.js.map +1 -1
- package/dist/subpaths/defineManifest.d.ts +1 -1
- package/dist/subpaths/defineManifest.js +1 -1
- package/dist/subpaths/defineManifest.js.map +1 -1
- package/dist/subpaths/fromMetaGlob.d.ts +1 -1
- package/dist/subpaths/fromMetaGlob.js +1 -1
- package/dist/subpaths/fromMetaGlob.js.map +1 -1
- package/dist/subpaths/fromWebpackContext.d.ts +1 -1
- package/dist/subpaths/fromWebpackContext.js +1 -1
- package/dist/subpaths/fromWebpackContext.js.map +1 -1
- package/dist/subpaths/getClosestParent.d.ts +1 -1
- package/dist/subpaths/getClosestParent.js +1 -1
- package/dist/subpaths/getClosestParent.js.map +1 -1
- package/dist/subpaths/getDirectChildren.d.ts +1 -1
- package/dist/subpaths/getDirectChildren.js +1 -1
- package/dist/subpaths/getDirectChildren.js.map +1 -1
- package/dist/subpaths/getInstanceFromElement.d.ts +1 -1
- package/dist/subpaths/getInstanceFromElement.js +1 -1
- package/dist/subpaths/getInstanceFromElement.js.map +1 -1
- package/dist/subpaths/getInstances.d.ts +1 -1
- package/dist/subpaths/getInstances.js +1 -1
- package/dist/subpaths/getInstances.js.map +1 -1
- package/dist/subpaths/getScopedGroups.d.ts +1 -1
- package/dist/subpaths/getScopedGroups.js +1 -1
- package/dist/subpaths/getScopedGroups.js.map +1 -1
- package/dist/subpaths/importOnInteraction.d.ts +1 -1
- package/dist/subpaths/importOnInteraction.js +1 -1
- package/dist/subpaths/importOnInteraction.js.map +1 -1
- package/dist/subpaths/importOnMediaQuery.d.ts +1 -1
- package/dist/subpaths/importOnMediaQuery.js +1 -1
- package/dist/subpaths/importOnMediaQuery.js.map +1 -1
- package/dist/subpaths/importWhenIdle.d.ts +1 -1
- package/dist/subpaths/importWhenIdle.js +1 -1
- package/dist/subpaths/importWhenIdle.js.map +1 -1
- package/dist/subpaths/importWhenPrefersMotion.d.ts +1 -1
- package/dist/subpaths/importWhenPrefersMotion.js +1 -1
- package/dist/subpaths/importWhenPrefersMotion.js.map +1 -1
- package/dist/subpaths/importWhenVisible.d.ts +1 -1
- package/dist/subpaths/importWhenVisible.js +1 -1
- package/dist/subpaths/importWhenVisible.js.map +1 -1
- package/dist/subpaths/isDirectChild.d.ts +1 -1
- package/dist/subpaths/isDirectChild.js +1 -1
- package/dist/subpaths/isDirectChild.js.map +1 -1
- package/dist/subpaths/logTree.d.ts +1 -1
- package/dist/subpaths/logTree.js +1 -1
- package/dist/subpaths/logTree.js.map +1 -1
- package/dist/subpaths/queryComponent.d.ts +1 -1
- package/dist/subpaths/queryComponent.js +1 -1
- package/dist/subpaths/queryComponent.js.map +1 -1
- package/dist/subpaths/queryComponentAll.d.ts +1 -1
- package/dist/subpaths/queryComponentAll.js +1 -1
- package/dist/subpaths/queryComponentAll.js.map +1 -1
- package/dist/subpaths/readEagerTokens.d.ts +1 -1
- package/dist/subpaths/readEagerTokens.js +1 -1
- package/dist/subpaths/readEagerTokens.js.map +1 -1
- package/dist/subpaths/registerComponent.d.ts +1 -1
- package/dist/subpaths/registerComponent.js +1 -1
- package/dist/subpaths/registerComponent.js.map +1 -1
- package/dist/subpaths/registerComponents.d.ts +1 -1
- package/dist/subpaths/registerComponents.js +1 -1
- package/dist/subpaths/registerComponents.js.map +1 -1
- package/dist/subpaths/registerManifest.d.ts +1 -1
- package/dist/subpaths/registerManifest.js +1 -1
- package/dist/subpaths/registerManifest.js.map +1 -1
- package/dist/subpaths/registerManifests.d.ts +1 -1
- package/dist/subpaths/registerManifests.js +1 -1
- package/dist/subpaths/registerManifests.js.map +1 -1
- package/dist/subpaths/useDrag.d.ts +1 -1
- package/dist/subpaths/useDrag.js +1 -1
- package/dist/subpaths/useDrag.js.map +1 -1
- package/dist/subpaths/useKey.d.ts +1 -1
- package/dist/subpaths/useKey.js +1 -1
- package/dist/subpaths/useKey.js.map +1 -1
- package/dist/subpaths/useLoad.d.ts +1 -1
- package/dist/subpaths/useLoad.js +1 -1
- package/dist/subpaths/useLoad.js.map +1 -1
- package/dist/subpaths/useMutation.d.ts +1 -1
- package/dist/subpaths/useMutation.js +1 -1
- package/dist/subpaths/useMutation.js.map +1 -1
- package/dist/subpaths/usePointer.d.ts +1 -1
- package/dist/subpaths/usePointer.js +1 -1
- package/dist/subpaths/usePointer.js.map +1 -1
- package/dist/subpaths/useRaf.d.ts +1 -1
- package/dist/subpaths/useRaf.js +1 -1
- package/dist/subpaths/useRaf.js.map +1 -1
- package/dist/subpaths/useResize.d.ts +1 -1
- package/dist/subpaths/useResize.js +1 -1
- package/dist/subpaths/useResize.js.map +1 -1
- package/dist/subpaths/useScroll.d.ts +1 -1
- package/dist/subpaths/useScroll.js +1 -1
- package/dist/subpaths/useScroll.js.map +1 -1
- package/dist/subpaths/utils/Animate.1.d.ts +1 -1
- package/dist/subpaths/utils/AnimateOptions.d.ts +1 -1
- package/dist/subpaths/utils/CSSCustomPropertyName.d.ts +1 -1
- package/dist/subpaths/utils/EasingFunction.d.ts +1 -1
- package/dist/subpaths/utils/Keyframe.d.ts +1 -1
- package/dist/subpaths/utils/NormalizedKeyframe.d.ts +1 -1
- package/dist/subpaths/utils/StorageInstance.d.ts +1 -1
- package/dist/subpaths/utils/StorageOptions.d.ts +1 -1
- package/dist/subpaths/utils/StorageProvider.d.ts +1 -1
- package/dist/subpaths/utils/StorageSerializer.d.ts +1 -1
- package/dist/subpaths/utils/TransformProps.d.ts +1 -1
- package/dist/subpaths/utils/UrlProviderOptions.d.ts +1 -1
- package/dist/subpaths/utils/addClass.d.ts +1 -1
- package/dist/subpaths/utils/addClass.js +3 -3
- package/dist/subpaths/utils/addClass.js.map +3 -3
- package/dist/subpaths/utils/addStyle.d.ts +1 -1
- package/dist/subpaths/utils/addStyle.js +3 -3
- package/dist/subpaths/utils/addStyle.js.map +3 -3
- package/dist/subpaths/utils/animate.d.ts +1 -1
- package/dist/subpaths/utils/animate.js +1 -1
- package/dist/subpaths/utils/animate.js.map +1 -1
- package/dist/subpaths/utils/boundingRectToCircle.d.ts +1 -1
- package/dist/subpaths/utils/boundingRectToCircle.js +1 -1
- package/dist/subpaths/utils/boundingRectToCircle.js.map +1 -1
- package/dist/subpaths/utils/camelCase.d.ts +1 -1
- package/dist/subpaths/utils/camelCase.js +1 -1
- package/dist/subpaths/utils/camelCase.js.map +1 -1
- package/dist/subpaths/utils/clamp.d.ts +1 -1
- package/dist/subpaths/utils/clamp.js +1 -1
- package/dist/subpaths/utils/clamp.js.map +1 -1
- package/dist/subpaths/utils/clamp01.d.ts +1 -1
- package/dist/subpaths/utils/clamp01.js +1 -1
- package/dist/subpaths/utils/clamp01.js.map +1 -1
- package/dist/subpaths/utils/collideCircleCircle.d.ts +1 -1
- package/dist/subpaths/utils/collideCircleCircle.js +1 -1
- package/dist/subpaths/utils/collideCircleCircle.js.map +1 -1
- package/dist/subpaths/utils/collideCircleRect.d.ts +1 -1
- package/dist/subpaths/utils/collideCircleRect.js +1 -1
- package/dist/subpaths/utils/collideCircleRect.js.map +1 -1
- package/dist/subpaths/utils/collidePointCircle.d.ts +1 -1
- package/dist/subpaths/utils/collidePointCircle.js +1 -1
- package/dist/subpaths/utils/collidePointCircle.js.map +1 -1
- package/dist/subpaths/utils/collidePointRect.d.ts +1 -1
- package/dist/subpaths/utils/collidePointRect.js +1 -1
- package/dist/subpaths/utils/collidePointRect.js.map +1 -1
- package/dist/subpaths/utils/collideRectRect.d.ts +1 -1
- package/dist/subpaths/utils/collideRectRect.js +1 -1
- package/dist/subpaths/utils/collideRectRect.js.map +1 -1
- package/dist/subpaths/utils/createEaseInOut.d.ts +1 -1
- package/dist/subpaths/utils/createEaseInOut.js +1 -1
- package/dist/subpaths/utils/createEaseInOut.js.map +1 -1
- package/dist/subpaths/utils/createEaseOut.d.ts +1 -1
- package/dist/subpaths/utils/createEaseOut.js +1 -1
- package/dist/subpaths/utils/createEaseOut.js.map +1 -1
- package/dist/subpaths/utils/createElement.d.ts +1 -1
- package/dist/subpaths/utils/createElement.js +1 -1
- package/dist/subpaths/utils/createElement.js.map +1 -1
- package/dist/subpaths/utils/createLocalStorage.d.ts +1 -1
- package/dist/subpaths/utils/createLocalStorage.js +1 -1
- package/dist/subpaths/utils/createLocalStorage.js.map +1 -1
- package/dist/subpaths/utils/createLocalStorageProvider.d.ts +1 -1
- package/dist/subpaths/utils/createLocalStorageProvider.js +1 -1
- package/dist/subpaths/utils/createLocalStorageProvider.js.map +1 -1
- package/dist/subpaths/utils/createMemoryStorageProvider.d.ts +1 -1
- package/dist/subpaths/utils/createMemoryStorageProvider.js +1 -1
- package/dist/subpaths/utils/createMemoryStorageProvider.js.map +1 -1
- package/dist/subpaths/utils/createNoopProvider.d.ts +1 -1
- package/dist/subpaths/utils/createNoopProvider.js +1 -1
- package/dist/subpaths/utils/createNoopProvider.js.map +1 -1
- package/dist/subpaths/utils/createRange.d.ts +1 -1
- package/dist/subpaths/utils/createRange.js +1 -1
- package/dist/subpaths/utils/createRange.js.map +1 -1
- package/dist/subpaths/utils/createSessionStorage.d.ts +1 -1
- package/dist/subpaths/utils/createSessionStorage.js +1 -1
- package/dist/subpaths/utils/createSessionStorage.js.map +1 -1
- package/dist/subpaths/utils/createSessionStorageProvider.d.ts +1 -1
- package/dist/subpaths/utils/createSessionStorageProvider.js +1 -1
- package/dist/subpaths/utils/createSessionStorageProvider.js.map +1 -1
- package/dist/subpaths/utils/createStorage.d.ts +1 -1
- package/dist/subpaths/utils/createStorage.js +1 -1
- package/dist/subpaths/utils/createStorage.js.map +1 -1
- package/dist/subpaths/utils/createUrlSearchParamsInHashProvider.d.ts +1 -1
- package/dist/subpaths/utils/createUrlSearchParamsInHashProvider.js +1 -1
- package/dist/subpaths/utils/createUrlSearchParamsInHashProvider.js.map +1 -1
- package/dist/subpaths/utils/createUrlSearchParamsInHashStorage.d.ts +1 -1
- package/dist/subpaths/utils/createUrlSearchParamsInHashStorage.js +1 -1
- package/dist/subpaths/utils/createUrlSearchParamsInHashStorage.js.map +1 -1
- package/dist/subpaths/utils/createUrlSearchParamsProvider.d.ts +1 -1
- package/dist/subpaths/utils/createUrlSearchParamsProvider.js +1 -1
- package/dist/subpaths/utils/createUrlSearchParamsProvider.js.map +1 -1
- package/dist/subpaths/utils/createUrlSearchParamsStorage.d.ts +1 -1
- package/dist/subpaths/utils/createUrlSearchParamsStorage.js +1 -1
- package/dist/subpaths/utils/createUrlSearchParamsStorage.js.map +1 -1
- package/dist/subpaths/utils/damp.d.ts +1 -1
- package/dist/subpaths/utils/damp.js +1 -1
- package/dist/subpaths/utils/damp.js.map +1 -1
- package/dist/subpaths/utils/dashCase.d.ts +1 -1
- package/dist/subpaths/utils/dashCase.js +1 -1
- package/dist/subpaths/utils/dashCase.js.map +1 -1
- package/dist/subpaths/utils/easeInCirc.d.ts +1 -1
- package/dist/subpaths/utils/easeInCirc.js +1 -1
- package/dist/subpaths/utils/easeInCirc.js.map +1 -1
- package/dist/subpaths/utils/easeInCubic.d.ts +1 -1
- package/dist/subpaths/utils/easeInCubic.js +1 -1
- package/dist/subpaths/utils/easeInCubic.js.map +1 -1
- package/dist/subpaths/utils/easeInExpo.d.ts +1 -1
- package/dist/subpaths/utils/easeInExpo.js +1 -1
- package/dist/subpaths/utils/easeInExpo.js.map +1 -1
- package/dist/subpaths/utils/easeInOutCirc.d.ts +1 -1
- package/dist/subpaths/utils/easeInOutCirc.js +1 -1
- package/dist/subpaths/utils/easeInOutCirc.js.map +1 -1
- package/dist/subpaths/utils/easeInOutCubic.d.ts +1 -1
- package/dist/subpaths/utils/easeInOutCubic.js +1 -1
- package/dist/subpaths/utils/easeInOutCubic.js.map +1 -1
- package/dist/subpaths/utils/easeInOutExpo.d.ts +1 -1
- package/dist/subpaths/utils/easeInOutExpo.js +1 -1
- package/dist/subpaths/utils/easeInOutExpo.js.map +1 -1
- package/dist/subpaths/utils/easeInOutQuad.d.ts +1 -1
- package/dist/subpaths/utils/easeInOutQuad.js +1 -1
- package/dist/subpaths/utils/easeInOutQuad.js.map +1 -1
- package/dist/subpaths/utils/easeInOutQuart.d.ts +1 -1
- package/dist/subpaths/utils/easeInOutQuart.js +1 -1
- package/dist/subpaths/utils/easeInOutQuart.js.map +1 -1
- package/dist/subpaths/utils/easeInOutQuint.d.ts +1 -1
- package/dist/subpaths/utils/easeInOutQuint.js +1 -1
- package/dist/subpaths/utils/easeInOutQuint.js.map +1 -1
- package/dist/subpaths/utils/easeInOutSine.d.ts +1 -1
- package/dist/subpaths/utils/easeInOutSine.js +1 -1
- package/dist/subpaths/utils/easeInOutSine.js.map +1 -1
- package/dist/subpaths/utils/easeInQuad.d.ts +1 -1
- package/dist/subpaths/utils/easeInQuad.js +1 -1
- package/dist/subpaths/utils/easeInQuad.js.map +1 -1
- package/dist/subpaths/utils/easeInQuart.d.ts +1 -1
- package/dist/subpaths/utils/easeInQuart.js +1 -1
- package/dist/subpaths/utils/easeInQuart.js.map +1 -1
- package/dist/subpaths/utils/easeInQuint.d.ts +1 -1
- package/dist/subpaths/utils/easeInQuint.js +1 -1
- package/dist/subpaths/utils/easeInQuint.js.map +1 -1
- package/dist/subpaths/utils/easeInSine.d.ts +1 -1
- package/dist/subpaths/utils/easeInSine.js +1 -1
- package/dist/subpaths/utils/easeInSine.js.map +1 -1
- package/dist/subpaths/utils/easeLinear.d.ts +1 -1
- package/dist/subpaths/utils/easeLinear.js +3 -3
- package/dist/subpaths/utils/easeLinear.js.map +3 -3
- package/dist/subpaths/utils/easeOutCirc.d.ts +1 -1
- package/dist/subpaths/utils/easeOutCirc.js +1 -1
- package/dist/subpaths/utils/easeOutCirc.js.map +1 -1
- package/dist/subpaths/utils/easeOutCubic.d.ts +1 -1
- package/dist/subpaths/utils/easeOutCubic.js +1 -1
- package/dist/subpaths/utils/easeOutCubic.js.map +1 -1
- package/dist/subpaths/utils/easeOutExpo.d.ts +1 -1
- package/dist/subpaths/utils/easeOutExpo.js +1 -1
- package/dist/subpaths/utils/easeOutExpo.js.map +1 -1
- package/dist/subpaths/utils/easeOutQuad.d.ts +1 -1
- package/dist/subpaths/utils/easeOutQuad.js +1 -1
- package/dist/subpaths/utils/easeOutQuad.js.map +1 -1
- package/dist/subpaths/utils/easeOutQuart.d.ts +1 -1
- package/dist/subpaths/utils/easeOutQuart.js +1 -1
- package/dist/subpaths/utils/easeOutQuart.js.map +1 -1
- package/dist/subpaths/utils/easeOutQuint.d.ts +1 -1
- package/dist/subpaths/utils/easeOutQuint.js +1 -1
- package/dist/subpaths/utils/easeOutQuint.js.map +1 -1
- package/dist/subpaths/utils/easeOutSine.d.ts +1 -1
- package/dist/subpaths/utils/easeOutSine.js +1 -1
- package/dist/subpaths/utils/easeOutSine.js.map +1 -1
- package/dist/subpaths/utils/endsWith.d.ts +1 -1
- package/dist/subpaths/utils/endsWith.js +1 -1
- package/dist/subpaths/utils/endsWith.js.map +1 -1
- package/dist/subpaths/utils/fold.d.ts +1 -1
- package/dist/subpaths/utils/fold.js +1 -1
- package/dist/subpaths/utils/fold.js.map +1 -1
- package/dist/subpaths/utils/getAncestorWhere.d.ts +1 -1
- package/dist/subpaths/utils/getAncestorWhere.js +1 -1
- package/dist/subpaths/utils/getAncestorWhere.js.map +1 -1
- package/dist/subpaths/utils/getAncestorWhereUntil.d.ts +1 -1
- package/dist/subpaths/utils/getAncestorWhereUntil.js +1 -1
- package/dist/subpaths/utils/getAncestorWhereUntil.js.map +1 -1
- package/dist/subpaths/utils/getOffsetSizes.d.ts +1 -1
- package/dist/subpaths/utils/getOffsetSizes.js +1 -1
- package/dist/subpaths/utils/getOffsetSizes.js.map +1 -1
- package/dist/subpaths/utils/inertiaFinalValue.d.ts +1 -1
- package/dist/subpaths/utils/inertiaFinalValue.js +1 -1
- package/dist/subpaths/utils/inertiaFinalValue.js.map +1 -1
- package/dist/subpaths/utils/lerp.d.ts +1 -1
- package/dist/subpaths/utils/lerp.js +1 -1
- package/dist/subpaths/utils/lerp.js.map +1 -1
- package/dist/subpaths/utils/localStorageProvider.d.ts +1 -1
- package/dist/subpaths/utils/localStorageProvider.js +1 -1
- package/dist/subpaths/utils/localStorageProvider.js.map +1 -1
- package/dist/subpaths/utils/lowerCase.d.ts +1 -1
- package/dist/subpaths/utils/lowerCase.js +1 -1
- package/dist/subpaths/utils/lowerCase.js.map +1 -1
- package/dist/subpaths/utils/map.d.ts +1 -1
- package/dist/subpaths/utils/map.js +1 -1
- package/dist/subpaths/utils/map.js.map +1 -1
- package/dist/subpaths/utils/matrix.d.ts +1 -1
- package/dist/subpaths/utils/matrix.js +1 -1
- package/dist/subpaths/utils/matrix.js.map +1 -1
- package/dist/subpaths/utils/mean.d.ts +1 -1
- package/dist/subpaths/utils/mean.js +1 -1
- package/dist/subpaths/utils/mean.js.map +1 -1
- package/dist/subpaths/utils/memoryStorageProvider.d.ts +1 -1
- package/dist/subpaths/utils/memoryStorageProvider.js +1 -1
- package/dist/subpaths/utils/memoryStorageProvider.js.map +1 -1
- package/dist/subpaths/utils/pascalCase.d.ts +1 -1
- package/dist/subpaths/utils/pascalCase.js +1 -1
- package/dist/subpaths/utils/pascalCase.js.map +1 -1
- package/dist/subpaths/utils/removeClass.d.ts +1 -1
- package/dist/subpaths/utils/removeClass.js +3 -3
- package/dist/subpaths/utils/removeClass.js.map +3 -3
- package/dist/subpaths/utils/removeStyle.d.ts +1 -1
- package/dist/subpaths/utils/removeStyle.js +3 -3
- package/dist/subpaths/utils/removeStyle.js.map +3 -3
- package/dist/subpaths/utils/round.d.ts +1 -1
- package/dist/subpaths/utils/round.js +1 -1
- package/dist/subpaths/utils/round.js.map +1 -1
- package/dist/subpaths/utils/sessionStorageProvider.d.ts +1 -1
- package/dist/subpaths/utils/sessionStorageProvider.js +1 -1
- package/dist/subpaths/utils/sessionStorageProvider.js.map +1 -1
- package/dist/subpaths/utils/smoothTo.d.ts +1 -1
- package/dist/subpaths/utils/smoothTo.js +1 -1
- package/dist/subpaths/utils/smoothTo.js.map +1 -1
- package/dist/subpaths/utils/snakeCase.d.ts +1 -1
- package/dist/subpaths/utils/snakeCase.js +1 -1
- package/dist/subpaths/utils/snakeCase.js.map +1 -1
- package/dist/subpaths/utils/spring.d.ts +1 -1
- package/dist/subpaths/utils/spring.js +1 -1
- package/dist/subpaths/utils/spring.js.map +1 -1
- package/dist/subpaths/utils/startsWith.d.ts +1 -1
- package/dist/subpaths/utils/startsWith.js +1 -1
- package/dist/subpaths/utils/startsWith.js.map +1 -1
- package/dist/subpaths/utils/toggleClass.d.ts +1 -1
- package/dist/subpaths/utils/toggleClass.js +3 -3
- package/dist/subpaths/utils/toggleClass.js.map +3 -3
- package/dist/subpaths/utils/transform.d.ts +1 -1
- package/dist/subpaths/utils/transform.js +1 -1
- package/dist/subpaths/utils/transform.js.map +1 -1
- package/dist/subpaths/utils/transition.d.ts +1 -1
- package/dist/subpaths/utils/transition.js +1 -1
- package/dist/subpaths/utils/transition.js.map +1 -1
- package/dist/subpaths/utils/upperCase.d.ts +1 -1
- package/dist/subpaths/utils/upperCase.js +1 -1
- package/dist/subpaths/utils/upperCase.js.map +1 -1
- package/dist/subpaths/utils/urlSearchParamsInHashProvider.d.ts +1 -1
- package/dist/subpaths/utils/urlSearchParamsInHashProvider.js +1 -1
- package/dist/subpaths/utils/urlSearchParamsInHashProvider.js.map +1 -1
- package/dist/subpaths/utils/urlSearchParamsProvider.d.ts +1 -1
- package/dist/subpaths/utils/urlSearchParamsProvider.js +1 -1
- package/dist/subpaths/utils/urlSearchParamsProvider.js.map +1 -1
- package/dist/subpaths/utils/withLeadingCharacters.d.ts +1 -1
- package/dist/subpaths/utils/withLeadingCharacters.js +1 -1
- package/dist/subpaths/utils/withLeadingCharacters.js.map +1 -1
- package/dist/subpaths/utils/withLeadingSlash.d.ts +1 -1
- package/dist/subpaths/utils/withLeadingSlash.js +1 -1
- package/dist/subpaths/utils/withLeadingSlash.js.map +1 -1
- package/dist/subpaths/utils/withTrailingCharacters.d.ts +1 -1
- package/dist/subpaths/utils/withTrailingCharacters.js +1 -1
- package/dist/subpaths/utils/withTrailingCharacters.js.map +1 -1
- package/dist/subpaths/utils/withTrailingSlash.d.ts +1 -1
- package/dist/subpaths/utils/withTrailingSlash.js +1 -1
- package/dist/subpaths/utils/withTrailingSlash.js.map +1 -1
- package/dist/subpaths/utils/withoutLeadingCharacters.d.ts +1 -1
- package/dist/subpaths/utils/withoutLeadingCharacters.js +1 -1
- package/dist/subpaths/utils/withoutLeadingCharacters.js.map +1 -1
- package/dist/subpaths/utils/withoutLeadingCharactersRecursive.d.ts +1 -1
- package/dist/subpaths/utils/withoutLeadingCharactersRecursive.js +1 -1
- package/dist/subpaths/utils/withoutLeadingCharactersRecursive.js.map +1 -1
- package/dist/subpaths/utils/withoutLeadingSlash.d.ts +1 -1
- package/dist/subpaths/utils/withoutLeadingSlash.js +1 -1
- package/dist/subpaths/utils/withoutLeadingSlash.js.map +1 -1
- package/dist/subpaths/utils/withoutTrailingCharacters.d.ts +1 -1
- package/dist/subpaths/utils/withoutTrailingCharacters.js +1 -1
- package/dist/subpaths/utils/withoutTrailingCharacters.js.map +1 -1
- package/dist/subpaths/utils/withoutTrailingCharactersRecursive.d.ts +1 -1
- package/dist/subpaths/utils/withoutTrailingCharactersRecursive.js +1 -1
- package/dist/subpaths/utils/withoutTrailingCharactersRecursive.js.map +1 -1
- package/dist/subpaths/utils/withoutTrailingSlash.d.ts +1 -1
- package/dist/subpaths/utils/withoutTrailingSlash.js +1 -1
- package/dist/subpaths/utils/withoutTrailingSlash.js.map +1 -1
- package/dist/subpaths/utils/wrap.d.ts +1 -1
- package/dist/subpaths/utils/wrap.js +1 -1
- package/dist/subpaths/utils/wrap.js.map +1 -1
- package/dist/subpaths/withBreakpointManager.d.ts +1 -1
- package/dist/subpaths/withBreakpointManager.js +1 -1
- package/dist/subpaths/withBreakpointManager.js.map +1 -1
- package/dist/subpaths/withBreakpointObserver.d.ts +1 -1
- package/dist/subpaths/withBreakpointObserver.js +1 -1
- package/dist/subpaths/withBreakpointObserver.js.map +1 -1
- package/dist/subpaths/withDrag.d.ts +1 -1
- package/dist/subpaths/withDrag.js +1 -1
- package/dist/subpaths/withDrag.js.map +1 -1
- package/dist/subpaths/withExtraConfig.d.ts +1 -1
- package/dist/subpaths/withExtraConfig.js +1 -1
- package/dist/subpaths/withExtraConfig.js.map +1 -1
- package/dist/subpaths/withFreezedOptions.d.ts +1 -1
- package/dist/subpaths/withFreezedOptions.js +1 -1
- package/dist/subpaths/withFreezedOptions.js.map +1 -1
- package/dist/subpaths/withGroup.d.ts +1 -1
- package/dist/subpaths/withGroup.js +1 -1
- package/dist/subpaths/withGroup.js.map +1 -1
- package/dist/subpaths/withIntersectionObserver.d.ts +1 -1
- package/dist/subpaths/withIntersectionObserver.js +1 -1
- package/dist/subpaths/withIntersectionObserver.js.map +1 -1
- package/dist/subpaths/withMountOnMediaQuery.d.ts +1 -1
- package/dist/subpaths/withMountOnMediaQuery.js +1 -1
- package/dist/subpaths/withMountOnMediaQuery.js.map +1 -1
- package/dist/subpaths/withMountOnMediaQueryInterface.d.ts +1 -1
- package/dist/subpaths/withMountOnMediaQueryProps.d.ts +1 -1
- package/dist/subpaths/withMountWhenInView.d.ts +1 -1
- package/dist/subpaths/withMountWhenInView.js +1 -1
- package/dist/subpaths/withMountWhenInView.js.map +1 -1
- package/dist/subpaths/withMountWhenPrefersMotion.d.ts +1 -1
- package/dist/subpaths/withMountWhenPrefersMotion.js +1 -1
- package/dist/subpaths/withMountWhenPrefersMotion.js.map +1 -1
- package/dist/subpaths/withMutation.d.ts +1 -1
- package/dist/subpaths/withMutation.js +1 -1
- package/dist/subpaths/withMutation.js.map +1 -1
- package/dist/subpaths/withName.d.ts +1 -1
- package/dist/subpaths/withName.js +1 -1
- package/dist/subpaths/withName.js.map +1 -1
- package/dist/subpaths/withRelativePointer.d.ts +1 -1
- package/dist/subpaths/withRelativePointer.js +1 -1
- package/dist/subpaths/withRelativePointer.js.map +1 -1
- package/dist/subpaths/withResponsiveOptions.d.ts +1 -1
- package/dist/subpaths/withResponsiveOptions.js +1 -1
- package/dist/subpaths/withResponsiveOptions.js.map +1 -1
- package/dist/subpaths/withScrolledInView.d.ts +1 -1
- package/dist/subpaths/withScrolledInView.js +1 -1
- package/dist/subpaths/withScrolledInView.js.map +1 -1
- package/dist/utils/css/animate.d.ts +2 -2
- package/dist/utils/css/animate.js +5 -3
- package/dist/utils/css/animate.js.map +2 -2
- package/dist/utils/history.js +1 -1
- package/dist/utils/history.js.map +2 -2
- package/dist/utils/scrollTo.d.ts +1 -1
- package/dist/utils/scrollTo.js +2 -2
- package/dist/utils/scrollTo.js.map +2 -2
- package/dist/utils/tween.js +7 -2
- package/dist/utils/tween.js.map +2 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useKey } from "../../services/KeyService.js";
|
|
2
|
+
import { usePointer } from "../../services/PointerService.js";
|
|
3
|
+
import { useRaf } from "../../services/RafService.js";
|
|
4
|
+
import { useResize } from "../../services/ResizeService.js";
|
|
5
|
+
import { useScroll } from "../../services/ScrollService.js";
|
|
6
|
+
import { isDefined, isDev, isFunction } from "../../utils/is.js";
|
|
7
|
+
import { noop } from "../../utils/noop.js";
|
|
2
8
|
import { AbstractManager } from "./AbstractManager.js";
|
|
3
|
-
import { noop, isFunction, isDefined, isDev } from "../../utils/index.js";
|
|
4
9
|
const SERVICES_MAP = {
|
|
5
10
|
scrolled: useScroll,
|
|
6
11
|
resized: useResize,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../packages/js-toolkit/Base/managers/ServicesManager.ts"],
|
|
4
|
-
"sourcesContent": ["import {
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import type { ServiceInterface } from '../../services/AbstractService.js';\nimport { type KeyServiceInterface, useKey } from '../../services/KeyService.js';\nimport { type PointerServiceInterface, usePointer } from '../../services/PointerService.js';\nimport { type RafServiceInterface, useRaf } from '../../services/RafService.js';\nimport { type ResizeServiceInterface, useResize } from '../../services/ResizeService.js';\nimport { type ScrollServiceInterface, useScroll } from '../../services/ScrollService.js';\nimport { isDefined, isDev, isFunction } from '../../utils/is.js';\nimport { noop } from '../../utils/noop.js';\nimport { AbstractManager } from './AbstractManager.js';\n\nconst SERVICES_MAP = {\n scrolled: useScroll,\n resized: useResize,\n ticked: useRaf,\n moved: usePointer,\n keyed: useKey,\n};\n\nconst SERVICE_NAMES = Object.keys(SERVICES_MAP);\n\ntype Services = {\n scrolled: ScrollServiceInterface;\n resized: ResizeServiceInterface;\n ticked: RafServiceInterface;\n moved: PointerServiceInterface;\n keyed: KeyServiceInterface;\n} & Record<string, ServiceInterface<unknown>>;\n\ntype ServiceProps = typeof SERVICES_MAP & Record<string, <T>() => ServiceInterface<T>>;\n\ntype ServiceNames = keyof Services;\n\n/**\n * Services management for the Base class.\n *\n * @todo Add support for disabled services on mount when the method is defined.\n */\nexport class ServicesManager extends AbstractManager<ServiceProps> {\n /**\n * Custom props\n * @private\n */\n __props = {\n ...SERVICES_MAP,\n } as ServiceProps;\n\n /**\n * Test if the given service is registered.\n */\n has(service: ServiceNames | string): boolean {\n if (\n !(\n (isFunction(this.__base[service]) ||\n // @ts-ignore\n this.__base.__hasEvent(service)) &&\n this.props[service]\n )\n ) {\n return false;\n }\n\n const { has } = this.props[service]();\n return has(this.__base.$id);\n }\n\n /**\n * Get a service props by name.\n */\n get<S extends ServiceNames | string>(service: S): ReturnType<Services[S]['props']> {\n // @ts-ignore\n return this.props[service]().props();\n }\n\n /**\n * Init the given service and bind it to the given instance.\n *\n * @param {ServiceNames} service The name of the service.\n * @return {() => void} A function to unbind the service.\n */\n enable(service: ServiceNames): () => void {\n if (this.has(service)) {\n return this.disable.bind(this, service);\n }\n\n if (\n // @ts-ignore\n !(isFunction(this.__base[service]) || this.__base.__hasEvent(service)) ||\n !this.props[service]\n ) {\n return noop;\n }\n const serviceInstance = this.props[service]();\n\n serviceInstance.add(this.__base.$id, (...args) => this.__base.__callMethod(service, ...args));\n\n return this.disable.bind(this, service);\n }\n\n /**\n * Enable all services and return methods to disable them.\n */\n enableAll() {\n return Object.keys(this.props).map((serviceName) => this.enable(serviceName));\n }\n\n /**\n * Disable all services.\n *\n * @return {void}\n */\n disableAll() {\n for (const serviceName of Object.keys(this.props)) {\n this.disable(serviceName);\n }\n }\n\n /**\n * Disable a service.\n */\n disable(service: ServiceNames) {\n if (!this.props[service]) {\n return;\n }\n\n const { remove } = this.props[service]();\n remove(this.__base.$id);\n }\n\n /**\n * Toggle a service.\n */\n toggle(service: ServiceNames, force?: boolean) {\n if (isDefined(force)) {\n if (force && !this.has(service)) {\n this.enable(service);\n }\n\n if (!force && this.has(service)) {\n this.disable(service);\n }\n } else if (this.has(service)) {\n this.disable(service);\n } else {\n this.enable(service);\n }\n }\n\n /**\n * Register a new service to be enabled/disabled.\n *\n * @param {string} name\n * The name of the service hook.\n * @param {<T>(...args:unknown[]) => ServiceInterface<T>} useFunction\n * The `use...` function for the service.\n */\n register(name: string, useFunction: <T>(...args: unknown[]) => ServiceInterface<T>) {\n this.props[name] = useFunction;\n this.__base.__addEmits(name);\n }\n\n /**\n * Unregister a new service to be enabled disabled.\n *\n * @param {string} name\n * The name of the service hook.\n */\n unregister(name: string) {\n if (SERVICE_NAMES.includes(name)) {\n if (isDev) {\n throw new Error(`[ServicesManager] The \\`${name}\\` core service can not be unregistered.`);\n }\n return;\n }\n\n this.__base.__removeEmits(name);\n delete this.props[name];\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/Base/types.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
import {
|
|
1
|
+
import type { KeyServiceProps } from '../services/KeyService.js';
|
|
2
|
+
import type { PointerServiceProps } from '../services/PointerService.js';
|
|
3
|
+
import type { RafServiceProps } from '../services/RafService.js';
|
|
4
|
+
import type { ResizeServiceProps } from '../services/ResizeService.js';
|
|
5
|
+
import type { ScrollServiceProps } from '../services/ScrollService.js';
|
|
6
|
+
import type { Base, BaseProps } from './Base.js';
|
|
7
|
+
import type { EventManagerCallbackParams } from './managers/EventsManager.js';
|
|
4
8
|
export type BaseEventHookParams<T extends Event = Event> = EventManagerCallbackParams<T>;
|
|
5
9
|
export interface BaseInterface {
|
|
6
10
|
/**
|
package/dist/Base/utils.d.ts
CHANGED
package/dist/Base/utils.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { isArray, isDefined,
|
|
1
|
+
import { isArray, isDefined, isDev } from "../utils/is.js";
|
|
2
|
+
import { SmartQueue } from "../utils/SmartQueue.js";
|
|
3
|
+
import { dashCase } from "../utils/string/changeCase.js";
|
|
2
4
|
import { features } from "./features.js";
|
|
3
5
|
import { useMutation } from "../services/MutationService.js";
|
|
4
6
|
import { getInstanceFromElement } from "../helpers/getInstanceFromElement.js";
|
package/dist/Base/utils.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/Base/utils.ts"],
|
|
4
|
-
"sourcesContent": ["import { isArray, isDefined, SmartQueue
|
|
5
|
-
"mappings": "AAAA,SAAS,SAAS,WAAW,
|
|
4
|
+
"sourcesContent": ["import { isArray, isDefined, isDev } from '../utils/is.js';\nimport { SmartQueue } from '../utils/SmartQueue.js';\nimport { dashCase } from '../utils/string/changeCase.js';\nimport type { Base, BaseConfig, BaseConstructor } from './Base.js';\nimport { features } from './features.js';\nimport { useMutation } from '../services/MutationService.js';\nimport { getInstanceFromElement } from '../helpers/getInstanceFromElement.js';\n\nlet queue: SmartQueue;\n\n/**\n * Add a task to the main queue.\n */\nexport function addToQueue(fn: () => unknown) {\n if (features.get('blocking')) {\n fn();\n return;\n }\n\n if (!queue) {\n queue = new SmartQueue();\n }\n\n return queue.add(fn);\n}\n\nconst selectors = new Map();\n\n// Separator used for multi-component declaration in `data-component` attributeS.\nconst separator = ' ';\n\n/**\n * Get the selector for a given component.\n */\nexport function getSelector(nameOrSelector: string): string {\n const { component } = features.get('attributes');\n const prefix = features.get('prefix');\n const key = prefix + component + nameOrSelector;\n\n if (!selectors.has(key)) {\n const parts = [\n // Tag select\n `${prefix}-${dashCase(nameOrSelector)}`,\n // Single selector\n `[${component}=\"${nameOrSelector}\"]`,\n // Selector in the middle of a list of selectors\n `[${component}*=\"${separator}${nameOrSelector}${separator}\"]`,\n // Selector at the end of a list of selectors\n `[${component}$=\"${separator}${nameOrSelector}\"]`,\n // Selector at the beginning of a list of selectors\n `[${component}^=\"${nameOrSelector}${separator}\"]`,\n ];\n selectors.set(key, parts.join(','));\n }\n\n return selectors.get(key);\n}\n\n/**\n * Get a list of elements based on the name of a component.\n *\n * @param {string} nameOrSelector\n * The name or selector to used for this component.\n * @param {HTMLElement|Document} element\n * The root element on which to query the selector, defaults to `document`.\n * @return {Array<HTMLElement>}\n * A list of elements on which the component should be mounted.\n */\nexport function getComponentElements(\n nameOrSelector: string,\n element: HTMLElement | Document = document,\n): HTMLElement[] {\n const selector = getSelector(nameOrSelector);\n let elements = [];\n\n try {\n elements = Array.from(element.querySelectorAll(selector));\n // eslint-disable-next-line no-empty\n } catch {}\n\n // If no child component found with the default selector, and if the selector does not\n // start with an uppercase letter, matching a component's name, try a classic DOM selector.\n if (elements.length === 0 && nameOrSelector[0] === nameOrSelector[0].toLowerCase()) {\n elements = Array.from(element.querySelectorAll(nameOrSelector));\n }\n\n return elements;\n}\n\n/**\n * Test if an event is defined in the given config.\n */\nexport function eventIsDefinedInConfig(event: string, config: BaseConfig): boolean {\n return isArray(config.emits) && config.emits.includes(event);\n}\n\n/**\n * Test if an event can be used on the given element.\n */\nexport function eventIsNative(event: string, element: HTMLElement): boolean {\n return isDefined(element[`on${event}`]);\n}\n\n/**\n * Get the target of a given event.\n */\nexport function getEventTarget(instance: Base, event: string, config: BaseConfig): Base['$el'] {\n if (eventIsDefinedInConfig(event, config) || eventIsNative(event, instance.$el)) {\n return instance.$el;\n }\n}\n\n/**\n * Get the global instance storage.\n * We attach it to `globalThis` so it can be shared between different\n * instances of the framework.\n */\nfunction getInstancesStorage(): Set<Base> {\n return (globalThis.__JS_TOOLKIT_INSTANCES__ ??= new Set<Base>());\n}\n\n/**\n * Get the global elements storage.\n * It will hold reference to all elements with at least one component attached to it.\n */\nfunction getElementsStorage(): Set<HTMLElement & { __base__: Map<string, Base> }> {\n return (globalThis.__JS_TOOLKIT_ELEMENTS__ ??= new Set<\n HTMLElement & { __base__: Map<string, Base> }\n >());\n}\n\n/**\n * Get all mounted instances or the ones from a given component.\n * @link https://js-toolkit.studiometa.dev/api/helpers/getInstances.html\n */\nexport function getInstances(): ReadonlySet<Base>;\nexport function getInstances<T extends BaseConstructor = BaseConstructor>(\n ctor: T,\n): Set<InstanceType<T>>;\nexport function getInstances<T extends BaseConstructor = BaseConstructor>(\n ctor?: T,\n): ReadonlySet<InstanceType<T>> | ReadonlySet<Base> {\n if (isDefined(ctor)) {\n const filteredInstances = new Set<InstanceType<T>>();\n for (const instance of getInstancesStorage()) {\n if (instance instanceof ctor) {\n filteredInstances.add(instance as InstanceType<T>);\n }\n }\n return filteredInstances;\n }\n\n return new Set(getInstancesStorage());\n}\n\nexport function getElements() {\n return new Set(getElementsStorage());\n}\n\nexport function addInstance(instance: Base) {\n getInstancesStorage().add(instance);\n getElementsStorage().add(instance.$el as HTMLElement & { __base__: Map<string, Base> });\n}\n\nexport function deleteInstance(instance: Base) {\n getInstancesStorage().delete(instance);\n getElementsStorage().delete(instance.$el as HTMLElement & { __base__: Map<string, Base> });\n}\n\n/**\n * Test whether an instance is currently registered in the global storage.\n * Membership is added on `before-mounted` and removed on `after-destroyed`,\n * so this is an O(1) check for \"is this instance live\" without copying the Set.\n */\nexport function hasInstance(instance: Base): boolean {\n return getInstancesStorage().has(instance);\n}\n\nconst registryKey = '__JS_TOOLKIT_REGISTRY__';\n\nfunction registry() {\n return (globalThis[registryKey] ??= new Map<string, BaseConstructor>());\n}\n\nfunction mutationCallback() {\n addToQueue(() => {\n for (const [nameOrSelector, ctor] of registry()) {\n for (const el of getComponentElements(nameOrSelector)) {\n if (!getInstanceFromElement(el, ctor)) {\n new ctor(el).$mount();\n }\n }\n }\n });\n\n addToQueue(() => {\n for (const instance of getInstances()) {\n if (!instance.$el.isConnected) {\n instance.$terminate();\n }\n }\n });\n}\n\nexport function addToRegistry(nameOrSelector: string, ctor: BaseConstructor) {\n if (registry().has(nameOrSelector)) {\n if (isDev && registry().get(nameOrSelector) !== ctor) {\n console.warn(\n `[${nameOrSelector}] A different component is already registered under this name. ` +\n 'Registration is ignored \u2014 like `customElements.define`, a name maps to a single ' +\n 'component. Give this component a unique `config.name` (or use `withExtraConfig`, ' +\n 'which renames automatically).',\n );\n }\n return;\n }\n\n registry().set(nameOrSelector, ctor);\n\n // Add children components to the registry\n if (ctor.config?.components) {\n for (const [selector, childConstructor] of Object.entries(ctor.config?.components)) {\n if ('$isBase' in childConstructor && childConstructor.$isBase) {\n addToRegistry(selector, childConstructor);\n }\n }\n }\n\n const mutation = useMutation(document, { childList: true, subtree: true });\n if (!mutation.has(registryKey)) {\n mutation.add(registryKey, mutationCallback);\n }\n}\n\n/**\n * Find the closest instance from the given element in the given set of Base instances.\n */\nexport function findClosestInstance<T extends Base = Base>(\n element: HTMLElement,\n instances: Set<T>,\n): T {\n let closest = null;\n let minDepth = Infinity;\n\n for (const instance of instances) {\n let depth = 0;\n let el = element;\n while (el && el !== instance.$el) {\n depth++;\n el = el.parentElement;\n }\n\n if (depth < minDepth) {\n minDepth = depth;\n closest = instance;\n }\n }\n\n return closest;\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,SAAS,WAAW,aAAa;AAC1C,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AAEzB,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;AAC5B,SAAS,8BAA8B;AAEvC,IAAI;AAKG,SAAS,WAAW,IAAmB;AAC5C,MAAI,SAAS,IAAI,UAAU,GAAG;AAC5B,OAAG;AACH;AAAA,EACF;AAEA,MAAI,CAAC,OAAO;AACV,YAAQ,IAAI,WAAW;AAAA,EACzB;AAEA,SAAO,MAAM,IAAI,EAAE;AACrB;AAEA,MAAM,YAAY,oBAAI,IAAI;AAG1B,MAAM,YAAY;AAKX,SAAS,YAAY,gBAAgC;AAC1D,QAAM,EAAE,UAAU,IAAI,SAAS,IAAI,YAAY;AAC/C,QAAM,SAAS,SAAS,IAAI,QAAQ;AACpC,QAAM,MAAM,SAAS,YAAY;AAEjC,MAAI,CAAC,UAAU,IAAI,GAAG,GAAG;AACvB,UAAM,QAAQ;AAAA;AAAA,MAEZ,GAAG,MAAM,IAAI,SAAS,cAAc,CAAC;AAAA;AAAA,MAErC,IAAI,SAAS,KAAK,cAAc;AAAA;AAAA,MAEhC,IAAI,SAAS,MAAM,SAAS,GAAG,cAAc,GAAG,SAAS;AAAA;AAAA,MAEzD,IAAI,SAAS,MAAM,SAAS,GAAG,cAAc;AAAA;AAAA,MAE7C,IAAI,SAAS,MAAM,cAAc,GAAG,SAAS;AAAA,IAC/C;AACA,cAAU,IAAI,KAAK,MAAM,KAAK,GAAG,CAAC;AAAA,EACpC;AAEA,SAAO,UAAU,IAAI,GAAG;AAC1B;AAYO,SAAS,qBACd,gBACA,UAAkC,UACnB;AACf,QAAM,WAAW,YAAY,cAAc;AAC3C,MAAI,WAAW,CAAC;AAEhB,MAAI;AACF,eAAW,MAAM,KAAK,QAAQ,iBAAiB,QAAQ,CAAC;AAAA,EAE1D,QAAQ;AAAA,EAAC;AAIT,MAAI,SAAS,WAAW,KAAK,eAAe,CAAC,MAAM,eAAe,CAAC,EAAE,YAAY,GAAG;AAClF,eAAW,MAAM,KAAK,QAAQ,iBAAiB,cAAc,CAAC;AAAA,EAChE;AAEA,SAAO;AACT;AAKO,SAAS,uBAAuB,OAAe,QAA6B;AACjF,SAAO,QAAQ,OAAO,KAAK,KAAK,OAAO,MAAM,SAAS,KAAK;AAC7D;AAKO,SAAS,cAAc,OAAe,SAA+B;AAC1E,SAAO,UAAU,QAAQ,KAAK,KAAK,EAAE,CAAC;AACxC;AAKO,SAAS,eAAe,UAAgB,OAAe,QAAiC;AAC7F,MAAI,uBAAuB,OAAO,MAAM,KAAK,cAAc,OAAO,SAAS,GAAG,GAAG;AAC/E,WAAO,SAAS;AAAA,EAClB;AACF;AAOA,SAAS,sBAAiC;AACxC,SAAQ,WAAW,6BAA6B,oBAAI,IAAU;AAChE;AAMA,SAAS,qBAAyE;AAChF,SAAQ,WAAW,4BAA4B,oBAAI,IAEjD;AACJ;AAUO,SAAS,aACd,MACkD;AAClD,MAAI,UAAU,IAAI,GAAG;AACnB,UAAM,oBAAoB,oBAAI,IAAqB;AACnD,eAAW,YAAY,oBAAoB,GAAG;AAC5C,UAAI,oBAAoB,MAAM;AAC5B,0BAAkB,IAAI,QAA2B;AAAA,MACnD;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,SAAO,IAAI,IAAI,oBAAoB,CAAC;AACtC;AAEO,SAAS,cAAc;AAC5B,SAAO,IAAI,IAAI,mBAAmB,CAAC;AACrC;AAEO,SAAS,YAAY,UAAgB;AAC1C,sBAAoB,EAAE,IAAI,QAAQ;AAClC,qBAAmB,EAAE,IAAI,SAAS,GAAoD;AACxF;AAEO,SAAS,eAAe,UAAgB;AAC7C,sBAAoB,EAAE,OAAO,QAAQ;AACrC,qBAAmB,EAAE,OAAO,SAAS,GAAoD;AAC3F;AAOO,SAAS,YAAY,UAAyB;AACnD,SAAO,oBAAoB,EAAE,IAAI,QAAQ;AAC3C;AAEA,MAAM,cAAc;AAEpB,SAAS,WAAW;AAClB,SAAQ,WAAW,WAAW,MAAM,oBAAI,IAA6B;AACvE;AAEA,SAAS,mBAAmB;AAC1B,aAAW,MAAM;AACf,eAAW,CAAC,gBAAgB,IAAI,KAAK,SAAS,GAAG;AAC/C,iBAAW,MAAM,qBAAqB,cAAc,GAAG;AACrD,YAAI,CAAC,uBAAuB,IAAI,IAAI,GAAG;AACrC,cAAI,KAAK,EAAE,EAAE,OAAO;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,aAAW,MAAM;AACf,eAAW,YAAY,aAAa,GAAG;AACrC,UAAI,CAAC,SAAS,IAAI,aAAa;AAC7B,iBAAS,WAAW;AAAA,MACtB;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,SAAS,cAAc,gBAAwB,MAAuB;AAC3E,MAAI,SAAS,EAAE,IAAI,cAAc,GAAG;AAClC,QAAI,SAAS,SAAS,EAAE,IAAI,cAAc,MAAM,MAAM;AACpD,cAAQ;AAAA,QACN,IAAI,cAAc;AAAA,MAIpB;AAAA,IACF;AACA;AAAA,EACF;AAEA,WAAS,EAAE,IAAI,gBAAgB,IAAI;AAGnC,MAAI,KAAK,QAAQ,YAAY;AAC3B,eAAW,CAAC,UAAU,gBAAgB,KAAK,OAAO,QAAQ,KAAK,QAAQ,UAAU,GAAG;AAClF,UAAI,aAAa,oBAAoB,iBAAiB,SAAS;AAC7D,sBAAc,UAAU,gBAAgB;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,WAAW,YAAY,UAAU,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AACzE,MAAI,CAAC,SAAS,IAAI,WAAW,GAAG;AAC9B,aAAS,IAAI,aAAa,gBAAgB;AAAA,EAC5C;AACF;AAKO,SAAS,oBACd,SACA,WACG;AACH,MAAI,UAAU;AACd,MAAI,WAAW;AAEf,aAAW,YAAY,WAAW;AAChC,QAAI,QAAQ;AACZ,QAAI,KAAK;AACT,WAAO,MAAM,OAAO,SAAS,KAAK;AAChC;AACA,WAAK,GAAG;AAAA,IACV;AAEA,QAAI,QAAQ,UAAU;AACpB,iBAAW;AACX,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/autoload/define-manifest.ts"],
|
|
4
|
-
"sourcesContent": ["import type { BaseConstructor } from '../Base/
|
|
4
|
+
"sourcesContent": ["import type { BaseConstructor } from '../Base/Base.js';\nimport { DEFAULT_DIAGNOSTIC_PREFIX } from './loader.js';\nimport type { ComponentLoadStrategy, ComponentManifest, ComponentManifestEntry } from './types.js';\n\n/**\n * A map of module keys to lazy importers, as produced by bundler glob helpers.\n *\n * This is the shape Vite's `import.meta.glob('./x/*.ts')` returns, and the shape the\n * {@link fromWebpackContext} adapter normalizes a webpack context to. Every value is a function\n * that imports the module and resolves its namespace object.\n */\nexport type ModuleRecord = Record<string, () => Promise<Record<string, unknown>>>;\n\n/**\n * A per-token override applied on top of the values {@link defineManifest} derives from a module\n * key. Every field is optional; an omitted field keeps the derived or option-level default.\n */\nexport interface ComponentOverride {\n /** Replace the token derived from the module key. */\n token?: string;\n /** Override the load strategy for this component. */\n strategy?: ComponentLoadStrategy;\n /** Override the grouping key for this component. */\n group?: string;\n /** The named export to resolve from the module; defaults to the derived token. */\n exportName?: string;\n /** The tokens of the constructor's configured child components, for recursive registration. */\n children?: readonly string[];\n /** Stylesheet paths associated with this component (informational). */\n styles?: readonly string[];\n /** Optional integration keys associated with this component (informational). */\n integrations?: readonly string[];\n}\n\n/** Options accepted by {@link defineManifest}. */\nexport interface DefineManifestOptions {\n /**\n * The lazy importers to build entries from, keyed by module path. Feed it a bundler glob directly\n * or normalize one first with {@link fromMetaGlob} / {@link fromWebpackContext}.\n */\n modules: ModuleRecord;\n /** The npm package the components belong to (optional informational metadata). */\n packageName?: string;\n /** The default load strategy for every component. Defaults to `'eager'`. */\n strategy?: ComponentLoadStrategy;\n /** The default grouping key for every component. Defaults to each component's token. */\n group?: string;\n /** Per-token overrides, keyed by the token derived from the module key. */\n components?: Record<string, ComponentOverride>;\n}\n\n/**\n * Derive a component token from a module key: the basename without its extension, falling back to\n * the parent directory name when the basename is `index` (so `./a/b/Foo/index.ts` yields `Foo`).\n */\nfunction deriveToken(key: string): string {\n const segments = key.split('/').filter((segment) => segment && segment !== '.');\n const last = segments.at(-1) ?? '';\n const base = last.replace(/\\.[^.]+$/, '');\n if (base === 'index' && segments.length >= 2) {\n return segments.at(-2) as string;\n }\n return base;\n}\n\n/**\n * Build a {@link ComponentManifest} from a record of lazy importers \u2014 the pure counterpart of a\n * generated per-package manifest, for app developers autoloading their own js-toolkit components.\n *\n * For every `[key, importer]` in `options.modules` it derives a token from the key (see\n * {@link deriveToken}), resolves the named export matching the token (falling back to the module's\n * `default` export), and applies the option-level and per-token defaults. The loader validates that\n * the resolved value is a js-toolkit `Base` constructor and reports an error event otherwise, so no\n * validation happens here.\n *\n * This factory is pure: it never touches the DOM and never registers anything. Pass its result to\n * {@link registerManifests} (or {@link autoload}) to actually start discovery. When two module keys\n * derive the same token a `console.warn` is emitted and the later key wins.\n */\nexport function defineManifest(options: DefineManifestOptions): ComponentManifest {\n const overrides = options.components ?? {};\n const defaultStrategy = options.strategy ?? 'eager';\n const manifest: ComponentManifest = {};\n\n for (const [key, importer] of Object.entries(options.modules)) {\n const derivedToken = deriveToken(key);\n const override = overrides[derivedToken] ?? {};\n const token = override.token ?? derivedToken;\n const exportName = override.exportName ?? token;\n\n if (Object.prototype.hasOwnProperty.call(manifest, token)) {\n console.warn(\n `${DEFAULT_DIAGNOSTIC_PREFIX} Duplicate component token \"${token}\" derived from \"${key}\"; the later module wins.`,\n );\n }\n\n const entry: ComponentManifestEntry = {\n token,\n strategy: override.strategy ?? defaultStrategy,\n group: override.group ?? options.group ?? token,\n exportName,\n load: () =>\n importer().then((module) => (module[exportName] ?? module.default) as BaseConstructor),\n };\n\n if (options.packageName !== undefined) {\n entry.packageName = options.packageName;\n }\n if (override.children !== undefined) {\n entry.children = override.children;\n }\n if (override.styles !== undefined) {\n entry.styles = override.styles;\n }\n if (override.integrations !== undefined) {\n entry.integrations = override.integrations;\n }\n\n manifest[token] = entry;\n }\n\n return manifest;\n}\n"],
|
|
5
5
|
"mappings": "AACA,SAAS,iCAAiC;AAsD1C,SAAS,YAAY,KAAqB;AACxC,QAAM,WAAW,IAAI,MAAM,GAAG,EAAE,OAAO,CAAC,YAAY,WAAW,YAAY,GAAG;AAC9E,QAAM,OAAO,SAAS,GAAG,EAAE,KAAK;AAChC,QAAM,OAAO,KAAK,QAAQ,YAAY,EAAE;AACxC,MAAI,SAAS,WAAW,SAAS,UAAU,GAAG;AAC5C,WAAO,SAAS,GAAG,EAAE;AAAA,EACvB;AACA,SAAO;AACT;AAgBO,SAAS,eAAe,SAAmD;AAChF,QAAM,YAAY,QAAQ,cAAc,CAAC;AACzC,QAAM,kBAAkB,QAAQ,YAAY;AAC5C,QAAM,WAA8B,CAAC;AAErC,aAAW,CAAC,KAAK,QAAQ,KAAK,OAAO,QAAQ,QAAQ,OAAO,GAAG;AAC7D,UAAM,eAAe,YAAY,GAAG;AACpC,UAAM,WAAW,UAAU,YAAY,KAAK,CAAC;AAC7C,UAAM,QAAQ,SAAS,SAAS;AAChC,UAAM,aAAa,SAAS,cAAc;AAE1C,QAAI,OAAO,UAAU,eAAe,KAAK,UAAU,KAAK,GAAG;AACzD,cAAQ;AAAA,QACN,GAAG,yBAAyB,+BAA+B,KAAK,mBAAmB,GAAG;AAAA,MACxF;AAAA,IACF;AAEA,UAAM,QAAgC;AAAA,MACpC;AAAA,MACA,UAAU,SAAS,YAAY;AAAA,MAC/B,OAAO,SAAS,SAAS,QAAQ,SAAS;AAAA,MAC1C;AAAA,MACA,MAAM,MACJ,SAAS,EAAE,KAAK,CAAC,WAAY,OAAO,UAAU,KAAK,OAAO,OAA2B;AAAA,IACzF;AAEA,QAAI,QAAQ,gBAAgB,QAAW;AACrC,YAAM,cAAc,QAAQ;AAAA,IAC9B;AACA,QAAI,SAAS,aAAa,QAAW;AACnC,YAAM,WAAW,SAAS;AAAA,IAC5B;AACA,QAAI,SAAS,WAAW,QAAW;AACjC,YAAM,SAAS,SAAS;AAAA,IAC1B;AACA,QAAI,SAAS,iBAAiB,QAAW;AACvC,YAAM,eAAe,SAAS;AAAA,IAChC;AAEA,aAAS,KAAK,IAAI;AAAA,EACpB;AAEA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BaseConstructor } from '../Base/
|
|
1
|
+
import type { BaseConstructor } from '../Base/Base.js';
|
|
2
2
|
import type { ComponentLoadStrategy, ComponentManifest, ComponentManifestEntry } from './types.js';
|
|
3
3
|
/** The diagnostic prefix used when the host does not inject its own. */
|
|
4
4
|
export declare const DEFAULT_DIAGNOSTIC_PREFIX = "[@studiometa/js-toolkit/autoload]";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/autoload/loader.ts"],
|
|
4
|
-
"sourcesContent": ["import { registerComponent } from '../helpers/registerComponent.js';\nimport type { BaseConstructor } from '../Base/index.js';\nimport type { ComponentLoadStrategy, ComponentManifest, ComponentManifestEntry } from './types.js';\n\nconst COMPONENT_SELECTOR = '[data-component]';\nconst LOAD_STRATEGIES: readonly ComponentLoadStrategy[] = [\n 'eager',\n 'visible',\n 'idle',\n 'interaction',\n];\n\n/** The diagnostic prefix used when the host does not inject its own. */\nexport const DEFAULT_DIAGNOSTIC_PREFIX = '[@studiometa/js-toolkit/autoload]';\n\n/** Start loading visible components shortly before they enter the viewport. */\nexport const VISIBLE_ROOT_MARGIN = '200px 0px';\n/** Ensure idle components eventually load even when the main thread remains busy. */\nexport const IDLE_TIMEOUT = 2_000;\n\ninterface IdleDeadlineLike {\n readonly didTimeout: boolean;\n timeRemaining: () => number;\n}\n\ntype IdleHandle = number;\ntype RequestIdleCallbackLike = (\n callback: (deadline: IdleDeadlineLike) => void,\n options?: { timeout: number },\n) => IdleHandle;\ntype CancelIdleCallbackLike = (handle: IdleHandle) => void;\ntype RegisterComponent = (\n Constructor: BaseConstructor,\n token: string,\n) => Promise<unknown> | unknown;\n\ntype ComponentState = 'scheduled' | 'loading' | 'registered' | 'failed';\n\ninterface ComponentRecord {\n state: ComponentState;\n promise?: Promise<void>;\n Constructor?: BaseConstructor;\n cleanups: Set<() => void>;\n scheduledStrategies: Set<ComponentLoadStrategy>;\n}\n\nexport interface LoaderDependencies {\n document: Document;\n MutationObserver?: typeof MutationObserver;\n IntersectionObserver?: typeof IntersectionObserver;\n requestIdleCallback?: RequestIdleCallbackLike;\n cancelIdleCallback?: CancelIdleCallbackLike;\n setTimeout: typeof globalThis.setTimeout;\n clearTimeout: typeof globalThis.clearTimeout;\n registerComponent: RegisterComponent;\n console: Pick<Console, 'warn' | 'error'>;\n CustomEvent: typeof CustomEvent;\n /** The prefix prepended to every diagnostic message emitted by the loader. */\n diagnosticPrefix: string;\n}\n\nexport interface ComponentLoaderOptions {\n manifest: ComponentManifest;\n /** The DOM scope to scan and observe. Defaults to the injected `document`. */\n root?: Document | Element;\n dependencies?: Partial<LoaderDependencies>;\n}\n\nexport interface ComponentLoaderStartOptions {\n eagerComponents?: Iterable<string>;\n}\n\nfunction isLoadStrategy(value: string): value is ComponentLoadStrategy {\n return LOAD_STRATEGIES.includes(value as ComponentLoadStrategy);\n}\n\nfunction isBaseConstructor(value: unknown): value is BaseConstructor {\n if (typeof value !== 'function') {\n return false;\n }\n\n const Constructor = value as unknown as Record<string, unknown>;\n return Constructor.$isBase === true && typeof Constructor.$register === 'function';\n}\n\nfunction createDependencies(overrides: Partial<LoaderDependencies> = {}): LoaderDependencies {\n const scope = globalThis as typeof globalThis & {\n requestIdleCallback?: RequestIdleCallbackLike;\n cancelIdleCallback?: CancelIdleCallbackLike;\n };\n\n return {\n document,\n MutationObserver: globalThis.MutationObserver,\n IntersectionObserver: globalThis.IntersectionObserver,\n requestIdleCallback: scope.requestIdleCallback?.bind(scope),\n cancelIdleCallback: scope.cancelIdleCallback?.bind(scope),\n setTimeout: globalThis.setTimeout.bind(globalThis),\n clearTimeout: globalThis.clearTimeout.bind(globalThis),\n registerComponent,\n console,\n CustomEvent,\n diagnosticPrefix: DEFAULT_DIAGNOSTIC_PREFIX,\n ...overrides,\n };\n}\n\n/**\n * Discover declarative components and schedule each constructor exactly once.\n *\n * The loader is generic: it knows nothing hard-coded about any component package and works purely\n * from the manifest it is given. Importing this module has no side effects \u2014 discovery only starts\n * when {@link ComponentLoader.start} is called.\n */\nexport class ComponentLoader {\n /** @private */\n __manifest: ComponentManifest;\n /** @private */\n __dependencies: LoaderDependencies;\n /** @private */\n __root: Document | Element;\n /** @private */\n __records = new Map<string, ComponentRecord>();\n /** @private */\n __eagerComponents = new Set<string>();\n /** @private */\n __elementSchedules = new WeakMap<Element, Set<string>>();\n /** @private */\n __elementCleanups = new WeakMap<Element, Set<() => void>>();\n /** @private */\n __mutationObserver?: MutationObserver;\n /** @private */\n __started = false;\n\n constructor({ manifest, root, dependencies }: ComponentLoaderOptions) {\n this.__manifest = manifest;\n this.__dependencies = createDependencies(dependencies);\n this.__root = root ?? this.__dependencies.document;\n }\n\n start({ eagerComponents = [] }: ComponentLoaderStartOptions = {}): void {\n if (this.__started) {\n return;\n }\n this.__started = true;\n\n const MutationObserverConstructor = this.__dependencies.MutationObserver;\n if (MutationObserverConstructor) {\n this.__mutationObserver = new MutationObserverConstructor((records) => {\n for (const record of records) {\n for (const node of record.addedNodes) {\n if (node instanceof Element) {\n this.__scan(node);\n }\n }\n for (const node of record.removedNodes) {\n if (node instanceof Element) {\n this.__cleanSubtree(node);\n }\n }\n }\n });\n this.__mutationObserver.observe(this.__root, {\n childList: true,\n subtree: true,\n });\n } else {\n this.__warn('MutationObserver is unavailable; added components will not be discovered.');\n }\n\n for (const token of new Set(eagerComponents)) {\n if (!this.__getEntry(token)) {\n this.__warn('An unknown eager component was ignored.');\n continue;\n }\n this.__eagerComponents.add(token);\n this.__schedule(token, 'eager');\n }\n\n this.__scan(this.__root);\n }\n\n stop(): void {\n this.__mutationObserver?.disconnect();\n for (const record of this.__records.values()) {\n this.__clean(record);\n }\n }\n\n /** @private */\n __scan(root: Document | Element): void {\n if (root instanceof Element && root.matches(COMPONENT_SELECTOR)) {\n this.__discover(root);\n }\n\n for (const element of root.querySelectorAll(COMPONENT_SELECTOR)) {\n this.__discover(element);\n }\n }\n\n /** @private */\n __discover(element: Element): void {\n const rawTokens = element.getAttribute('data-component') ?? '';\n const tokens = new Set(rawTokens.split(/\\s+/).filter(Boolean));\n\n for (const token of tokens) {\n const entry = this.__getEntry(token);\n if (!entry) {\n this.__warn('An unknown component token was ignored.');\n continue;\n }\n\n const strategy = this.__getStrategy(element, entry);\n const scheduleKey = `${token}:${strategy}`;\n const elementSchedules = this.__elementSchedules.get(element) ?? new Set<string>();\n if (elementSchedules.has(scheduleKey)) {\n continue;\n }\n elementSchedules.add(scheduleKey);\n this.__elementSchedules.set(element, elementSchedules);\n this.__schedule(token, strategy, element);\n }\n }\n\n /** @private */\n __getEntry(token: string): ComponentManifestEntry | undefined {\n if (!Object.prototype.hasOwnProperty.call(this.__manifest, token)) {\n return undefined;\n }\n return this.__manifest[token];\n }\n\n /** @private */\n __getStrategy(element: Element, entry: ComponentManifestEntry): ComponentLoadStrategy {\n if (this.__eagerComponents.has(entry.token)) {\n return 'eager';\n }\n\n const attribute = element.getAttribute('data-load');\n if (attribute !== null) {\n if (isLoadStrategy(attribute)) {\n return attribute;\n }\n this.__warn(`Component \"${entry.token}\" has an invalid data-load value; using its default.`);\n }\n\n if (isLoadStrategy(entry.strategy)) {\n return entry.strategy;\n }\n\n this.__warn(`Component \"${entry.token}\" has an invalid manifest strategy; loading eagerly.`);\n return 'eager';\n }\n\n /** @private */\n __getRecord(token: string): ComponentRecord {\n let record = this.__records.get(token);\n if (!record) {\n record = {\n state: 'scheduled',\n cleanups: new Set(),\n scheduledStrategies: new Set(),\n };\n this.__records.set(token, record);\n }\n return record;\n }\n\n /** @private */\n __schedule(token: string, strategy: ComponentLoadStrategy, element?: Element): void {\n const record = this.__getRecord(token);\n if (record.state !== 'scheduled') {\n return;\n }\n\n if (strategy === 'eager') {\n this.__begin(token, record);\n return;\n }\n\n if (strategy === 'visible') {\n if (!element) {\n this.__begin(token, record);\n return;\n }\n const IntersectionObserverConstructor = this.__dependencies.IntersectionObserver;\n if (!IntersectionObserverConstructor) {\n this.__warn(`IntersectionObserver is unavailable; loading component \"${token}\" eagerly.`);\n this.__begin(token, record);\n return;\n }\n const observer = new IntersectionObserverConstructor(\n (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n this.__begin(token, record);\n }\n },\n { rootMargin: VISIBLE_ROOT_MARGIN },\n );\n observer.observe(element);\n this.__addCleanup(record, () => observer.disconnect(), element);\n return;\n }\n\n if (strategy === 'idle') {\n if (record.scheduledStrategies.has(strategy)) {\n return;\n }\n record.scheduledStrategies.add(strategy);\n const requestIdleCallback = this.__dependencies.requestIdleCallback;\n if (requestIdleCallback) {\n const handle = requestIdleCallback(() => this.__begin(token, record), {\n timeout: IDLE_TIMEOUT,\n });\n this.__addCleanup(record, () => this.__dependencies.cancelIdleCallback?.(handle));\n return;\n }\n this.__warn(`requestIdleCallback is unavailable; using a timeout for component \"${token}\".`);\n const handle = this.__dependencies.setTimeout(\n () => this.__begin(token, record),\n IDLE_TIMEOUT,\n );\n this.__addCleanup(record, () => this.__dependencies.clearTimeout(handle));\n return;\n }\n\n if (!element) {\n this.__begin(token, record);\n return;\n }\n\n const listener = () => this.__begin(token, record);\n for (const eventName of ['pointerover', 'pointerdown', 'focusin']) {\n element.addEventListener(eventName, listener, { once: true });\n this.__addCleanup(record, () => element.removeEventListener(eventName, listener), element);\n }\n }\n\n /** @private */\n __begin(token: string, record: ComponentRecord): void {\n if (record.state !== 'scheduled') {\n return;\n }\n\n const entry = this.__getEntry(token);\n if (!entry) {\n return;\n }\n\n record.state = 'loading';\n this.__clean(record);\n record.promise = Promise.resolve()\n .then(() => entry.load())\n .then((Constructor) => {\n if (!isBaseConstructor(Constructor)) {\n throw new TypeError('The manifest loader did not resolve to a Base constructor.');\n }\n return Constructor;\n })\n .catch((error: unknown) => {\n record.state = 'failed';\n this.__reportError(token, 'import', error);\n return undefined;\n })\n .then(async (Constructor) => {\n if (!Constructor) {\n return;\n }\n try {\n await this.__dependencies.registerComponent(Constructor, token);\n record.Constructor = Constructor;\n record.state = 'registered';\n await this.__registerConfiguredChildren(token, Constructor, new Set([token]));\n } catch (error: unknown) {\n record.state = 'failed';\n this.__reportError(token, 'registration', error);\n }\n });\n }\n\n /** @private */\n async __registerConfiguredChildren(\n parentToken: string,\n ParentConstructor: BaseConstructor,\n visited: Set<string>,\n ): Promise<void> {\n const configuredChildren = ParentConstructor.config.components ?? {};\n\n for (const token of this.__getEntry(parentToken)?.children ?? []) {\n if (visited.has(token)) {\n continue;\n }\n\n const Constructor = configuredChildren[token];\n if (!isBaseConstructor(Constructor)) {\n continue;\n }\n\n visited.add(token);\n const record = this.__getRecord(token);\n if (record.state === 'loading') {\n continue;\n }\n\n if (record.state !== 'registered') {\n record.state = 'loading';\n this.__clean(record);\n record.promise = this.__registerConfiguredChild(token, Constructor, record, visited);\n await record.promise;\n } else {\n await this.__registerConfiguredChildren(token, record.Constructor ?? Constructor, visited);\n }\n }\n }\n\n /** @private */\n async __registerConfiguredChild(\n token: string,\n Constructor: BaseConstructor,\n record: ComponentRecord,\n visited: Set<string>,\n ): Promise<void> {\n try {\n await this.__dependencies.registerComponent(Constructor, token);\n record.Constructor = Constructor;\n record.state = 'registered';\n await this.__registerConfiguredChildren(token, Constructor, visited);\n } catch (error: unknown) {\n record.state = 'failed';\n this.__reportError(token, 'registration', error);\n }\n }\n\n /** @private */\n __addCleanup(record: ComponentRecord, cleanup: () => void, element?: Element): void {\n let active = true;\n const run = () => {\n if (!active) {\n return;\n }\n active = false;\n cleanup();\n record.cleanups.delete(run);\n if (element) {\n const elementCleanups = this.__elementCleanups.get(element);\n elementCleanups?.delete(run);\n if (elementCleanups?.size === 0) {\n this.__elementCleanups.delete(element);\n }\n }\n };\n\n record.cleanups.add(run);\n if (element) {\n const elementCleanups = this.__elementCleanups.get(element) ?? new Set();\n elementCleanups.add(run);\n this.__elementCleanups.set(element, elementCleanups);\n }\n }\n\n /** @private */\n __cleanSubtree(root: Element): void {\n for (const element of [root, ...root.querySelectorAll('*')]) {\n if (element.isConnected) {\n continue;\n }\n for (const cleanup of [...(this.__elementCleanups.get(element) ?? [])]) {\n cleanup();\n }\n this.__elementSchedules.delete(element);\n }\n }\n\n /** @private */\n __clean(record: ComponentRecord): void {\n for (const cleanup of record.cleanups) {\n cleanup();\n }\n record.cleanups.clear();\n }\n\n /** @private */\n __warn(message: string): void {\n this.__dependencies.console.warn(`${this.__dependencies.diagnosticPrefix} ${message}`);\n }\n\n /** @private */\n __reportError(token: string, stage: 'import' | 'registration', error: unknown): void {\n this.__dependencies.console.error(\n `${this.__dependencies.diagnosticPrefix} Failed during ${stage} for component \"${token}\".`,\n error,\n );\n const event = new this.__dependencies.CustomEvent('js-toolkit:error', {\n bubbles: true,\n detail: { token, stage, error },\n });\n (this.__dependencies.document.documentElement ?? this.__dependencies.document).dispatchEvent(\n event,\n );\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import type { BaseConstructor } from '../Base/Base.js';\nimport { registerComponent } from '../helpers/registerComponent.js';\nimport type { ComponentLoadStrategy, ComponentManifest, ComponentManifestEntry } from './types.js';\n\nconst COMPONENT_SELECTOR = '[data-component]';\nconst LOAD_STRATEGIES: readonly ComponentLoadStrategy[] = [\n 'eager',\n 'visible',\n 'idle',\n 'interaction',\n];\n\n/** The diagnostic prefix used when the host does not inject its own. */\nexport const DEFAULT_DIAGNOSTIC_PREFIX = '[@studiometa/js-toolkit/autoload]';\n\n/** Start loading visible components shortly before they enter the viewport. */\nexport const VISIBLE_ROOT_MARGIN = '200px 0px';\n/** Ensure idle components eventually load even when the main thread remains busy. */\nexport const IDLE_TIMEOUT = 2_000;\n\ninterface IdleDeadlineLike {\n readonly didTimeout: boolean;\n timeRemaining: () => number;\n}\n\ntype IdleHandle = number;\ntype RequestIdleCallbackLike = (\n callback: (deadline: IdleDeadlineLike) => void,\n options?: { timeout: number },\n) => IdleHandle;\ntype CancelIdleCallbackLike = (handle: IdleHandle) => void;\ntype RegisterComponent = (\n Constructor: BaseConstructor,\n token: string,\n) => Promise<unknown> | unknown;\n\ntype ComponentState = 'scheduled' | 'loading' | 'registered' | 'failed';\n\ninterface ComponentRecord {\n state: ComponentState;\n promise?: Promise<void>;\n Constructor?: BaseConstructor;\n cleanups: Set<() => void>;\n scheduledStrategies: Set<ComponentLoadStrategy>;\n}\n\nexport interface LoaderDependencies {\n document: Document;\n MutationObserver?: typeof MutationObserver;\n IntersectionObserver?: typeof IntersectionObserver;\n requestIdleCallback?: RequestIdleCallbackLike;\n cancelIdleCallback?: CancelIdleCallbackLike;\n setTimeout: typeof globalThis.setTimeout;\n clearTimeout: typeof globalThis.clearTimeout;\n registerComponent: RegisterComponent;\n console: Pick<Console, 'warn' | 'error'>;\n CustomEvent: typeof CustomEvent;\n /** The prefix prepended to every diagnostic message emitted by the loader. */\n diagnosticPrefix: string;\n}\n\nexport interface ComponentLoaderOptions {\n manifest: ComponentManifest;\n /** The DOM scope to scan and observe. Defaults to the injected `document`. */\n root?: Document | Element;\n dependencies?: Partial<LoaderDependencies>;\n}\n\nexport interface ComponentLoaderStartOptions {\n eagerComponents?: Iterable<string>;\n}\n\nfunction isLoadStrategy(value: string): value is ComponentLoadStrategy {\n return LOAD_STRATEGIES.includes(value as ComponentLoadStrategy);\n}\n\nfunction isBaseConstructor(value: unknown): value is BaseConstructor {\n if (typeof value !== 'function') {\n return false;\n }\n\n const Constructor = value as unknown as Record<string, unknown>;\n return Constructor.$isBase === true && typeof Constructor.$register === 'function';\n}\n\nfunction createDependencies(overrides: Partial<LoaderDependencies> = {}): LoaderDependencies {\n const scope = globalThis as typeof globalThis & {\n requestIdleCallback?: RequestIdleCallbackLike;\n cancelIdleCallback?: CancelIdleCallbackLike;\n };\n\n return {\n document,\n MutationObserver: globalThis.MutationObserver,\n IntersectionObserver: globalThis.IntersectionObserver,\n requestIdleCallback: scope.requestIdleCallback?.bind(scope),\n cancelIdleCallback: scope.cancelIdleCallback?.bind(scope),\n setTimeout: globalThis.setTimeout.bind(globalThis),\n clearTimeout: globalThis.clearTimeout.bind(globalThis),\n registerComponent,\n console,\n CustomEvent,\n diagnosticPrefix: DEFAULT_DIAGNOSTIC_PREFIX,\n ...overrides,\n };\n}\n\n/**\n * Discover declarative components and schedule each constructor exactly once.\n *\n * The loader is generic: it knows nothing hard-coded about any component package and works purely\n * from the manifest it is given. Importing this module has no side effects \u2014 discovery only starts\n * when {@link ComponentLoader.start} is called.\n */\nexport class ComponentLoader {\n /** @private */\n __manifest: ComponentManifest;\n /** @private */\n __dependencies: LoaderDependencies;\n /** @private */\n __root: Document | Element;\n /** @private */\n __records = new Map<string, ComponentRecord>();\n /** @private */\n __eagerComponents = new Set<string>();\n /** @private */\n __elementSchedules = new WeakMap<Element, Set<string>>();\n /** @private */\n __elementCleanups = new WeakMap<Element, Set<() => void>>();\n /** @private */\n __mutationObserver?: MutationObserver;\n /** @private */\n __started = false;\n\n constructor({ manifest, root, dependencies }: ComponentLoaderOptions) {\n this.__manifest = manifest;\n this.__dependencies = createDependencies(dependencies);\n this.__root = root ?? this.__dependencies.document;\n }\n\n start({ eagerComponents = [] }: ComponentLoaderStartOptions = {}): void {\n if (this.__started) {\n return;\n }\n this.__started = true;\n\n const MutationObserverConstructor = this.__dependencies.MutationObserver;\n if (MutationObserverConstructor) {\n this.__mutationObserver = new MutationObserverConstructor((records) => {\n for (const record of records) {\n for (const node of record.addedNodes) {\n if (node instanceof Element) {\n this.__scan(node);\n }\n }\n for (const node of record.removedNodes) {\n if (node instanceof Element) {\n this.__cleanSubtree(node);\n }\n }\n }\n });\n this.__mutationObserver.observe(this.__root, {\n childList: true,\n subtree: true,\n });\n } else {\n this.__warn('MutationObserver is unavailable; added components will not be discovered.');\n }\n\n for (const token of new Set(eagerComponents)) {\n if (!this.__getEntry(token)) {\n this.__warn('An unknown eager component was ignored.');\n continue;\n }\n this.__eagerComponents.add(token);\n this.__schedule(token, 'eager');\n }\n\n this.__scan(this.__root);\n }\n\n stop(): void {\n this.__mutationObserver?.disconnect();\n for (const record of this.__records.values()) {\n this.__clean(record);\n }\n }\n\n /** @private */\n __scan(root: Document | Element): void {\n if (root instanceof Element && root.matches(COMPONENT_SELECTOR)) {\n this.__discover(root);\n }\n\n for (const element of root.querySelectorAll(COMPONENT_SELECTOR)) {\n this.__discover(element);\n }\n }\n\n /** @private */\n __discover(element: Element): void {\n const rawTokens = element.getAttribute('data-component') ?? '';\n const tokens = new Set(rawTokens.split(/\\s+/).filter(Boolean));\n\n for (const token of tokens) {\n const entry = this.__getEntry(token);\n if (!entry) {\n this.__warn('An unknown component token was ignored.');\n continue;\n }\n\n const strategy = this.__getStrategy(element, entry);\n const scheduleKey = `${token}:${strategy}`;\n const elementSchedules = this.__elementSchedules.get(element) ?? new Set<string>();\n if (elementSchedules.has(scheduleKey)) {\n continue;\n }\n elementSchedules.add(scheduleKey);\n this.__elementSchedules.set(element, elementSchedules);\n this.__schedule(token, strategy, element);\n }\n }\n\n /** @private */\n __getEntry(token: string): ComponentManifestEntry | undefined {\n if (!Object.prototype.hasOwnProperty.call(this.__manifest, token)) {\n return undefined;\n }\n return this.__manifest[token];\n }\n\n /** @private */\n __getStrategy(element: Element, entry: ComponentManifestEntry): ComponentLoadStrategy {\n if (this.__eagerComponents.has(entry.token)) {\n return 'eager';\n }\n\n const attribute = element.getAttribute('data-load');\n if (attribute !== null) {\n if (isLoadStrategy(attribute)) {\n return attribute;\n }\n this.__warn(`Component \"${entry.token}\" has an invalid data-load value; using its default.`);\n }\n\n if (isLoadStrategy(entry.strategy)) {\n return entry.strategy;\n }\n\n this.__warn(`Component \"${entry.token}\" has an invalid manifest strategy; loading eagerly.`);\n return 'eager';\n }\n\n /** @private */\n __getRecord(token: string): ComponentRecord {\n let record = this.__records.get(token);\n if (!record) {\n record = {\n state: 'scheduled',\n cleanups: new Set(),\n scheduledStrategies: new Set(),\n };\n this.__records.set(token, record);\n }\n return record;\n }\n\n /** @private */\n __schedule(token: string, strategy: ComponentLoadStrategy, element?: Element): void {\n const record = this.__getRecord(token);\n if (record.state !== 'scheduled') {\n return;\n }\n\n if (strategy === 'eager') {\n this.__begin(token, record);\n return;\n }\n\n if (strategy === 'visible') {\n if (!element) {\n this.__begin(token, record);\n return;\n }\n const IntersectionObserverConstructor = this.__dependencies.IntersectionObserver;\n if (!IntersectionObserverConstructor) {\n this.__warn(`IntersectionObserver is unavailable; loading component \"${token}\" eagerly.`);\n this.__begin(token, record);\n return;\n }\n const observer = new IntersectionObserverConstructor(\n (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n this.__begin(token, record);\n }\n },\n { rootMargin: VISIBLE_ROOT_MARGIN },\n );\n observer.observe(element);\n this.__addCleanup(record, () => observer.disconnect(), element);\n return;\n }\n\n if (strategy === 'idle') {\n if (record.scheduledStrategies.has(strategy)) {\n return;\n }\n record.scheduledStrategies.add(strategy);\n const requestIdleCallback = this.__dependencies.requestIdleCallback;\n if (requestIdleCallback) {\n const handle = requestIdleCallback(() => this.__begin(token, record), {\n timeout: IDLE_TIMEOUT,\n });\n this.__addCleanup(record, () => this.__dependencies.cancelIdleCallback?.(handle));\n return;\n }\n this.__warn(`requestIdleCallback is unavailable; using a timeout for component \"${token}\".`);\n const handle = this.__dependencies.setTimeout(\n () => this.__begin(token, record),\n IDLE_TIMEOUT,\n );\n this.__addCleanup(record, () => this.__dependencies.clearTimeout(handle));\n return;\n }\n\n if (!element) {\n this.__begin(token, record);\n return;\n }\n\n const listener = () => this.__begin(token, record);\n for (const eventName of ['pointerover', 'pointerdown', 'focusin']) {\n element.addEventListener(eventName, listener, { once: true });\n this.__addCleanup(record, () => element.removeEventListener(eventName, listener), element);\n }\n }\n\n /** @private */\n __begin(token: string, record: ComponentRecord): void {\n if (record.state !== 'scheduled') {\n return;\n }\n\n const entry = this.__getEntry(token);\n if (!entry) {\n return;\n }\n\n record.state = 'loading';\n this.__clean(record);\n record.promise = Promise.resolve()\n .then(() => entry.load())\n .then((Constructor) => {\n if (!isBaseConstructor(Constructor)) {\n throw new TypeError('The manifest loader did not resolve to a Base constructor.');\n }\n return Constructor;\n })\n .catch((error: unknown) => {\n record.state = 'failed';\n this.__reportError(token, 'import', error);\n return undefined;\n })\n .then(async (Constructor) => {\n if (!Constructor) {\n return;\n }\n try {\n await this.__dependencies.registerComponent(Constructor, token);\n record.Constructor = Constructor;\n record.state = 'registered';\n await this.__registerConfiguredChildren(token, Constructor, new Set([token]));\n } catch (error: unknown) {\n record.state = 'failed';\n this.__reportError(token, 'registration', error);\n }\n });\n }\n\n /** @private */\n async __registerConfiguredChildren(\n parentToken: string,\n ParentConstructor: BaseConstructor,\n visited: Set<string>,\n ): Promise<void> {\n const configuredChildren = ParentConstructor.config.components ?? {};\n\n for (const token of this.__getEntry(parentToken)?.children ?? []) {\n if (visited.has(token)) {\n continue;\n }\n\n const Constructor = configuredChildren[token];\n if (!isBaseConstructor(Constructor)) {\n continue;\n }\n\n visited.add(token);\n const record = this.__getRecord(token);\n if (record.state === 'loading') {\n continue;\n }\n\n if (record.state !== 'registered') {\n record.state = 'loading';\n this.__clean(record);\n record.promise = this.__registerConfiguredChild(token, Constructor, record, visited);\n await record.promise;\n } else {\n await this.__registerConfiguredChildren(token, record.Constructor ?? Constructor, visited);\n }\n }\n }\n\n /** @private */\n async __registerConfiguredChild(\n token: string,\n Constructor: BaseConstructor,\n record: ComponentRecord,\n visited: Set<string>,\n ): Promise<void> {\n try {\n await this.__dependencies.registerComponent(Constructor, token);\n record.Constructor = Constructor;\n record.state = 'registered';\n await this.__registerConfiguredChildren(token, Constructor, visited);\n } catch (error: unknown) {\n record.state = 'failed';\n this.__reportError(token, 'registration', error);\n }\n }\n\n /** @private */\n __addCleanup(record: ComponentRecord, cleanup: () => void, element?: Element): void {\n let active = true;\n const run = () => {\n if (!active) {\n return;\n }\n active = false;\n cleanup();\n record.cleanups.delete(run);\n if (element) {\n const elementCleanups = this.__elementCleanups.get(element);\n elementCleanups?.delete(run);\n if (elementCleanups?.size === 0) {\n this.__elementCleanups.delete(element);\n }\n }\n };\n\n record.cleanups.add(run);\n if (element) {\n const elementCleanups = this.__elementCleanups.get(element) ?? new Set();\n elementCleanups.add(run);\n this.__elementCleanups.set(element, elementCleanups);\n }\n }\n\n /** @private */\n __cleanSubtree(root: Element): void {\n for (const element of [root, ...root.querySelectorAll('*')]) {\n if (element.isConnected) {\n continue;\n }\n for (const cleanup of [...(this.__elementCleanups.get(element) ?? [])]) {\n cleanup();\n }\n this.__elementSchedules.delete(element);\n }\n }\n\n /** @private */\n __clean(record: ComponentRecord): void {\n for (const cleanup of record.cleanups) {\n cleanup();\n }\n record.cleanups.clear();\n }\n\n /** @private */\n __warn(message: string): void {\n this.__dependencies.console.warn(`${this.__dependencies.diagnosticPrefix} ${message}`);\n }\n\n /** @private */\n __reportError(token: string, stage: 'import' | 'registration', error: unknown): void {\n this.__dependencies.console.error(\n `${this.__dependencies.diagnosticPrefix} Failed during ${stage} for component \"${token}\".`,\n error,\n );\n const event = new this.__dependencies.CustomEvent('js-toolkit:error', {\n bubbles: true,\n detail: { token, stage, error },\n });\n (this.__dependencies.document.documentElement ?? this.__dependencies.document).dispatchEvent(\n event,\n );\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["handle"]
|
|
7
7
|
}
|
package/dist/autoload/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { Base, BaseConstructor } from '../Base/Base.js';
|
|
1
2
|
import type { BaseDecorator, BaseInterface } from '../Base/types.js';
|
|
2
|
-
import type { Base, BaseConstructor } from '../Base/index.js';
|
|
3
3
|
/**
|
|
4
4
|
* BreakpointManager class.
|
|
5
5
|
* @link https://js-toolkit.studiometa.dev/api/decorators/withBreakpointManager.html
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useResize } from "../services/
|
|
2
|
-
import {
|
|
1
|
+
import { useResize } from "../services/ResizeService.js";
|
|
2
|
+
import { isArray, isDev } from "../utils/is.js";
|
|
3
3
|
function testBreakpoints(breakpoints) {
|
|
4
4
|
const { breakpoint } = useResize().props();
|
|
5
5
|
for (const [breakpointKeys, instance] of breakpoints) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/decorators/withBreakpointManager.ts"],
|
|
4
|
-
"sourcesContent": ["import type {
|
|
5
|
-
"mappings": "AAEA,SAAS,iBAAiB;AAC1B,SAAS,
|
|
4
|
+
"sourcesContent": ["import type { Base, BaseConstructor, BaseProps } from '../Base/Base.js';\nimport type { BaseDecorator, BaseInterface } from '../Base/types.js';\nimport { useResize } from '../services/ResizeService.js';\nimport { isArray, isDev } from '../utils/is.js';\n\n/**\n * Test the breakpoins of the given Base instance and return the hook to call.\n */\nfunction testBreakpoints(breakpoints: Array<[string[], Base]>) {\n const { breakpoint } = useResize().props();\n for (const [breakpointKeys, instance] of breakpoints) {\n if (breakpointKeys.includes(breakpoint) && !instance.$isMounted) {\n setTimeout(() => instance.$mount(), 0);\n } else if (!breakpointKeys.includes(breakpoint) && instance.$isMounted) {\n instance.$destroy();\n }\n }\n}\n\n/**\n * Prepare the components.\n */\nfunction mountComponents(\n instance: Base,\n breakpoints: Array<[string, BaseConstructor]>,\n): Array<[string[], Base]> {\n return breakpoints.map(([bk, ComponentClass]) => {\n const child = new ComponentClass(instance.$el);\n Object.defineProperty(child, '$parent', { get: () => instance.__parent });\n return [bk.split(' '), child];\n });\n}\n\n/**\n * A cache object to hold each Base sub-instances.\n */\nconst instances: WeakMap<Base, Array<[string[], Base]>> = new WeakMap();\n\n/**\n * BreakpointManager class.\n * @link https://js-toolkit.studiometa.dev/api/decorators/withBreakpointManager.html\n */\nexport function withBreakpointManager<S extends Base>(\n BaseClass: typeof Base,\n breakpoints: Array<[string, BaseConstructor<Base>]>,\n): BaseDecorator<BaseInterface, S> {\n if (!isArray(breakpoints)) {\n if (isDev) {\n throw new Error('[withBreakpointManager] The `breakpoints` parameter must be an array.');\n }\n\n // @ts-ignore\n return BaseClass;\n }\n\n if (breakpoints.length < 2) {\n if (isDev) {\n throw new Error('[withBreakpointManager] You must define at least 2 breakpoints.');\n }\n\n // @ts-ignore\n return BaseClass;\n }\n\n const { add, props } = useResize();\n\n // Do nothing if no breakpoint has been defined.\n // @link https://js-toolkit.studiometa.dev/api/services/useResize.html#breakpoint\n if (!props().breakpoint) {\n if (isDev) {\n throw new Error('The `BreakpointManager` class requires breakpoints to be defined.');\n }\n\n // @ts-ignore\n return BaseClass;\n }\n\n /**\n * Class.\n */\n class WithBreakpointManager<T extends BaseProps = BaseProps> extends BaseClass<T> {\n /**\n * Watch for the document resize to test the breakpoints.\n */\n constructor(element: HTMLElement) {\n super(element);\n\n if (!instances.has(this)) {\n instances.set(this, mountComponents(this, breakpoints));\n }\n\n add(`BreakpointManager-${this.$id}`, () => {\n testBreakpoints(instances.get(this));\n });\n }\n\n /**\n * Override the default $mount method to prevent component's from being\n * mounted when they should not.\n */\n async $mount() {\n await super.$mount();\n\n testBreakpoints(instances.get(this));\n\n return this;\n }\n\n /**\n * Destroy all instances when the main one is destroyed.\n */\n async $destroy() {\n const promises = [];\n if (isArray(instances.get(this))) {\n for (const [, instance] of instances.get(this)) {\n promises.push(instance.$destroy());\n }\n }\n\n await Promise.all(promises);\n\n return super.$destroy();\n }\n }\n\n // @ts-ignore\n return WithBreakpointManager;\n}\n"],
|
|
5
|
+
"mappings": "AAEA,SAAS,iBAAiB;AAC1B,SAAS,SAAS,aAAa;AAK/B,SAAS,gBAAgB,aAAsC;AAC7D,QAAM,EAAE,WAAW,IAAI,UAAU,EAAE,MAAM;AACzC,aAAW,CAAC,gBAAgB,QAAQ,KAAK,aAAa;AACpD,QAAI,eAAe,SAAS,UAAU,KAAK,CAAC,SAAS,YAAY;AAC/D,iBAAW,MAAM,SAAS,OAAO,GAAG,CAAC;AAAA,IACvC,WAAW,CAAC,eAAe,SAAS,UAAU,KAAK,SAAS,YAAY;AACtE,eAAS,SAAS;AAAA,IACpB;AAAA,EACF;AACF;AAKA,SAAS,gBACP,UACA,aACyB;AACzB,SAAO,YAAY,IAAI,CAAC,CAAC,IAAI,cAAc,MAAM;AAC/C,UAAM,QAAQ,IAAI,eAAe,SAAS,GAAG;AAC7C,WAAO,eAAe,OAAO,WAAW,EAAE,KAAK,MAAM,SAAS,SAAS,CAAC;AACxE,WAAO,CAAC,GAAG,MAAM,GAAG,GAAG,KAAK;AAAA,EAC9B,CAAC;AACH;AAKA,MAAM,YAAoD,oBAAI,QAAQ;AAM/D,SAAS,sBACd,WACA,aACiC;AACjC,MAAI,CAAC,QAAQ,WAAW,GAAG;AACzB,QAAI,OAAO;AACT,YAAM,IAAI,MAAM,uEAAuE;AAAA,IACzF;AAGA,WAAO;AAAA,EACT;AAEA,MAAI,YAAY,SAAS,GAAG;AAC1B,QAAI,OAAO;AACT,YAAM,IAAI,MAAM,iEAAiE;AAAA,IACnF;AAGA,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,KAAK,MAAM,IAAI,UAAU;AAIjC,MAAI,CAAC,MAAM,EAAE,YAAY;AACvB,QAAI,OAAO;AACT,YAAM,IAAI,MAAM,mEAAmE;AAAA,IACrF;AAGA,WAAO;AAAA,EACT;AAAA,EAKA,MAAM,8BAA+D,UAAa;AAAA;AAAA;AAAA;AAAA,IAIhF,YAAY,SAAsB;AAChC,YAAM,OAAO;AAEb,UAAI,CAAC,UAAU,IAAI,IAAI,GAAG;AACxB,kBAAU,IAAI,MAAM,gBAAgB,MAAM,WAAW,CAAC;AAAA,MACxD;AAEA,UAAI,qBAAqB,KAAK,GAAG,IAAI,MAAM;AACzC,wBAAgB,UAAU,IAAI,IAAI,CAAC;AAAA,MACrC,CAAC;AAAA,IACH;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,MAAM,SAAS;AACb,YAAM,MAAM,OAAO;AAEnB,sBAAgB,UAAU,IAAI,IAAI,CAAC;AAEnC,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,MAAM,WAAW;AACf,YAAM,WAAW,CAAC;AAClB,UAAI,QAAQ,UAAU,IAAI,IAAI,CAAC,GAAG;AAChC,mBAAW,CAAC,EAAE,QAAQ,KAAK,UAAU,IAAI,IAAI,GAAG;AAC9C,mBAAS,KAAK,SAAS,SAAS,CAAC;AAAA,QACnC;AAAA,MACF;AAEA,YAAM,QAAQ,IAAI,QAAQ;AAE1B,aAAO,MAAM,SAAS;AAAA,IACxB;AAAA,EACF;AAGA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { Base, BaseProps } from '../Base/Base.js';
|
|
1
2
|
import type { BaseDecorator, BaseInterface } from '../Base/types.js';
|
|
2
|
-
import type { Base, BaseProps } from '../Base/index.js';
|
|
3
3
|
export interface WithBreakpointObserverProps extends BaseProps {
|
|
4
4
|
$options: {
|
|
5
5
|
activeBreakpoints?: string;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { useResize } from "../services/
|
|
2
|
-
import { isDev
|
|
1
|
+
import { useResize } from "../services/ResizeService.js";
|
|
2
|
+
import { isDev } from "../utils/is.js";
|
|
3
|
+
import { startsWith } from "../utils/string/startsWith.js";
|
|
3
4
|
import { features } from "../Base/features.js";
|
|
4
5
|
function testBreakpoints(instance, breakpoint = useResize().props().breakpoint) {
|
|
5
6
|
const { activeBreakpoints, inactiveBreakpoints } = instance.$options;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/decorators/withBreakpointObserver.ts"],
|
|
4
|
-
"sourcesContent": ["import type {
|
|
5
|
-
"mappings": "AAEA,
|
|
4
|
+
"sourcesContent": ["import type { Base, BaseConfig, BaseProps } from '../Base/Base.js';\nimport type { BaseDecorator, BaseInterface } from '../Base/types.js';\nimport { type ResizeServiceProps, useResize } from '../services/ResizeService.js';\nimport { isDev } from '../utils/is.js';\nimport { startsWith } from '../utils/string/startsWith.js';\nimport { features } from '../Base/features.js';\n\nexport interface WithBreakpointObserverProps extends BaseProps {\n $options: {\n activeBreakpoints?: string;\n inactiveBreakpoints?: string;\n };\n}\n\nexport interface WithBreakpointObserverInterface extends BaseInterface {}\n\n/**\n * Test the breakpoins of the given Base instance and return the hook to call.\n *\n * @param {Base<WithBreakpointObserverProps>} instance The component's instance.\n * @param {string} [breakpoint] The breakpoint to test.\n * @return {string} The action to trigger.\n */\nfunction testBreakpoints(\n instance: Base<WithBreakpointObserverProps>,\n breakpoint: string = useResize().props().breakpoint,\n): string {\n const { activeBreakpoints, inactiveBreakpoints } = instance.$options;\n const isInActiveBreakpoint =\n activeBreakpoints && activeBreakpoints.split(' ').includes(breakpoint);\n const isInInactiveBreakpoint =\n inactiveBreakpoints && inactiveBreakpoints.split(' ').includes(breakpoint);\n\n if (\n (activeBreakpoints && isInActiveBreakpoint) ||\n (inactiveBreakpoints && !isInInactiveBreakpoint)\n ) {\n return '$mount';\n }\n\n return '$destroy';\n}\n\n/**\n * Test if the given instance is configured for breakpoints.\n *\n * @param {Base<WithBreakpointObserverProps>} instance A Base class instance.\n * @return {boolean} True if configured correctly, false otherwise.\n */\nfunction hasBreakpointConfiguration(instance: Base<WithBreakpointObserverProps>): boolean {\n const { activeBreakpoints, inactiveBreakpoints } = instance.$options;\n return Boolean(activeBreakpoints || inactiveBreakpoints);\n}\n\n/**\n * Test if the given instance has a conflicting configuration for breakpoints.\n *\n * @param {Base<WithBreakpointObserverProps>} instance A Base class instance.\n * @return {void}\n */\nfunction testConflictingBreakpointConfiguration(instance: Base<WithBreakpointObserverProps>): void {\n const { activeBreakpoints, inactiveBreakpoints, name } = instance.$options;\n if (activeBreakpoints && inactiveBreakpoints) {\n throw new Error(\n `[${name}] Incorrect configuration: the \\`activeBreakpoints\\` and \\`inactiveBreakpoints\\` are not compatible.`,\n );\n }\n}\n\n/**\n * Callback triggered when the window is resized.\n */\nfunction createResizeCallback(\n instance: Base<WithBreakpointObserverProps>,\n): (resizeProps: ResizeServiceProps) => void {\n return ({ breakpoint }) => {\n const action = testBreakpoints(instance, breakpoint);\n\n // Always destroy before mounting\n if (action === '$destroy' && instance.$isMounted) {\n instance[action]();\n } else if (action === '$mount' && !instance.$isMounted) {\n setTimeout(() => instance[action](), 0);\n }\n };\n}\n\n/**\n * Add the current instance to the resize service.\n *\n * @param {string} key The key for the resize service callback.\n * @param {Base} instance The instance to observe.\n */\nfunction addToResize(key, instance) {\n if (isDev) {\n testConflictingBreakpointConfiguration(instance);\n }\n\n const { add, has, props } = useResize();\n\n if (!has(key)) {\n const callback = createResizeCallback(instance);\n add(key, callback);\n callback(props());\n }\n}\n\n/**\n * BreakpointObserver class.\n * @link https://js-toolkit.studiometa.dev/api/decorators/withBreakpointObserver.html\n */\nexport function withBreakpointObserver<S extends Base>(\n BaseClass: typeof Base,\n): BaseDecorator<WithBreakpointObserverInterface, S, WithBreakpointObserverProps> {\n /**\n * Class.\n */\n class WithBreakpointObserver<T extends BaseProps = BaseProps> extends BaseClass<\n T & WithBreakpointObserverProps\n > {\n /**\n * Config.\n */\n static config: BaseConfig = {\n ...BaseClass.config,\n options: {\n activeBreakpoints: String,\n inactiveBreakpoints: String,\n },\n };\n\n /**\n * Watch for the document resize to test the breakpoints.\n */\n constructor(element: HTMLElement) {\n super(element);\n\n const { remove, props } = useResize();\n const { name } = this.$options;\n\n // Do nothing if no breakpoint has been defined.\n // @link https://js-toolkit.studiometa.dev/api/services/useResize.html#breakpoint\n if (!props().breakpoint) {\n if (isDev) {\n throw new Error(\n `[${name}] The \\`BreakpointObserver\\` class requires breakpoints to be defined.`,\n );\n }\n return;\n }\n\n const key = `BreakpointObserver-${this.$id}`;\n const attributes = features.get('attributes');\n\n // Watch change on the `data-options` attribute to emit the `set:options` event.\n const mutationObserver = new MutationObserver(([mutation]) => {\n if (\n mutation.type === 'attributes' &&\n startsWith(mutation.attributeName, `${attributes.option}-`)\n ) {\n // Stop here silently when no breakpoint configuration given.\n if (!hasBreakpointConfiguration(this)) {\n this.$mount();\n remove(key);\n return;\n }\n\n addToResize(key, this);\n }\n });\n mutationObserver.observe(this.$el, { attributes: true });\n\n // Stop here silently when no breakpoint configuration given.\n if (!hasBreakpointConfiguration(this)) {\n return;\n }\n\n addToResize(key, this);\n }\n\n /**\n * Override the default $mount method to prevent component's from being\n * mounted when they should not.\n */\n async $mount() {\n // Execute normal behavior when no breakpoint configuration given.\n if (!hasBreakpointConfiguration(this)) {\n return super.$mount();\n }\n\n const action = testBreakpoints(this);\n if (action === '$mount') {\n return super.$mount();\n }\n\n return this;\n }\n }\n\n // @ts-ignore\n return WithBreakpointObserver;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type { Base } from '../Base/Base.js';
|
|
1
2
|
import type { BaseDecorator, BaseInterface } from '../Base/types.js';
|
|
2
|
-
import type
|
|
3
|
-
import type { DragServiceOptions, DragServiceProps } from '../services/index.js';
|
|
3
|
+
import { type DragServiceOptions, type DragServiceProps } from '../services/DragService.js';
|
|
4
4
|
export type DragDecoratorOptions = DragServiceOptions & {
|
|
5
5
|
target?: (this: Base, instance: Base) => HTMLElement;
|
|
6
6
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/decorators/withDrag.ts"],
|
|
4
|
-
"sourcesContent": ["import type {
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import type { Base, BaseConfig, BaseProps } from '../Base/Base.js';\nimport type { BaseDecorator, BaseInterface } from '../Base/types.js';\nimport {\n type DragServiceOptions,\n type DragServiceProps,\n useDrag,\n} from '../services/DragService.js';\n\nexport type DragDecoratorOptions = DragServiceOptions & {\n target?: (this: Base, instance: Base) => HTMLElement;\n};\n\nexport interface WithDragInterface extends BaseInterface {\n dragged?(props: DragServiceProps): void;\n}\n\n/**\n * Add dragging capabilities to a component.\n * @link https://js-toolkit.studiometa.dev/api/decorators/withDrag.html\n */\nexport function withDrag<S extends Base>(\n BaseClass: typeof Base,\n { target = (instance) => instance.$el, ...options }: DragDecoratorOptions = {},\n): BaseDecorator<BaseInterface, S> {\n /**\n * Class.\n */\n class WithDrag<T extends BaseProps = BaseProps> extends BaseClass<T & WithDragInterface> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n ...BaseClass.config,\n emits: ['dragged'],\n };\n\n /**\n * Class constructor.\n */\n constructor(element: HTMLElement) {\n super(element);\n\n this.$on('mounted', () => {\n this.$services.register(\n 'dragged',\n useDrag.bind(undefined, target.call(this, this), options),\n );\n this.$services.enable('dragged');\n });\n\n this.$on('destroyed', () => {\n this.$services.disable('dragged');\n this.$services.unregister('dragged');\n });\n }\n }\n\n // @ts-ignore\n return WithDrag;\n}\n"],
|
|
5
|
+
"mappings": "AAEA;AAAA,EAGE;AAAA,OACK;AAcA,SAAS,SACd,WACA,EAAE,SAAS,CAAC,aAAa,SAAS,KAAK,GAAG,QAAQ,IAA0B,CAAC,GAC5C;AAAA,EAIjC,MAAM,iBAAkD,UAAiC;AAAA;AAAA;AAAA;AAAA,IAIvF,OAAO,SAAqB;AAAA,MAC1B,GAAG,UAAU;AAAA,MACb,OAAO,CAAC,SAAS;AAAA,IACnB;AAAA;AAAA;AAAA;AAAA,IAKA,YAAY,SAAsB;AAChC,YAAM,OAAO;AAEb,WAAK,IAAI,WAAW,MAAM;AACxB,aAAK,UAAU;AAAA,UACb;AAAA,UACA,QAAQ,KAAK,QAAW,OAAO,KAAK,MAAM,IAAI,GAAG,OAAO;AAAA,QAC1D;AACA,aAAK,UAAU,OAAO,SAAS;AAAA,MACjC,CAAC;AAED,WAAK,IAAI,aAAa,MAAM;AAC1B,aAAK,UAAU,QAAQ,SAAS;AAChC,aAAK,UAAU,WAAW,SAAS;AAAA,MACrC,CAAC;AAAA,IACH;AAAA,EACF;AAGA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type { Base, BaseConfig } from '../Base/Base.js';
|
|
1
2
|
import type { Options as DeepmergeOptions } from 'deepmerge';
|
|
2
3
|
import type { BaseDecorator, BaseInterface } from '../Base/types.js';
|
|
3
|
-
import type { Base, BaseConfig } from '../Base/index.js';
|
|
4
4
|
/**
|
|
5
5
|
* Extends the configuration of an existing class.
|
|
6
6
|
* @link https://js-toolkit.studiometa.dev/api/decorators/withExtraConfig.html
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/decorators/withExtraConfig.ts"],
|
|
4
|
-
"sourcesContent": ["import merge from 'deepmerge';\nimport type {
|
|
4
|
+
"sourcesContent": ["import merge from 'deepmerge';\nimport type { Base, BaseConfig, BaseProps } from '../Base/Base.js';\nimport type { Options as DeepmergeOptions } from 'deepmerge';\nimport type { BaseDecorator, BaseInterface } from '../Base/types.js';\n\n/**\n * Extends the configuration of an existing class.\n * @link https://js-toolkit.studiometa.dev/api/decorators/withExtraConfig.html\n */\nexport function withExtraConfig<S extends Base>(\n BaseClass: typeof Base,\n config: Partial<BaseConfig>,\n options: DeepmergeOptions = {},\n): BaseDecorator<BaseInterface, S> {\n const newConfig = merge(BaseClass.config, config, options);\n\n if (newConfig.name === BaseClass.config.name) {\n newConfig.name = `${BaseClass.config.name}WithExtraConfig`;\n }\n\n /**\n * Class.\n */\n class WithExtraConfig<T extends BaseProps = BaseProps> extends BaseClass<T> {\n /**\n * Config.\n */\n static config: BaseConfig = newConfig;\n }\n\n // @ts-ignore\n return WithExtraConfig;\n}\n"],
|
|
5
5
|
"mappings": "AAAA,OAAO,WAAW;AASX,SAAS,gBACd,WACA,QACA,UAA4B,CAAC,GACI;AACjC,QAAM,YAAY,MAAM,UAAU,QAAQ,QAAQ,OAAO;AAEzD,MAAI,UAAU,SAAS,UAAU,OAAO,MAAM;AAC5C,cAAU,OAAO,GAAG,UAAU,OAAO,IAAI;AAAA,EAC3C;AAAA,EAKA,MAAM,wBAAyD,UAAa;AAAA;AAAA;AAAA;AAAA,IAI1E,OAAO,SAAqB;AAAA,EAC9B;AAGA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { Base, BaseOptions } from '../Base/Base.js';
|
|
1
2
|
import type { BaseDecorator, BaseInterface } from '../Base/types.js';
|
|
2
|
-
import type { Base, BaseOptions } from '../Base/index.js';
|
|
3
3
|
export interface WithFreezedOptionsInterface extends BaseInterface {
|
|
4
4
|
readonly $options: Readonly<BaseOptions>;
|
|
5
5
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/decorators/withFreezedOptions.ts"],
|
|
4
|
-
"sourcesContent": ["import type {
|
|
4
|
+
"sourcesContent": ["import type { Base, BaseOptions, BaseProps } from '../Base/Base.js';\nimport type { BaseDecorator, BaseInterface } from '../Base/types.js';\n\nexport interface WithFreezedOptionsInterface extends BaseInterface {\n readonly $options: Readonly<BaseOptions>;\n}\n\n/**\n * Freeze the `$options` property to improve performance.\n * @link https://js-toolkit.studiometa.dev/api/decorators/withFreezedOptions.html\n */\nexport function withFreezedOptions<S extends Base>(\n BaseClass: typeof Base,\n): BaseDecorator<WithFreezedOptionsInterface, S> {\n /**\n * Class.\n */\n class WithFreezedOptions<T extends BaseProps = BaseProps> extends BaseClass<T> {\n /**\n * Hold freezed options\n *\n * @private\n */\n __freezedOptions;\n\n /**\n * Lazyly freeze the `$options` property.\n */\n get $options() {\n if (!this.__freezedOptions) {\n Object.defineProperty(this, '__freezedOptions', {\n value: Object.freeze({ ...super.$options }),\n enumerable: false,\n configurable: true,\n });\n }\n\n return this.__freezedOptions;\n }\n }\n\n // @ts-ignore\n return WithFreezedOptions;\n}\n"],
|
|
5
5
|
"mappings": "AAWO,SAAS,mBACd,WAC+C;AAAA,EAI/C,MAAM,2BAA4D,UAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAM7E;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,WAAW;AACb,UAAI,CAAC,KAAK,kBAAkB;AAC1B,eAAO,eAAe,MAAM,oBAAoB;AAAA,UAC9C,OAAO,OAAO,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC;AAAA,UAC1C,YAAY;AAAA,UACZ,cAAc;AAAA,QAChB,CAAC;AAAA,MACH;AAEA,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AAGA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { Base, BaseProps } from '../Base/Base.js';
|
|
1
2
|
import type { BaseDecorator, BaseInterface } from '../Base/types.js';
|
|
2
|
-
import type { Base, BaseProps } from '../Base/index.js';
|
|
3
3
|
export interface WithGroupProps extends BaseProps {
|
|
4
4
|
$options: {
|
|
5
5
|
group: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/decorators/withGroup.ts"],
|
|
4
|
-
"sourcesContent": ["import type {
|
|
4
|
+
"sourcesContent": ["import type { Base, BaseConfig, BaseProps } from '../Base/Base.js';\nimport type { BaseDecorator, BaseInterface } from '../Base/types.js';\n\nexport interface WithGroupProps extends BaseProps {\n $options: {\n group: string;\n };\n}\n\nexport interface WithGroupInterface extends BaseInterface {\n get $group(): Set<Base>;\n}\n\n/**\n * Options for the `withGroup` decorator.\n */\nexport interface WithGroupOptions<T extends Base = Base, Scope extends object = object> {\n /**\n * Resolve the scope an instance belongs to. Return `undefined` to fall back\n * to the global (unscoped) registry.\n */\n getScope?: (instance: T) => Scope | undefined;\n /**\n * Resolve the group name of an instance, optionally using its resolved scope.\n * Defaults to `instance.$options.group`.\n */\n getGroup?: (instance: T, scope: Scope | undefined) => string;\n}\n\n/**\n * Get global groups map.\n */\nfunction groups<T extends Base = Base>(): Map<string, Set<T>> {\n return (globalThis.__JS_TOOLKIT_GROUPS__ ??= new Map<string, Set<T>>());\n}\n\n/**\n * Scoped groups registry, keyed by scope identity. Scopes are stored in a\n * `WeakMap` so they can be garbage-collected once no longer referenced.\n */\nconst scopedGroups = new WeakMap<object, Map<string, Set<Base>>>();\n\n/**\n * Enumerate the scoped groups registered for a given scope.\n *\n * Returns the live `Map` of `${namespace}${group}` keys to their members set\n * for the given scope, or an empty `Map` for unknown scopes. Unknown scopes are\n * NOT registered as a side effect of reading.\n */\nexport function getScopedGroups(scope: object): Map<string, Set<Base>> {\n return scopedGroups.get(scope) ?? new Map<string, Set<Base>>();\n}\n\n/**\n * Get the members set for a given `(scope, key)` pair, creating it if needed.\n * When `scope` is `undefined`, the global (unscoped) registry is used.\n */\nfunction resolveGroupSet(scope: object | undefined, key: string): Set<Base> {\n if (scope) {\n let map = scopedGroups.get(scope);\n if (!map) {\n map = new Map<string, Set<Base>>();\n scopedGroups.set(scope, map);\n }\n let set = map.get(key);\n if (!set) {\n set = new Set<Base>();\n map.set(key, set);\n }\n return set;\n }\n\n const registry = groups();\n return registry.get(key) ?? registry.set(key, new Set()).get(key)!;\n}\n\n/**\n * Add group features to easily bind multiple components together.\n *\n * @link https://js-toolkit.studiometa.dev/api/decorators/withGroup.html\n */\nexport function withGroup<S extends Base = Base, Scope extends object = object>(\n BaseClass: typeof Base,\n namespace = '',\n options: WithGroupOptions<S, Scope> = {},\n): BaseDecorator<WithGroupInterface, S, WithGroupProps> {\n const getScope = options.getScope;\n const getGroup = options.getGroup ?? ((instance: S) => instance.$options.group);\n\n // @ts-expect-error Decorators can not be typed.\n return class WithGroup<T extends BaseProps = BaseProps> extends BaseClass<T & WithGroupProps> {\n static config: BaseConfig = {\n ...BaseClass.config,\n options: {\n group: String,\n },\n };\n\n /**\n * The members set remembered at mount time, if any.\n *\n * @private\n */\n __groupSnapshot: Set<Base> | undefined = undefined;\n\n /**\n * Resolve the members set for the current scope and group.\n *\n * @private\n */\n __resolveGroup() {\n const scope = getScope?.(this as unknown as S);\n const group = `${namespace}${getGroup(this as unknown as S, scope)}`;\n return resolveGroupSet(scope, group);\n }\n\n /**\n * Get the group set.\n */\n get $group() {\n const instances = this.__groupSnapshot ?? this.__resolveGroup();\n\n for (const instance of instances) {\n if (!instance.$el.isConnected) {\n instances.delete(instance);\n }\n }\n\n return instances;\n }\n\n constructor(element: HTMLElement) {\n super(element);\n\n this.$on('mounted', () => {\n // Resolve the members set through the public `$group` getter so that\n // subclasses overriding it keep receiving the membership writes. At this\n // point `__groupSnapshot` is still `undefined`, so the base getter\n // resolves fresh (identical behaviour for non-overriding classes).\n // Remember the exact set the instance was added to so that on destroy a\n // member is always removed from the set it joined, even if the scope or\n // group would now resolve differently.\n const instances = this.$group;\n instances.add(this);\n this.__groupSnapshot = instances;\n });\n this.$on('destroyed', () => {\n this.__groupSnapshot?.delete(this);\n this.__groupSnapshot = undefined;\n });\n }\n };\n}\n"],
|
|
5
5
|
"mappings": "AAgCA,SAAS,SAAqD;AAC5D,SAAQ,WAAW,0BAA0B,oBAAI,IAAoB;AACvE;AAMA,MAAM,eAAe,oBAAI,QAAwC;AAS1D,SAAS,gBAAgB,OAAuC;AACrE,SAAO,aAAa,IAAI,KAAK,KAAK,oBAAI,IAAuB;AAC/D;AAMA,SAAS,gBAAgB,OAA2B,KAAwB;AAC1E,MAAI,OAAO;AACT,QAAI,MAAM,aAAa,IAAI,KAAK;AAChC,QAAI,CAAC,KAAK;AACR,YAAM,oBAAI,IAAuB;AACjC,mBAAa,IAAI,OAAO,GAAG;AAAA,IAC7B;AACA,QAAI,MAAM,IAAI,IAAI,GAAG;AACrB,QAAI,CAAC,KAAK;AACR,YAAM,oBAAI,IAAU;AACpB,UAAI,IAAI,KAAK,GAAG;AAAA,IAClB;AACA,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,OAAO;AACxB,SAAO,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,oBAAI,IAAI,CAAC,EAAE,IAAI,GAAG;AAClE;AAOO,SAAS,UACd,WACA,YAAY,IACZ,UAAsC,CAAC,GACe;AACtD,QAAM,WAAW,QAAQ;AACzB,QAAM,WAAW,QAAQ,aAAa,CAAC,aAAgB,SAAS,SAAS;AAGzE,SAAO,MAAM,kBAAmD,UAA8B;AAAA,IAC5F,OAAO,SAAqB;AAAA,MAC1B,GAAG,UAAU;AAAA,MACb,SAAS;AAAA,QACP,OAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,kBAAyC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOzC,iBAAiB;AACf,YAAM,QAAQ,WAAW,IAAoB;AAC7C,YAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,MAAsB,KAAK,CAAC;AAClE,aAAO,gBAAgB,OAAO,KAAK;AAAA,IACrC;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,SAAS;AACX,YAAM,YAAY,KAAK,mBAAmB,KAAK,eAAe;AAE9D,iBAAW,YAAY,WAAW;AAChC,YAAI,CAAC,SAAS,IAAI,aAAa;AAC7B,oBAAU,OAAO,QAAQ;AAAA,QAC3B;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,YAAY,SAAsB;AAChC,YAAM,OAAO;AAEb,WAAK,IAAI,WAAW,MAAM;AAQxB,cAAM,YAAY,KAAK;AACvB,kBAAU,IAAI,IAAI;AAClB,aAAK,kBAAkB;AAAA,MACzB,CAAC;AACD,WAAK,IAAI,aAAa,MAAM;AAC1B,aAAK,iBAAiB,OAAO,IAAI;AACjC,aAAK,kBAAkB;AAAA,MACzB,CAAC;AAAA,IACH;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|