@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
package/dist/Base/Base.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import { ChildrenManager
|
|
1
|
+
import { ChildrenManager } from './managers/ChildrenManager.js';
|
|
2
|
+
import { EventsManager } from './managers/EventsManager.js';
|
|
3
|
+
import { OptionsManager } from './managers/OptionsManager.js';
|
|
4
|
+
import { RefsManager } from './managers/RefsManager.js';
|
|
5
|
+
import { ServicesManager } from './managers/ServicesManager.js';
|
|
2
6
|
export type BaseEl = HTMLElement & {
|
|
3
7
|
__base__?: Map<string, Base | 'terminated'>;
|
|
4
8
|
};
|
package/dist/Base/Base.js
CHANGED
|
@@ -1,22 +1,21 @@
|
|
|
1
|
+
import { closestComponent, queryComponentAll } from "../helpers/queryComponent.js";
|
|
2
|
+
import { isArray, isDev, isFunction } from "../utils/is.js";
|
|
3
|
+
import { noop } from "../utils/noop.js";
|
|
4
|
+
import { ChildrenManager } from "./managers/ChildrenManager.js";
|
|
5
|
+
import { EventsManager } from "./managers/EventsManager.js";
|
|
6
|
+
import { OptionsManager } from "./managers/OptionsManager.js";
|
|
7
|
+
import { RefsManager } from "./managers/RefsManager.js";
|
|
8
|
+
import { ServicesManager } from "./managers/ServicesManager.js";
|
|
1
9
|
import {
|
|
2
|
-
getComponentElements,
|
|
3
|
-
getEventTarget,
|
|
4
|
-
addToQueue,
|
|
5
10
|
addInstance,
|
|
6
|
-
|
|
11
|
+
addToQueue,
|
|
7
12
|
addToRegistry,
|
|
13
|
+
deleteInstance,
|
|
14
|
+
getComponentElements,
|
|
15
|
+
getEventTarget,
|
|
8
16
|
hasInstance
|
|
9
17
|
} from "./utils.js";
|
|
10
|
-
import {
|
|
11
|
-
ChildrenManager,
|
|
12
|
-
RefsManager,
|
|
13
|
-
ServicesManager,
|
|
14
|
-
EventsManager,
|
|
15
|
-
OptionsManager
|
|
16
|
-
} from "./managers/index.js";
|
|
17
18
|
import { getInstanceFromElement } from "../helpers/getInstanceFromElement.js";
|
|
18
|
-
import { queryComponentAll, closestComponent } from "../helpers/queryComponent.js";
|
|
19
|
-
import { noop, isDev, isFunction, isArray } from "../utils/index.js";
|
|
20
19
|
let id = 0;
|
|
21
20
|
class Base {
|
|
22
21
|
/**
|
package/dist/Base/Base.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/Base/Base.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable no-use-before-define */\nimport {\n getComponentElements,\n getEventTarget,\n addToQueue,\n addInstance,\n deleteInstance,\n addToRegistry,\n hasInstance,\n} from './utils.js';\nimport {\n ChildrenManager,\n RefsManager,\n ServicesManager,\n EventsManager,\n OptionsManager,\n} from './managers/index.js';\nimport { getInstanceFromElement } from '../helpers/getInstanceFromElement.js';\nimport { queryComponentAll, closestComponent } from '../helpers/queryComponent.js';\nimport { noop, isDev, isFunction, isArray } from '../utils/index.js';\n\nlet id = 0;\n\nexport type BaseEl = HTMLElement & { __base__?: Map<string, Base | 'terminated'> };\nexport type BaseConstructor<T extends Base = Base> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): T;\n prototype: Base;\n} & Pick<typeof Base, keyof typeof Base>;\nexport type BaseAsyncConstructor<T extends Base = Base> = (\n instance: Base,\n) => Promise<BaseConstructor<T> | { default: BaseConstructor<T> }>;\nexport type BaseOptions = { [name: string]: unknown };\nexport type BaseRefs = { [name: string]: HTMLElement | HTMLElement[] };\nexport type BaseChildren = { [nameOrSelector: string]: Base[] | Promise<Base>[] };\nexport type BaseConfigComponents = {\n [nameOrSelector: string]: BaseConstructor | BaseAsyncConstructor;\n};\n\nexport type BaseConfig = {\n name: string;\n debug?: boolean;\n log?: boolean;\n refs?: string[];\n emits?: string[];\n components?: BaseConfigComponents;\n options?: import('./managers/OptionsManager').OptionsSchema;\n};\n\nexport type BaseProps = {\n $el?: HTMLElement;\n $options?: BaseOptions;\n $refs?: BaseRefs;\n $children?: BaseChildren;\n $parent?: Base;\n};\n\nexport type Managers = {\n ChildrenManager: typeof ChildrenManager;\n EventsManager: typeof EventsManager;\n OptionsManager: typeof OptionsManager;\n RefsManager: typeof RefsManager;\n ServicesManager: typeof ServicesManager;\n};\n\n/**\n * Base class.\n *\n * @link https://js-toolkit.studiometa.dev/api/\n */\nexport class Base<T extends BaseProps = BaseProps> {\n /**\n * Declare the `this.constructor` type\n * @link https://github.com/microsoft/TypeScript/issues/3841#issuecomment-2381594311\n */\n declare ['constructor']: BaseConstructor;\n\n /**\n * This is a Base instance.\n */\n static readonly $isBase = true as const;\n\n /**\n * Config.\n * @link https://js-toolkit.studiometa.dev/api/configuration.html\n */\n static config: BaseConfig = {\n name: 'Base',\n emits: [\n // hook events\n 'before-mounted',\n 'mounted',\n 'after-mounted',\n 'updated',\n 'before-destroyed',\n 'destroyed',\n 'after-destroyed',\n 'terminated',\n // default services' events\n 'ticked',\n 'scrolled',\n 'resized',\n 'moved',\n 'loaded',\n 'keyed',\n ],\n };\n\n /**\n * The instance id.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#id\n */\n $id: string;\n\n /**\n * The root element.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#el\n */\n $el: T['$el'] & BaseEl;\n\n /**\n * The state of the component.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#isMounted\n */\n $isMounted = false;\n\n /**\n * Is the component currently mounting itself and its children?\n * @private\n */\n __isMounting = false;\n\n /**\n * Store the event handlers.\n * @private\n */\n __eventHandlers: Map<string, Set<EventListenerOrEventListenerObject>> = new Map();\n\n /**\n * Get the root instance of the app.\n * @deprecated Use `$closest(name)` instead. Will be removed in v4.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#root\n */\n get $root(): Base {\n if (isDev) {\n console.warn(\n `[${this.$id}] $root is deprecated and will be removed in v4. Use $closest(name) instead.`,\n );\n }\n\n if (!this.__parent) {\n return this;\n }\n\n let parent = this.__parent;\n let root = this.__parent;\n\n while (parent) {\n if (!parent.__parent) {\n root = parent;\n }\n\n parent = parent.__parent;\n }\n\n return root;\n }\n\n /**\n * The parent instance if the current instance is registered as a child component in a parent component.\n * @deprecated Use `$closest(name)` instead. Will be removed in v4.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#parent\n */\n get $parent(): (T['$parent'] & Base) | null {\n if (isDev) {\n console.warn(\n `[${this.$id}] $parent is deprecated and will be removed in v4. Use $closest(name) instead.`,\n );\n }\n\n return this.__parent;\n }\n\n /**\n * Internal parent resolution without deprecation warning.\n * @internal\n */\n get __parent(): (T['$parent'] & Base) | null {\n // Walk up the DOM ancestors and resolve the closest mounted instance whose\n // config declares this component as a child, using each element's `__base__`\n // map for an O(1)-per-ancestor lookup. This is O(tree depth) instead of the\n // O(N_instances) global scan (plus `Set` copy) it replaces.\n let el = this.$el.parentElement;\n\n while (el) {\n const baseMap = (el as BaseEl).__base__;\n\n if (baseMap) {\n for (const instance of baseMap.values()) {\n if (instance === 'terminated' || !hasInstance(instance)) continue;\n\n const { components } = instance.$config;\n if (components) {\n for (const component of Object.values(components)) {\n // Sync child: the declared value is the resolved constructor.\n if (component === this.constructor) {\n return instance as T['$parent'] & Base;\n }\n\n // Async/lazy child: the declared value is a loader function, so it\n // never equals `this.constructor`. Its resolved constructor lives\n // in the ancestor's own ChildrenManager, keyed by that same loader\n // function \u2014 read it back to match by resolved identity.\n if (isFunction(component) && !('$isBase' in component)) {\n const resolved = instance.__children.__asyncComponentPromises.get(\n component as BaseAsyncConstructor,\n );\n if (resolved?.status === 'resolved' && resolved.ctor === this.constructor) {\n return instance as T['$parent'] & Base;\n }\n }\n }\n }\n }\n }\n\n el = el.parentElement;\n }\n\n return null;\n }\n\n /**\n * Merge configuration with the parents' configurations.\n * @private\n */\n get __config(): BaseConfig {\n let proto = Object.getPrototypeOf(this);\n let { config } = proto.constructor;\n\n while (proto.constructor.config && proto.constructor.$isBase) {\n config = { ...proto.constructor.config, ...config };\n\n if (proto.constructor.config.options) {\n config.options = { ...proto.constructor.config.options, ...config.options };\n }\n\n if (proto.constructor.config.emits && config.emits) {\n config.emits = [...proto.constructor.config.emits, ...config.emits];\n }\n\n proto = Object.getPrototypeOf(proto);\n }\n\n config.options = config.options ?? {};\n config.refs = config.refs ?? [];\n config.components = config.components ?? {};\n\n return config;\n }\n\n /**\n * The normalized config of the component.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#config\n */\n get $config() {\n return this.__config;\n }\n\n __services: ServicesManager;\n\n /**\n * Services.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#services\n */\n get $services(): ServicesManager {\n return this.__services;\n }\n\n __refs: RefsManager<T['$refs'] & BaseRefs>;\n\n /**\n * Refs.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#refs\n */\n get $refs(): T['$refs'] & BaseRefs {\n return this.__refs.props;\n }\n\n __options: OptionsManager<T['$options'] & BaseOptions>;\n\n /**\n * Options.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#options\n */\n get $options(): T['$options'] & BaseOptions {\n return this.__options.props;\n }\n\n __children: ChildrenManager<T['$children'] & BaseChildren>;\n\n /**\n * Children.\n * @deprecated Use `$query(name)` instead. Will be removed in v4.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#children\n */\n get $children(): T['$children'] & BaseChildren {\n if (isDev) {\n console.warn(\n `[${this.$id}] $children is deprecated and will be removed in v4. Use $query(name) instead.`,\n );\n }\n\n return this.__children.props;\n }\n\n /**\n * Get all descendant component instances matching the given query.\n * Sugar for `queryComponentAll(query, { from: this.$el })`.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#query-query\n */\n $query<U extends Base = Base>(query: string): U[] {\n return queryComponentAll<U>(query, { from: this.$el });\n }\n\n /**\n * Get the closest ancestor component instance matching the given query.\n * Sugar for `closestComponent(query, { from: this.$el })`.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#closest-query\n */\n $closest<U extends Base = Base>(query: string): U | undefined {\n return closestComponent<U>(query, { from: this.$el });\n }\n\n __events: EventsManager;\n\n /**\n * Small helper to log stuff.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#log-content\n */\n get $log(): (...args: unknown[]) => void {\n return this.$options.log ? window.console.log.bind(window, `[${this.$id}]`) : noop;\n }\n\n /**\n * Small helper to make warning easier.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#warn-content\n */\n get $warn(): (...args: unknown[]) => void {\n return this.$options.log ? window.console.warn.bind(window, `[${this.$id}]`) : noop;\n }\n\n /**\n * Small helper to debug information.\n * @internal\n */\n get __debug(): (...args: unknown[]) => void {\n return isDev && this.$options.debug\n ? window.console.log.bind(window, `[debug] [${this.$id}]`)\n : noop;\n }\n\n /**\n * Get manager constructors.\n * @internal\n */\n get __managers(): Managers {\n return {\n ChildrenManager,\n EventsManager,\n OptionsManager,\n RefsManager,\n ServicesManager,\n };\n }\n\n /**\n * Call an instance method and emit corresponding events.\n * @internal\n */\n __callMethod(method: string, ...args: unknown[]): unknown {\n if (isDev) {\n this.__debug('callMethod', method, ...args);\n }\n\n this.$emit(method, ...args);\n\n // We always emit an event, but we do not call the method if it does not exist\n if (!isFunction(this[method])) {\n return null;\n }\n\n if (isDev) {\n this.__debug(method, this, ...args);\n }\n\n return this[method].call(this, ...args);\n }\n\n /**\n * Test if the given event has been bound to the instance.\n *\n * @param {string} event The event's name.\n * @return {boolean} Wether the given event has been bound or not.\n * @internal\n */\n __hasEvent(event: string): boolean {\n const eventHandlers = this.__eventHandlers.get(event);\n return eventHandlers && eventHandlers.size > 0;\n }\n\n /**\n * Class constructor where all the magic takes place.\n *\n * @param {HTMLElement} element The component's root element dd.\n * @link https://js-toolkit.studiometa.dev/api/instantiation.html\n */\n constructor(element: HTMLElement) {\n if (!element) {\n if (isDev) {\n throw new Error('The root element must be defined.');\n }\n return;\n }\n\n const { $config } = this;\n\n if ($config.name === 'Base') {\n if (isDev) {\n throw new Error('The `config.name` property is required.');\n }\n return;\n }\n\n // Add current component to the registry\n addToRegistry($config.name, this.constructor);\n\n this.$id = `${$config.name}-${id}`;\n id += 1;\n\n this.$el = element;\n this.$el.__base__ ??= new Map();\n this.$el.__base__.set($config.name, this);\n\n for (const service of ['Options', 'Services', 'Events', 'Refs', 'Children']) {\n this[`__${service.toLowerCase()}`] = new this.__managers[`${service}Manager`](this);\n }\n\n this.$on('before-mounted', () => {\n addInstance(this);\n });\n this.$on('after-destroyed', () => {\n deleteInstance(this);\n });\n\n if (isDev) {\n this.__debug('constructor', this);\n }\n }\n\n /**\n * Trigger the `mounted` callback.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#mount\n */\n async $mount(): Promise<this> {\n if (this.$isMounted || this.__isMounting) {\n return this;\n }\n\n this.__isMounting = true;\n this.$emit('before-mounted');\n\n if (isDev) {\n this.__debug('$mount');\n }\n\n await Promise.all([\n addToQueue(() => this.__children.registerAll()),\n addToQueue(() => this.__refs.registerAll()),\n addToQueue(() => this.__events.bindRootElement()),\n addToQueue(() => this.__services.enableAll()),\n addToQueue(() => this.__children.mountAll()),\n ]);\n\n await addToQueue(() => {\n this.$isMounted = true;\n this.__callMethod('mounted');\n });\n\n this.__isMounting = false;\n this.$emit('after-mounted');\n\n return this;\n }\n\n /**\n * Update the instance children.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#update\n */\n async $update(): Promise<this> {\n if (isDev) {\n this.__debug('$update');\n }\n\n await Promise.all([\n // Undo\n addToQueue(() => this.__refs.unregisterAll()),\n addToQueue(() => this.__services.disableAll()),\n // Redo\n addToQueue(() => this.__children.registerAll()),\n addToQueue(() => this.__refs.registerAll()),\n addToQueue(() => this.__services.enableAll()),\n // Update\n addToQueue(() => this.__children.updateAll()),\n ]);\n\n await addToQueue(() => this.__callMethod('updated'));\n\n return this;\n }\n\n /**\n * Trigger the `destroyed` callback.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#destroy\n */\n async $destroy(): Promise<this> {\n if (!this.$isMounted) {\n return this;\n }\n\n if (isDev) {\n this.__debug('$destroy');\n }\n\n this.$emit('before-destroyed');\n this.$isMounted = false;\n\n await Promise.all([\n addToQueue(() => this.__events.unbindRootElement()),\n addToQueue(() => this.__refs.unregisterAll()),\n addToQueue(() => this.__services.disableAll()),\n addToQueue(() => this.__children.destroyAll()),\n ]);\n\n await addToQueue(() => this.__callMethod('destroyed'));\n\n this.$emit('after-destroyed');\n\n return this;\n }\n\n /**\n * Terminate a child instance when it is not needed anymore.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#terminate\n */\n async $terminate(): Promise<void> {\n if (isDev) {\n this.__debug('$terminate');\n }\n\n await Promise.all([\n // First, destroy the component.\n addToQueue(() => this.$destroy()),\n // Execute the `terminated` hook if it exists\n addToQueue(() => this.__callMethod('terminated')),\n // Delete instance\n addToQueue(() => this.$el.__base__.set(this.$config.name, 'terminated')),\n ]);\n }\n\n /**\n * Add an emitted event.\n *\n * @param {string} event The event name.\n * @return {void}\n * @internal\n */\n __addEmits(event: string): void {\n const ctor = this.constructor;\n if (isArray(ctor.config.emits)) {\n ctor.config.emits.push(event);\n } else {\n ctor.config.emits = [event];\n }\n }\n\n /**\n * Remove an emitted event.\n *\n * @param {string} event The event name.\n * @return {void}\n * @internal\n */\n __removeEmits(event: string): void {\n const ctor = this.constructor;\n const index = ctor.config.emits.indexOf(event);\n ctor.config.emits.splice(index, 1);\n }\n\n /**\n * Bind a listener function to an event.\n *\n * @param {string} event\n * Name of the event.\n * @param {EventListenerOrEventListenerObject} listener\n * Function to be called.\n * @param {boolean|AddEventListenerOptions} [options]\n * Options for the `removeEventListener` method.\n * @return {() => void}\n * A function to unbind the listener.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#on-event-callback-options\n */\n $on(\n event: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): () => void {\n if (isDev) {\n this.__debug('$on', event, listener, options);\n }\n\n let set = this.__eventHandlers.get(event);\n\n if (!set) {\n set = new Set();\n this.__eventHandlers.set(event, set);\n }\n\n set.add(listener);\n\n const target = getEventTarget(this, event, this.__config);\n target?.addEventListener(event, listener, options);\n\n if (isDev) {\n if (!target) {\n console.warn(\n `[${this.$id}]`,\n `The \"${event}\" event is missing from the configuration and is not a native`,\n `event for the root element of type \\`${this.$el.constructor.name}\\`.`,\n );\n }\n }\n\n return () => {\n this.$off(event, listener, options);\n };\n }\n\n /**\n * Unbind a listener function from an event.\n *\n * @param {string} event\n * Name of the event.\n * @param {EventListenerOrEventListenerObject} listener\n * Function to be removed.\n * @param {boolean|EventListenerOptions} [options]\n * Options for the `removeEventListener` method.\n * @return {void}\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#off-event-callback-options\n */\n $off(\n event: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ) {\n if (isDev) {\n this.__debug('$off', event, listener);\n }\n\n this.__eventHandlers.get(event)?.delete(listener);\n\n const target = getEventTarget(this, event, this.__config);\n target?.removeEventListener(event, listener, options);\n }\n\n /**\n * Emits an event.\n *\n * @param {string} event Name of the event.\n * @param {any[]} args The arguments to apply to the functions bound to this event.\n * @return {void}\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#emit-event-args\n */\n $emit(event: string | Event, ...args: unknown[]) {\n if (isDev) {\n this.__debug('$emit', event, args);\n }\n\n this.$el.dispatchEvent(\n event instanceof Event ? event : new CustomEvent(event, { detail: args }),\n );\n }\n\n /**\n * Register and mount all instances of the component.\n * @link https://js-toolkit.studiometa.dev/api/static-methods.html#register-nameorselector-string\n */\n static $register<T extends BaseProps = BaseProps, U extends typeof Base<T> = typeof Base<T>>(\n this: U,\n nameOrSelector?: string,\n ): Promise<InstanceType<U>>[] {\n addToRegistry(nameOrSelector ?? this.config.name, this);\n\n return getComponentElements(nameOrSelector ?? this.config.name).map(\n async (el) =>\n getInstanceFromElement(el, this) ?? (new this(el).$mount() as Promise<InstanceType<U>>),\n );\n }\n}\n"],
|
|
5
|
-
"mappings": "AACA;
|
|
4
|
+
"sourcesContent": ["/* eslint-disable no-use-before-define */\nimport { closestComponent, queryComponentAll } from '../helpers/queryComponent.js';\nimport { isArray, isDev, isFunction } from '../utils/is.js';\nimport { noop } from '../utils/noop.js';\nimport { ChildrenManager } from './managers/ChildrenManager.js';\nimport { EventsManager } from './managers/EventsManager.js';\nimport { OptionsManager } from './managers/OptionsManager.js';\nimport { RefsManager } from './managers/RefsManager.js';\nimport { ServicesManager } from './managers/ServicesManager.js';\nimport {\n addInstance,\n addToQueue,\n addToRegistry,\n deleteInstance,\n getComponentElements,\n getEventTarget,\n hasInstance,\n} from './utils.js';\nimport { getInstanceFromElement } from '../helpers/getInstanceFromElement.js';\n\nlet id = 0;\n\nexport type BaseEl = HTMLElement & { __base__?: Map<string, Base | 'terminated'> };\nexport type BaseConstructor<T extends Base = Base> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): T;\n prototype: Base;\n} & Pick<typeof Base, keyof typeof Base>;\nexport type BaseAsyncConstructor<T extends Base = Base> = (\n instance: Base,\n) => Promise<BaseConstructor<T> | { default: BaseConstructor<T> }>;\nexport type BaseOptions = { [name: string]: unknown };\nexport type BaseRefs = { [name: string]: HTMLElement | HTMLElement[] };\nexport type BaseChildren = { [nameOrSelector: string]: Base[] | Promise<Base>[] };\nexport type BaseConfigComponents = {\n [nameOrSelector: string]: BaseConstructor | BaseAsyncConstructor;\n};\n\nexport type BaseConfig = {\n name: string;\n debug?: boolean;\n log?: boolean;\n refs?: string[];\n emits?: string[];\n components?: BaseConfigComponents;\n options?: import('./managers/OptionsManager').OptionsSchema;\n};\n\nexport type BaseProps = {\n $el?: HTMLElement;\n $options?: BaseOptions;\n $refs?: BaseRefs;\n $children?: BaseChildren;\n $parent?: Base;\n};\n\nexport type Managers = {\n ChildrenManager: typeof ChildrenManager;\n EventsManager: typeof EventsManager;\n OptionsManager: typeof OptionsManager;\n RefsManager: typeof RefsManager;\n ServicesManager: typeof ServicesManager;\n};\n\n/**\n * Base class.\n *\n * @link https://js-toolkit.studiometa.dev/api/\n */\nexport class Base<T extends BaseProps = BaseProps> {\n /**\n * Declare the `this.constructor` type\n * @link https://github.com/microsoft/TypeScript/issues/3841#issuecomment-2381594311\n */\n declare ['constructor']: BaseConstructor;\n\n /**\n * This is a Base instance.\n */\n static readonly $isBase = true as const;\n\n /**\n * Config.\n * @link https://js-toolkit.studiometa.dev/api/configuration.html\n */\n static config: BaseConfig = {\n name: 'Base',\n emits: [\n // hook events\n 'before-mounted',\n 'mounted',\n 'after-mounted',\n 'updated',\n 'before-destroyed',\n 'destroyed',\n 'after-destroyed',\n 'terminated',\n // default services' events\n 'ticked',\n 'scrolled',\n 'resized',\n 'moved',\n 'loaded',\n 'keyed',\n ],\n };\n\n /**\n * The instance id.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#id\n */\n $id: string;\n\n /**\n * The root element.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#el\n */\n $el: T['$el'] & BaseEl;\n\n /**\n * The state of the component.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#isMounted\n */\n $isMounted = false;\n\n /**\n * Is the component currently mounting itself and its children?\n * @private\n */\n __isMounting = false;\n\n /**\n * Store the event handlers.\n * @private\n */\n __eventHandlers: Map<string, Set<EventListenerOrEventListenerObject>> = new Map();\n\n /**\n * Get the root instance of the app.\n * @deprecated Use `$closest(name)` instead. Will be removed in v4.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#root\n */\n get $root(): Base {\n if (isDev) {\n console.warn(\n `[${this.$id}] $root is deprecated and will be removed in v4. Use $closest(name) instead.`,\n );\n }\n\n if (!this.__parent) {\n return this;\n }\n\n let parent = this.__parent;\n let root = this.__parent;\n\n while (parent) {\n if (!parent.__parent) {\n root = parent;\n }\n\n parent = parent.__parent;\n }\n\n return root;\n }\n\n /**\n * The parent instance if the current instance is registered as a child component in a parent component.\n * @deprecated Use `$closest(name)` instead. Will be removed in v4.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#parent\n */\n get $parent(): (T['$parent'] & Base) | null {\n if (isDev) {\n console.warn(\n `[${this.$id}] $parent is deprecated and will be removed in v4. Use $closest(name) instead.`,\n );\n }\n\n return this.__parent;\n }\n\n /**\n * Internal parent resolution without deprecation warning.\n * @internal\n */\n get __parent(): (T['$parent'] & Base) | null {\n // Walk up the DOM ancestors and resolve the closest mounted instance whose\n // config declares this component as a child, using each element's `__base__`\n // map for an O(1)-per-ancestor lookup. This is O(tree depth) instead of the\n // O(N_instances) global scan (plus `Set` copy) it replaces.\n let el = this.$el.parentElement;\n\n while (el) {\n const baseMap = (el as BaseEl).__base__;\n\n if (baseMap) {\n for (const instance of baseMap.values()) {\n if (instance === 'terminated' || !hasInstance(instance)) continue;\n\n const { components } = instance.$config;\n if (components) {\n for (const component of Object.values(components)) {\n // Sync child: the declared value is the resolved constructor.\n if (component === this.constructor) {\n return instance as T['$parent'] & Base;\n }\n\n // Async/lazy child: the declared value is a loader function, so it\n // never equals `this.constructor`. Its resolved constructor lives\n // in the ancestor's own ChildrenManager, keyed by that same loader\n // function \u2014 read it back to match by resolved identity.\n if (isFunction(component) && !('$isBase' in component)) {\n const resolved = instance.__children.__asyncComponentPromises.get(\n component as BaseAsyncConstructor,\n );\n if (resolved?.status === 'resolved' && resolved.ctor === this.constructor) {\n return instance as T['$parent'] & Base;\n }\n }\n }\n }\n }\n }\n\n el = el.parentElement;\n }\n\n return null;\n }\n\n /**\n * Merge configuration with the parents' configurations.\n * @private\n */\n get __config(): BaseConfig {\n let proto = Object.getPrototypeOf(this);\n let { config } = proto.constructor;\n\n while (proto.constructor.config && proto.constructor.$isBase) {\n config = { ...proto.constructor.config, ...config };\n\n if (proto.constructor.config.options) {\n config.options = { ...proto.constructor.config.options, ...config.options };\n }\n\n if (proto.constructor.config.emits && config.emits) {\n config.emits = [...proto.constructor.config.emits, ...config.emits];\n }\n\n proto = Object.getPrototypeOf(proto);\n }\n\n config.options = config.options ?? {};\n config.refs = config.refs ?? [];\n config.components = config.components ?? {};\n\n return config;\n }\n\n /**\n * The normalized config of the component.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#config\n */\n get $config() {\n return this.__config;\n }\n\n __services: ServicesManager;\n\n /**\n * Services.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#services\n */\n get $services(): ServicesManager {\n return this.__services;\n }\n\n __refs: RefsManager<T['$refs'] & BaseRefs>;\n\n /**\n * Refs.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#refs\n */\n get $refs(): T['$refs'] & BaseRefs {\n return this.__refs.props;\n }\n\n __options: OptionsManager<T['$options'] & BaseOptions>;\n\n /**\n * Options.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#options\n */\n get $options(): T['$options'] & BaseOptions {\n return this.__options.props;\n }\n\n __children: ChildrenManager<T['$children'] & BaseChildren>;\n\n /**\n * Children.\n * @deprecated Use `$query(name)` instead. Will be removed in v4.\n * @link https://js-toolkit.studiometa.dev/api/instance-properties.html#children\n */\n get $children(): T['$children'] & BaseChildren {\n if (isDev) {\n console.warn(\n `[${this.$id}] $children is deprecated and will be removed in v4. Use $query(name) instead.`,\n );\n }\n\n return this.__children.props;\n }\n\n /**\n * Get all descendant component instances matching the given query.\n * Sugar for `queryComponentAll(query, { from: this.$el })`.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#query-query\n */\n $query<U extends Base = Base>(query: string): U[] {\n return queryComponentAll<U>(query, { from: this.$el });\n }\n\n /**\n * Get the closest ancestor component instance matching the given query.\n * Sugar for `closestComponent(query, { from: this.$el })`.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#closest-query\n */\n $closest<U extends Base = Base>(query: string): U | undefined {\n return closestComponent<U>(query, { from: this.$el });\n }\n\n __events: EventsManager;\n\n /**\n * Small helper to log stuff.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#log-content\n */\n get $log(): (...args: unknown[]) => void {\n return this.$options.log ? window.console.log.bind(window, `[${this.$id}]`) : noop;\n }\n\n /**\n * Small helper to make warning easier.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#warn-content\n */\n get $warn(): (...args: unknown[]) => void {\n return this.$options.log ? window.console.warn.bind(window, `[${this.$id}]`) : noop;\n }\n\n /**\n * Small helper to debug information.\n * @internal\n */\n get __debug(): (...args: unknown[]) => void {\n return isDev && this.$options.debug\n ? window.console.log.bind(window, `[debug] [${this.$id}]`)\n : noop;\n }\n\n /**\n * Get manager constructors.\n * @internal\n */\n get __managers(): Managers {\n return {\n ChildrenManager,\n EventsManager,\n OptionsManager,\n RefsManager,\n ServicesManager,\n };\n }\n\n /**\n * Call an instance method and emit corresponding events.\n * @internal\n */\n __callMethod(method: string, ...args: unknown[]): unknown {\n if (isDev) {\n this.__debug('callMethod', method, ...args);\n }\n\n this.$emit(method, ...args);\n\n // We always emit an event, but we do not call the method if it does not exist\n if (!isFunction(this[method])) {\n return null;\n }\n\n if (isDev) {\n this.__debug(method, this, ...args);\n }\n\n return this[method].call(this, ...args);\n }\n\n /**\n * Test if the given event has been bound to the instance.\n *\n * @param {string} event The event's name.\n * @return {boolean} Wether the given event has been bound or not.\n * @internal\n */\n __hasEvent(event: string): boolean {\n const eventHandlers = this.__eventHandlers.get(event);\n return eventHandlers && eventHandlers.size > 0;\n }\n\n /**\n * Class constructor where all the magic takes place.\n *\n * @param {HTMLElement} element The component's root element dd.\n * @link https://js-toolkit.studiometa.dev/api/instantiation.html\n */\n constructor(element: HTMLElement) {\n if (!element) {\n if (isDev) {\n throw new Error('The root element must be defined.');\n }\n return;\n }\n\n const { $config } = this;\n\n if ($config.name === 'Base') {\n if (isDev) {\n throw new Error('The `config.name` property is required.');\n }\n return;\n }\n\n // Add current component to the registry\n addToRegistry($config.name, this.constructor);\n\n this.$id = `${$config.name}-${id}`;\n id += 1;\n\n this.$el = element;\n this.$el.__base__ ??= new Map();\n this.$el.__base__.set($config.name, this);\n\n for (const service of ['Options', 'Services', 'Events', 'Refs', 'Children']) {\n this[`__${service.toLowerCase()}`] = new this.__managers[`${service}Manager`](this);\n }\n\n this.$on('before-mounted', () => {\n addInstance(this);\n });\n this.$on('after-destroyed', () => {\n deleteInstance(this);\n });\n\n if (isDev) {\n this.__debug('constructor', this);\n }\n }\n\n /**\n * Trigger the `mounted` callback.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#mount\n */\n async $mount(): Promise<this> {\n if (this.$isMounted || this.__isMounting) {\n return this;\n }\n\n this.__isMounting = true;\n this.$emit('before-mounted');\n\n if (isDev) {\n this.__debug('$mount');\n }\n\n await Promise.all([\n addToQueue(() => this.__children.registerAll()),\n addToQueue(() => this.__refs.registerAll()),\n addToQueue(() => this.__events.bindRootElement()),\n addToQueue(() => this.__services.enableAll()),\n addToQueue(() => this.__children.mountAll()),\n ]);\n\n await addToQueue(() => {\n this.$isMounted = true;\n this.__callMethod('mounted');\n });\n\n this.__isMounting = false;\n this.$emit('after-mounted');\n\n return this;\n }\n\n /**\n * Update the instance children.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#update\n */\n async $update(): Promise<this> {\n if (isDev) {\n this.__debug('$update');\n }\n\n await Promise.all([\n // Undo\n addToQueue(() => this.__refs.unregisterAll()),\n addToQueue(() => this.__services.disableAll()),\n // Redo\n addToQueue(() => this.__children.registerAll()),\n addToQueue(() => this.__refs.registerAll()),\n addToQueue(() => this.__services.enableAll()),\n // Update\n addToQueue(() => this.__children.updateAll()),\n ]);\n\n await addToQueue(() => this.__callMethod('updated'));\n\n return this;\n }\n\n /**\n * Trigger the `destroyed` callback.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#destroy\n */\n async $destroy(): Promise<this> {\n if (!this.$isMounted) {\n return this;\n }\n\n if (isDev) {\n this.__debug('$destroy');\n }\n\n this.$emit('before-destroyed');\n this.$isMounted = false;\n\n await Promise.all([\n addToQueue(() => this.__events.unbindRootElement()),\n addToQueue(() => this.__refs.unregisterAll()),\n addToQueue(() => this.__services.disableAll()),\n addToQueue(() => this.__children.destroyAll()),\n ]);\n\n await addToQueue(() => this.__callMethod('destroyed'));\n\n this.$emit('after-destroyed');\n\n return this;\n }\n\n /**\n * Terminate a child instance when it is not needed anymore.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#terminate\n */\n async $terminate(): Promise<void> {\n if (isDev) {\n this.__debug('$terminate');\n }\n\n await Promise.all([\n // First, destroy the component.\n addToQueue(() => this.$destroy()),\n // Execute the `terminated` hook if it exists\n addToQueue(() => this.__callMethod('terminated')),\n // Delete instance\n addToQueue(() => this.$el.__base__.set(this.$config.name, 'terminated')),\n ]);\n }\n\n /**\n * Add an emitted event.\n *\n * @param {string} event The event name.\n * @return {void}\n * @internal\n */\n __addEmits(event: string): void {\n const ctor = this.constructor;\n if (isArray(ctor.config.emits)) {\n ctor.config.emits.push(event);\n } else {\n ctor.config.emits = [event];\n }\n }\n\n /**\n * Remove an emitted event.\n *\n * @param {string} event The event name.\n * @return {void}\n * @internal\n */\n __removeEmits(event: string): void {\n const ctor = this.constructor;\n const index = ctor.config.emits.indexOf(event);\n ctor.config.emits.splice(index, 1);\n }\n\n /**\n * Bind a listener function to an event.\n *\n * @param {string} event\n * Name of the event.\n * @param {EventListenerOrEventListenerObject} listener\n * Function to be called.\n * @param {boolean|AddEventListenerOptions} [options]\n * Options for the `removeEventListener` method.\n * @return {() => void}\n * A function to unbind the listener.\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#on-event-callback-options\n */\n $on(\n event: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): () => void {\n if (isDev) {\n this.__debug('$on', event, listener, options);\n }\n\n let set = this.__eventHandlers.get(event);\n\n if (!set) {\n set = new Set();\n this.__eventHandlers.set(event, set);\n }\n\n set.add(listener);\n\n const target = getEventTarget(this, event, this.__config);\n target?.addEventListener(event, listener, options);\n\n if (isDev) {\n if (!target) {\n console.warn(\n `[${this.$id}]`,\n `The \"${event}\" event is missing from the configuration and is not a native`,\n `event for the root element of type \\`${this.$el.constructor.name}\\`.`,\n );\n }\n }\n\n return () => {\n this.$off(event, listener, options);\n };\n }\n\n /**\n * Unbind a listener function from an event.\n *\n * @param {string} event\n * Name of the event.\n * @param {EventListenerOrEventListenerObject} listener\n * Function to be removed.\n * @param {boolean|EventListenerOptions} [options]\n * Options for the `removeEventListener` method.\n * @return {void}\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#off-event-callback-options\n */\n $off(\n event: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ) {\n if (isDev) {\n this.__debug('$off', event, listener);\n }\n\n this.__eventHandlers.get(event)?.delete(listener);\n\n const target = getEventTarget(this, event, this.__config);\n target?.removeEventListener(event, listener, options);\n }\n\n /**\n * Emits an event.\n *\n * @param {string} event Name of the event.\n * @param {any[]} args The arguments to apply to the functions bound to this event.\n * @return {void}\n * @link https://js-toolkit.studiometa.dev/api/instance-methods.html#emit-event-args\n */\n $emit(event: string | Event, ...args: unknown[]) {\n if (isDev) {\n this.__debug('$emit', event, args);\n }\n\n this.$el.dispatchEvent(\n event instanceof Event ? event : new CustomEvent(event, { detail: args }),\n );\n }\n\n /**\n * Register and mount all instances of the component.\n * @link https://js-toolkit.studiometa.dev/api/static-methods.html#register-nameorselector-string\n */\n static $register<T extends BaseProps = BaseProps, U extends typeof Base<T> = typeof Base<T>>(\n this: U,\n nameOrSelector?: string,\n ): Promise<InstanceType<U>>[] {\n addToRegistry(nameOrSelector ?? this.config.name, this);\n\n return getComponentElements(nameOrSelector ?? this.config.name).map(\n async (el) =>\n getInstanceFromElement(el, this) ?? (new this(el).$mount() as Promise<InstanceType<U>>),\n );\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../packages/js-toolkit/Base/managers/AbstractManager.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Base } from '../
|
|
4
|
+
"sourcesContent": ["import type { Base } from '../Base.js';\n\n/**\n * AbstractManager class.\n */\nexport class AbstractManager<T extends any = any> {\n /**\n * Base instance.\n */\n __base: Base;\n\n /**\n * Get the base instance root element.\n */\n get __element() {\n return this.__base.$el;\n }\n\n /**\n * Get the base instance config.\n */\n get __config() {\n return this.__base.__config;\n }\n\n /**\n * Get the events manager.\n */\n get __eventsManager() {\n return this.__base.__events;\n }\n\n __props: T = {} as any;\n\n get props() {\n return this.__props;\n }\n\n /**\n * Class constructor.\n */\n constructor(base: Base) {\n this.__base = base;\n }\n}\n"],
|
|
5
5
|
"mappings": "AAKO,MAAM,gBAAqC;AAAA;AAAA;AAAA;AAAA,EAIhD;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,YAAY;AACd,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,WAAW;AACb,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,kBAAkB;AACpB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,UAAa,CAAC;AAAA,EAEd,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,MAAY;AACtB,SAAK,SAAS;AAAA,EAChB;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { addToQueue, getComponentElements } from "../utils.js";
|
|
1
2
|
import { AbstractManager } from "./AbstractManager.js";
|
|
2
|
-
import { getComponentElements, addToQueue } from "../utils.js";
|
|
3
3
|
class ChildrenManager extends AbstractManager {
|
|
4
4
|
/**
|
|
5
5
|
* Store async component promises to avoid calling them multiple times and
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../packages/js-toolkit/Base/managers/ChildrenManager.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Base,
|
|
5
|
-
"mappings": "AACA,SAAS,
|
|
4
|
+
"sourcesContent": ["import type { Base, BaseAsyncConstructor, BaseConstructor, BaseEl } from '../Base.js';\nimport { addToQueue, getComponentElements } from '../utils.js';\nimport { AbstractManager } from './AbstractManager.js';\n\n/**\n * Children manager.\n */\nexport class ChildrenManager<T> extends AbstractManager<T> {\n /**\n * Store async component promises to avoid calling them multiple times and\n * waiting for them when they are already resolved.\n *\n * Also read by `Base.__parent` (backing `$parent`/`$root`) to resolve an\n * async/lazy-declared child to its parent: `config.components` holds the\n * loader function, so `__parent` looks up its resolved `ctor` here to match by\n * identity. Keep the `{ status, ctor }` shape in sync with that reader.\n */\n __asyncComponentPromises: WeakMap<\n BaseAsyncConstructor,\n {\n promise: ReturnType<BaseAsyncConstructor>;\n status: 'pending' | 'resolved';\n ctor?: BaseConstructor;\n }\n > = new WeakMap();\n\n get registeredNames(): string[] {\n return Object.keys(this.props);\n }\n\n /**\n * Register instances of all children components.\n */\n async registerAll() {\n for (const [name, component] of Object.entries(this.__config.components)) {\n this.__register(name, component);\n }\n }\n\n /**\n * Mount all child component instances.\n */\n async mountAll() {\n await this.__triggerHookForAll('$mount');\n }\n\n /**\n * Update all child component instances.\n */\n async updateAll() {\n await this.__triggerHookForAll('$update');\n }\n\n /**\n * Destroy all child component instances.\n */\n async destroyAll() {\n await this.__triggerHookForAll('$destroy');\n }\n\n /**\n * Execute the given hook for the given instance.\n *\n * @param {'$mount'|'$update'|'$destroy'} hook The hook to trigger.\n * @param {Base} instance The target instance.\n * @param {string} name The name of the component.\n * @private\n */\n async __triggerHook(hook: '$mount' | '$update' | '$destroy', instance: Base, name: string) {\n if (hook === '$update' && !instance.$isMounted) {\n // eslint-disable-next-line no-param-reassign\n hook = '$mount';\n }\n\n if (hook === '$update' || hook === '$destroy') {\n this.__eventsManager.unbindChild(name, instance);\n }\n\n if (hook === '$update' || hook === '$mount') {\n this.__eventsManager.bindChild(name, instance);\n }\n\n await instance[hook]();\n }\n\n /**\n * Register instance of a child component.\n *\n * @param {string} name\n * The name of the child component.\n * @param {BaseConstructor|BaseAsyncConstructor} component\n * A Base class or a Promise for async components.\n * @private\n */\n __register(name: string, component: BaseConstructor | BaseAsyncConstructor) {\n Object.defineProperty(this.props, name, {\n enumerable: true,\n configurable: true,\n get: () => this.__getValue(name, component),\n });\n }\n\n /**\n * Get children.\n * @private\n */\n __getValue(name: string, component: BaseConstructor | BaseAsyncConstructor) {\n const elements = getComponentElements(name, this.__element);\n\n if (elements.length === 0) {\n return [];\n }\n\n const children = [];\n for (const element of elements) {\n const child = this.__getChild(element, component);\n if (child !== 'terminated') {\n children.push(child);\n }\n }\n\n return children;\n }\n\n /**\n * Get a child component's instance.\n *\n * @param {BaseEl} el\n * The root element of the child component.\n * @param {BaseConstructor|BaseAsyncConstructor} ComponentClass\n * A Base class or a Promise for async components.\n * @return {Base|Promise<Base | 'terminated'>|'terminated'}\n * A Base instance or a Promise resolving to a Base instance.\n * @private\n */\n __getChild(\n el: BaseEl,\n ComponentClass: BaseConstructor | BaseAsyncConstructor,\n ): Base | Promise<Base | 'terminated'> | 'terminated' {\n const asyncComponentPromise = this.__asyncComponentPromises.get(\n ComponentClass as BaseAsyncConstructor,\n );\n\n // Test if we have a constructor and not a promise or if the promise has been resolved\n if (\n '$isBase' in ComponentClass ||\n (asyncComponentPromise && asyncComponentPromise.status === 'resolved')\n ) {\n let ctor = ComponentClass as BaseConstructor;\n\n // Get resolved constructor from weakmap.\n // Only test for existence as the status was checked before.\n if (asyncComponentPromise) {\n ctor = asyncComponentPromise.ctor;\n }\n\n // Return existing instance if it exists\n if (el.__base__ && el.__base__.has(ctor.config.name)) {\n return el.__base__.get(ctor.config.name);\n }\n\n // Return a new instance if the component class is a child of the Base class\n // eslint-disable-next-line new-cap\n const child = new ctor(el);\n return child;\n }\n\n const promise = asyncComponentPromise\n ? asyncComponentPromise.promise\n : ComponentClass(this.__base);\n\n if (!asyncComponentPromise) {\n this.__asyncComponentPromises.set(ComponentClass, {\n promise,\n status: 'pending',\n ctor: undefined,\n });\n }\n\n // Resolve async components\n return promise.then((module) => {\n // @ts-ignore\n const ctor = module.default ?? module;\n\n this.__asyncComponentPromises.set(ComponentClass, {\n promise,\n status: 'resolved',\n ctor,\n });\n\n return this.__getChild(el, ctor);\n });\n }\n\n /**\n * Execute the given hook for all children instances.\n *\n * @param {'$mount'|'$update'|'$destroy'} hook The hook to execute.\n * @private\n */\n async __triggerHookForAll(hook: '$mount' | '$update' | '$destroy') {\n return addToQueue(() => {\n const promises = [];\n for (const name of this.registeredNames) {\n for (const instance of this.props[name]) {\n if (instance instanceof Promise) {\n instance.then((resolvedInstance) =>\n addToQueue(() => this.__triggerHook(hook, resolvedInstance, name)),\n );\n } else {\n promises.push(addToQueue(() => this.__triggerHook(hook, instance, name)));\n }\n }\n }\n return Promise.all(promises);\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { isArray } from "../../utils/is.js";
|
|
2
|
+
import { dashCase, pascalCase } from "../../utils/string/changeCase.js";
|
|
3
|
+
import { eventIsDefinedInConfig, eventIsNative, getEventTarget } from "../utils.js";
|
|
1
4
|
import { getAllProperties } from "../../utils/object/getAllProperties.js";
|
|
2
|
-
import { dashCase, isArray, pascalCase } from "../../utils/index.js";
|
|
3
|
-
import { getEventTarget, eventIsNative, eventIsDefinedInConfig } from "../utils.js";
|
|
4
5
|
import { AbstractManager } from "./AbstractManager.js";
|
|
5
6
|
import { normalizeRefName } from "./RefsManager.js";
|
|
6
7
|
import { features } from "../features.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../packages/js-toolkit/Base/managers/EventsManager.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Base, BaseProps } from '../index.js';\nimport { getAllProperties } from '../../utils/object/getAllProperties.js';\nimport { dashCase, isArray, pascalCase } from '../../utils/index.js';\nimport { getEventTarget, eventIsNative, eventIsDefinedInConfig } from '../utils.js';\nimport { AbstractManager } from './AbstractManager.js';\nimport { normalizeRefName } from './RefsManager.js';\nimport { features } from '../features.js';\n\nconst regexes = new Map();\n\n/**\n * Get a regex with a cache;\n *\n * @param {string} regex\n * @return {RegExp}\n */\nfunction getRegex(regex: string): RegExp {\n if (!regexes.has(regex)) {\n regexes.set(regex, new RegExp(regex));\n }\n\n return regexes.get(regex);\n}\n\n/**\n * Get the event name from the given method and its tied ref or children name.\n *\n * @param {string} method\n * @param {string} name\n * @return {string}\n * @private\n */\nfunction getEventNameByMethod(method: string, name = ''): string {\n const regex = getRegex(`^on${pascalCase(name)}([A-Z].*)$`);\n const [, event] = method.match(regex);\n return dashCase(event);\n}\n\n/**\n * Get the base instance methods matching the `onSomething` pattern.\n *\n * @param {EventsManager} that\n * @param {string} [name]\n * @return {string[]}\n * @private\n */\n// eslint-disable-next-line no-use-before-define\nfunction getEventMethodsByName(that: EventsManager, name = ''): string[] {\n const regex = getRegex(`^on${pascalCase(name)}[A-Z].*$`);\n const key = regex.toString();\n\n let methods = that.__methodsCache.get(key);\n\n if (!methods) {\n methods = Array.from(\n getAllProperties(that.__base, [], (method) => regex.test(method)).reduce(\n (set, [method]) => set.add(method),\n new Set(),\n ),\n ) as string[];\n that.__methodsCache.set(key, methods);\n }\n\n return methods;\n}\n\n/**\n * Manage a ref event methods.\n *\n * @param {EventsManager} that\n * @param {string} name\n * The name of the ref.\n * @param {HTMLElement[]} elements\n * The elements of the ref.\n * @param {'add'|'remove'} [mode]\n * The action to perform: add or remove the event listeners.\n * @return {void}\n * @private\n */\nfunction manageRef(\n // eslint-disable-next-line no-use-before-define\n that: EventsManager,\n name: string,\n elements: HTMLElement[],\n mode: 'add' | 'remove' = 'add',\n) {\n const action = `${mode}EventListener`;\n const methods = getEventMethodsByName(that, name);\n for (const method of methods) {\n const event = getEventNameByMethod(method, name);\n for (const element of elements) {\n element?.[action](event, that.__refsHandler);\n }\n }\n}\n/**\n * Manage event methods to the given child instance.\n *\n * @param {EventsManager} that\n * @param {string} name\n * The name of the ref.\n * @param {Base} instance\n * A base instance.\n * @param {'add'|'remove'} [mode]\n * The action to perform: add or remove the event listeners.\n * @return {void}\n * @private\n */\nfunction manageChild(\n // eslint-disable-next-line no-use-before-define\n that: EventsManager,\n name: string,\n instance: Base,\n mode: 'add' | 'remove' = 'add',\n) {\n const action = mode === 'add' ? '$on' : '$off';\n const methods = getEventMethodsByName(that, name);\n const config = instance.__config;\n for (const method of methods) {\n const event = getEventNameByMethod(method, name);\n if (getEventTarget(instance, event, config)) {\n instance[action](event, that.__childrenHandler);\n }\n }\n}\n\nconst isDocumentRegex = /^onDocument[A-Z][a-z]+/;\nconst isWindowRegex = /^onWindow[A-Z][a-z]+/;\nconst methodIsDocument = (method) => isDocumentRegex.test(method);\nconst methodIsWindow = (method) => isWindowRegex.test(method);\nconst methodIsGlobal = (method) => methodIsWindow(method) || methodIsDocument(method);\nconst getGlobalEventTarget = (method) => (methodIsDocument(method) ? document : window);\n\n/**\n * Manage event methods on the root element.\n *\n * @param {EventsManager} that\n * @param {'add'|'remove'} [mode]\n * The action to perform: add or remove the event listeners, defaults to 'add'.\n * @return {void}\n * @private\n */\n// eslint-disable-next-line no-use-before-define\nfunction manageRootElement(that: EventsManager, mode: 'add' | 'remove' = 'add') {\n const modeMethod = `${mode}EventListener`;\n const methods = getEventMethodsByName(that);\n\n const { __base: base, __config: config } = that;\n\n for (const method of methods) {\n let event = getEventNameByMethod(method);\n\n if (methodIsGlobal(method)) {\n event = getEventNameByMethod(method, methodIsDocument(method) ? 'document' : 'window');\n const target = getGlobalEventTarget(method);\n target[modeMethod](\n event,\n methodIsDocument(method) ? that.__documentHandler : that.__windowHandler,\n );\n } else {\n const target = getEventTarget(base, event, config);\n target?.[modeMethod](event, that.__rootElementHandler);\n }\n }\n}\n\nexport type EventManagerCallbackParams<T extends Event = Event> = {\n event: T;\n args: Array<any>;\n index: number;\n target: Element | Base | Promise<Base> | typeof window | typeof document | null;\n};\n\n/**\n * Normalize `on...` method params.\n */\nfunction normalizeParams(\n params: Partial<EventManagerCallbackParams> = {},\n): EventManagerCallbackParams {\n return {\n event: null,\n args: [],\n index: 0,\n target: null,\n ...params,\n };\n}\n\n/**\n * Event management class.\n *\n * @todo Prevent binding of `onChildOrRefEvent` to the root element\n * @todo Use event delegation?\n */\nexport class EventsManager extends AbstractManager {\n __methodsCache: Map<string, string[]> = new Map();\n\n /**\n * Event listener object for the root element.\n */\n __rootElementHandler: EventListenerObject = {\n handleEvent: (event: Event | CustomEvent) => {\n const normalizedEventName = pascalCase(event.type);\n const method = `on${normalizedEventName}`;\n const isCustomEvent = event instanceof CustomEvent;\n\n this.__base[method](\n normalizeParams({\n event,\n args: isCustomEvent ? (event.detail ?? []) : [],\n target: isCustomEvent ? this.__base : this.__element,\n }),\n );\n },\n };\n\n /**\n * Event listener object for the root element.\n *\n * @type {EventListenerObject}\n */\n __documentHandler = {\n /**\n * @param {Event|CustomEvent} event\n * @return {void}\n */\n handleEvent: (event) => {\n const normalizedEventName = pascalCase(event.type);\n const method = `onDocument${normalizedEventName}`;\n\n this.__base[method](normalizeParams({ event, target: document }));\n },\n };\n\n /**\n * Event listener object for the root element.\n *\n * @type {EventListenerObject}\n */\n __windowHandler = {\n /**\n * @param {Event|CustomEvent} event\n * @return {void}\n */\n handleEvent: (event) => {\n const normalizedEventName = pascalCase(event.type);\n const method = `onWindow${normalizedEventName}`;\n\n this.__base[method](normalizeParams({ event, target: window }));\n },\n };\n\n /**\n * Event listener object for the refs.\n */\n __refsHandler: EventListenerObject = {\n handleEvent: (event) => {\n const ref = event.currentTarget as HTMLElement;\n const attributes = features.get('attributes');\n const refName = normalizeRefName(ref.getAttribute(attributes.ref));\n\n const normalizedRefName = pascalCase(refName);\n const normalizedEventName = pascalCase(event.type);\n const method = `on${normalizedRefName}${normalizedEventName}`;\n\n let index = 0;\n if (isArray(this.__base.$refs[refName])) {\n index = (this.__base.$refs[refName] as HTMLElement[]).indexOf(ref);\n }\n\n this.__base[method](normalizeParams({ event, index, target: ref }));\n },\n };\n\n /**\n * Event listener object for the children.\n */\n __childrenHandler: EventListenerObject = {\n handleEvent: (event: CustomEvent) => {\n const children = this.__base.__children.props;\n\n for (const childName of Object.keys(children)) {\n let index = -1;\n\n for (const child of children[childName] as Base<BaseProps>[]) {\n index++;\n\n if (\n child.$el === event.currentTarget &&\n (eventIsNative(event.type, child.$el) ||\n eventIsDefinedInConfig(event.type, child.__config))\n ) {\n const normalizedEventName = pascalCase(event.type);\n const normalizedChildName = pascalCase(childName);\n const method = `on${normalizedChildName}${normalizedEventName}`;\n const args = isArray(event.detail) ? event.detail : [];\n this.__base[method](normalizeParams({ event, index, args, target: child }));\n }\n }\n }\n },\n };\n\n /**\n * Class constructor.\n */\n constructor(base: Base) {\n super(base);\n }\n\n /**\n * Bind event methods to the given ref elements.\n *\n * @param {string} name\n * The name of the ref.\n * @param {HTMLElement[]} elements\n * The elements of the ref.\n * @return {void}\n */\n bindRef(name: string, elements: HTMLElement[]) {\n manageRef(this, name, elements);\n }\n\n /**\n * Bind event methods to the given ref elements.\n *\n * @param {string} name\n * The name of the ref.\n * @param {HTMLElement[]} elements\n * The elements of the ref.\n * @return {void}\n */\n unbindRef(name: string, elements: HTMLElement[]) {\n manageRef(this, name, elements, 'remove');\n }\n\n /**\n * Bind event methods to the given child instance.\n *\n * @param {string} name\n * The name of the ref.\n * @param {Base} instance\n * A base instance.\n * @return {void}\n */\n bindChild(name: string, instance: Base) {\n manageChild(this, name, instance);\n }\n\n /**\n * Unbind event methods to the given child instance.\n *\n * @param {string} name\n * The name of the ref.\n * @param {Base} instance\n * A base instance.\n * @return {void}\n */\n unbindChild(name: string, instance: Base) {\n manageChild(this, name, instance, 'remove');\n }\n\n /**\n * Bind event methods on the root element.\n *\n * @return {void}\n */\n bindRootElement() {\n manageRootElement(this);\n }\n\n /**\n * Unbind event method from the root element.\n *\n * @return {void}\n */\n unbindRootElement() {\n manageRootElement(this, 'remove');\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { isArray } from '../../utils/is.js';\nimport { dashCase, pascalCase } from '../../utils/string/changeCase.js';\nimport type { Base, BaseProps } from '../Base.js';\nimport { eventIsDefinedInConfig, eventIsNative, getEventTarget } from '../utils.js';\nimport { getAllProperties } from '../../utils/object/getAllProperties.js';\nimport { AbstractManager } from './AbstractManager.js';\nimport { normalizeRefName } from './RefsManager.js';\nimport { features } from '../features.js';\n\nconst regexes = new Map();\n\n/**\n * Get a regex with a cache;\n *\n * @param {string} regex\n * @return {RegExp}\n */\nfunction getRegex(regex: string): RegExp {\n if (!regexes.has(regex)) {\n regexes.set(regex, new RegExp(regex));\n }\n\n return regexes.get(regex);\n}\n\n/**\n * Get the event name from the given method and its tied ref or children name.\n *\n * @param {string} method\n * @param {string} name\n * @return {string}\n * @private\n */\nfunction getEventNameByMethod(method: string, name = ''): string {\n const regex = getRegex(`^on${pascalCase(name)}([A-Z].*)$`);\n const [, event] = method.match(regex);\n return dashCase(event);\n}\n\n/**\n * Get the base instance methods matching the `onSomething` pattern.\n *\n * @param {EventsManager} that\n * @param {string} [name]\n * @return {string[]}\n * @private\n */\n// eslint-disable-next-line no-use-before-define\nfunction getEventMethodsByName(that: EventsManager, name = ''): string[] {\n const regex = getRegex(`^on${pascalCase(name)}[A-Z].*$`);\n const key = regex.toString();\n\n let methods = that.__methodsCache.get(key);\n\n if (!methods) {\n methods = Array.from(\n getAllProperties(that.__base, [], (method) => regex.test(method)).reduce(\n (set, [method]) => set.add(method),\n new Set(),\n ),\n ) as string[];\n that.__methodsCache.set(key, methods);\n }\n\n return methods;\n}\n\n/**\n * Manage a ref event methods.\n *\n * @param {EventsManager} that\n * @param {string} name\n * The name of the ref.\n * @param {HTMLElement[]} elements\n * The elements of the ref.\n * @param {'add'|'remove'} [mode]\n * The action to perform: add or remove the event listeners.\n * @return {void}\n * @private\n */\nfunction manageRef(\n // eslint-disable-next-line no-use-before-define\n that: EventsManager,\n name: string,\n elements: HTMLElement[],\n mode: 'add' | 'remove' = 'add',\n) {\n const action = `${mode}EventListener`;\n const methods = getEventMethodsByName(that, name);\n for (const method of methods) {\n const event = getEventNameByMethod(method, name);\n for (const element of elements) {\n element?.[action](event, that.__refsHandler);\n }\n }\n}\n/**\n * Manage event methods to the given child instance.\n *\n * @param {EventsManager} that\n * @param {string} name\n * The name of the ref.\n * @param {Base} instance\n * A base instance.\n * @param {'add'|'remove'} [mode]\n * The action to perform: add or remove the event listeners.\n * @return {void}\n * @private\n */\nfunction manageChild(\n // eslint-disable-next-line no-use-before-define\n that: EventsManager,\n name: string,\n instance: Base,\n mode: 'add' | 'remove' = 'add',\n) {\n const action = mode === 'add' ? '$on' : '$off';\n const methods = getEventMethodsByName(that, name);\n const config = instance.__config;\n for (const method of methods) {\n const event = getEventNameByMethod(method, name);\n if (getEventTarget(instance, event, config)) {\n instance[action](event, that.__childrenHandler);\n }\n }\n}\n\nconst isDocumentRegex = /^onDocument[A-Z][a-z]+/;\nconst isWindowRegex = /^onWindow[A-Z][a-z]+/;\nconst methodIsDocument = (method) => isDocumentRegex.test(method);\nconst methodIsWindow = (method) => isWindowRegex.test(method);\nconst methodIsGlobal = (method) => methodIsWindow(method) || methodIsDocument(method);\nconst getGlobalEventTarget = (method) => (methodIsDocument(method) ? document : window);\n\n/**\n * Manage event methods on the root element.\n *\n * @param {EventsManager} that\n * @param {'add'|'remove'} [mode]\n * The action to perform: add or remove the event listeners, defaults to 'add'.\n * @return {void}\n * @private\n */\n// eslint-disable-next-line no-use-before-define\nfunction manageRootElement(that: EventsManager, mode: 'add' | 'remove' = 'add') {\n const modeMethod = `${mode}EventListener`;\n const methods = getEventMethodsByName(that);\n\n const { __base: base, __config: config } = that;\n\n for (const method of methods) {\n let event = getEventNameByMethod(method);\n\n if (methodIsGlobal(method)) {\n event = getEventNameByMethod(method, methodIsDocument(method) ? 'document' : 'window');\n const target = getGlobalEventTarget(method);\n target[modeMethod](\n event,\n methodIsDocument(method) ? that.__documentHandler : that.__windowHandler,\n );\n } else {\n const target = getEventTarget(base, event, config);\n target?.[modeMethod](event, that.__rootElementHandler);\n }\n }\n}\n\nexport type EventManagerCallbackParams<T extends Event = Event> = {\n event: T;\n args: Array<any>;\n index: number;\n target: Element | Base | Promise<Base> | typeof window | typeof document | null;\n};\n\n/**\n * Normalize `on...` method params.\n */\nfunction normalizeParams(\n params: Partial<EventManagerCallbackParams> = {},\n): EventManagerCallbackParams {\n return {\n event: null,\n args: [],\n index: 0,\n target: null,\n ...params,\n };\n}\n\n/**\n * Event management class.\n *\n * @todo Prevent binding of `onChildOrRefEvent` to the root element\n * @todo Use event delegation?\n */\nexport class EventsManager extends AbstractManager {\n __methodsCache: Map<string, string[]> = new Map();\n\n /**\n * Event listener object for the root element.\n */\n __rootElementHandler: EventListenerObject = {\n handleEvent: (event: Event | CustomEvent) => {\n const normalizedEventName = pascalCase(event.type);\n const method = `on${normalizedEventName}`;\n const isCustomEvent = event instanceof CustomEvent;\n\n this.__base[method](\n normalizeParams({\n event,\n args: isCustomEvent ? (event.detail ?? []) : [],\n target: isCustomEvent ? this.__base : this.__element,\n }),\n );\n },\n };\n\n /**\n * Event listener object for the root element.\n *\n * @type {EventListenerObject}\n */\n __documentHandler = {\n /**\n * @param {Event|CustomEvent} event\n * @return {void}\n */\n handleEvent: (event) => {\n const normalizedEventName = pascalCase(event.type);\n const method = `onDocument${normalizedEventName}`;\n\n this.__base[method](normalizeParams({ event, target: document }));\n },\n };\n\n /**\n * Event listener object for the root element.\n *\n * @type {EventListenerObject}\n */\n __windowHandler = {\n /**\n * @param {Event|CustomEvent} event\n * @return {void}\n */\n handleEvent: (event) => {\n const normalizedEventName = pascalCase(event.type);\n const method = `onWindow${normalizedEventName}`;\n\n this.__base[method](normalizeParams({ event, target: window }));\n },\n };\n\n /**\n * Event listener object for the refs.\n */\n __refsHandler: EventListenerObject = {\n handleEvent: (event) => {\n const ref = event.currentTarget as HTMLElement;\n const attributes = features.get('attributes');\n const refName = normalizeRefName(ref.getAttribute(attributes.ref));\n\n const normalizedRefName = pascalCase(refName);\n const normalizedEventName = pascalCase(event.type);\n const method = `on${normalizedRefName}${normalizedEventName}`;\n\n let index = 0;\n if (isArray(this.__base.$refs[refName])) {\n index = (this.__base.$refs[refName] as HTMLElement[]).indexOf(ref);\n }\n\n this.__base[method](normalizeParams({ event, index, target: ref }));\n },\n };\n\n /**\n * Event listener object for the children.\n */\n __childrenHandler: EventListenerObject = {\n handleEvent: (event: CustomEvent) => {\n const children = this.__base.__children.props;\n\n for (const childName of Object.keys(children)) {\n let index = -1;\n\n for (const child of children[childName] as Base<BaseProps>[]) {\n index++;\n\n if (\n child.$el === event.currentTarget &&\n (eventIsNative(event.type, child.$el) ||\n eventIsDefinedInConfig(event.type, child.__config))\n ) {\n const normalizedEventName = pascalCase(event.type);\n const normalizedChildName = pascalCase(childName);\n const method = `on${normalizedChildName}${normalizedEventName}`;\n const args = isArray(event.detail) ? event.detail : [];\n this.__base[method](normalizeParams({ event, index, args, target: child }));\n }\n }\n }\n },\n };\n\n /**\n * Class constructor.\n */\n constructor(base: Base) {\n super(base);\n }\n\n /**\n * Bind event methods to the given ref elements.\n *\n * @param {string} name\n * The name of the ref.\n * @param {HTMLElement[]} elements\n * The elements of the ref.\n * @return {void}\n */\n bindRef(name: string, elements: HTMLElement[]) {\n manageRef(this, name, elements);\n }\n\n /**\n * Bind event methods to the given ref elements.\n *\n * @param {string} name\n * The name of the ref.\n * @param {HTMLElement[]} elements\n * The elements of the ref.\n * @return {void}\n */\n unbindRef(name: string, elements: HTMLElement[]) {\n manageRef(this, name, elements, 'remove');\n }\n\n /**\n * Bind event methods to the given child instance.\n *\n * @param {string} name\n * The name of the ref.\n * @param {Base} instance\n * A base instance.\n * @return {void}\n */\n bindChild(name: string, instance: Base) {\n manageChild(this, name, instance);\n }\n\n /**\n * Unbind event methods to the given child instance.\n *\n * @param {string} name\n * The name of the ref.\n * @param {Base} instance\n * A base instance.\n * @return {void}\n */\n unbindChild(name: string, instance: Base) {\n manageChild(this, name, instance, 'remove');\n }\n\n /**\n * Bind event methods on the root element.\n *\n * @return {void}\n */\n bindRootElement() {\n manageRootElement(this);\n }\n\n /**\n * Unbind event method from the root element.\n *\n * @return {void}\n */\n unbindRootElement() {\n manageRootElement(this, 'remove');\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type { Base } from '../Base.js';
|
|
1
2
|
import type { Options as DeepmergeOptions } from 'deepmerge';
|
|
2
3
|
import { AbstractManager } from './AbstractManager.js';
|
|
3
|
-
import type { Base } from '../index.js';
|
|
4
4
|
export type OptionType = StringConstructor | NumberConstructor | BooleanConstructor | ArrayConstructor | ObjectConstructor;
|
|
5
5
|
type ArrayOption = {
|
|
6
6
|
type: ArrayConstructor;
|
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
import deepmerge from "deepmerge";
|
|
2
|
+
import { isArray, isBoolean, isDefined, isDev, isFunction, isObject } from "../../utils/is.js";
|
|
3
|
+
import { memo } from "../../utils/memo.js";
|
|
2
4
|
import { AbstractManager } from "./AbstractManager.js";
|
|
3
|
-
import {
|
|
4
|
-
isDev,
|
|
5
|
-
isFunction,
|
|
6
|
-
isDefined,
|
|
7
|
-
isBoolean,
|
|
8
|
-
isArray,
|
|
9
|
-
isObject,
|
|
10
|
-
memo
|
|
11
|
-
} from "../../utils/index.js";
|
|
12
5
|
import { features } from "../features.js";
|
|
13
6
|
const types = /* @__PURE__ */ new Set([String, Number, Boolean, Array, Object]);
|
|
14
7
|
const __defaultValues = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../packages/js-toolkit/Base/managers/OptionsManager.ts"],
|
|
4
|
-
"sourcesContent": ["import deepmerge from 'deepmerge';\nimport
|
|
5
|
-
"mappings": "AAAA,OAAO,eAAe;
|
|
4
|
+
"sourcesContent": ["import deepmerge from 'deepmerge';\nimport { isArray, isBoolean, isDefined, isDev, isFunction, isObject } from '../../utils/is.js';\nimport { memo } from '../../utils/memo.js';\nimport type { Base } from '../Base.js';\nimport type { Options as DeepmergeOptions } from 'deepmerge';\nimport { AbstractManager } from './AbstractManager.js';\nimport { features } from '../features.js';\n\nexport type OptionType =\n | StringConstructor\n | NumberConstructor\n | BooleanConstructor\n | ArrayConstructor\n | ObjectConstructor;\n\ntype ArrayOption = {\n type: ArrayConstructor;\n default?: (instance: Base) => unknown[];\n merge?: boolean | DeepmergeOptions;\n};\n\ntype ObjectOption = {\n type: ObjectConstructor;\n default?: (instance: Base) => unknown;\n merge?: boolean | DeepmergeOptions;\n};\n\ntype StringOption = {\n type: StringConstructor;\n default?: string | ((instance: Base) => string);\n};\n\ntype NumberOption = {\n type: NumberConstructor;\n default?: number | ((instance: Base) => number);\n};\n\ntype BooleanOption = {\n type: BooleanConstructor;\n default?: boolean | ((instance: Base) => boolean);\n};\n\nexport type OptionObject = ArrayOption | ObjectOption | StringOption | NumberOption | BooleanOption;\nexport type OptionsSchema = { [name: string]: OptionType | OptionObject };\nexport type OptionsInterface = { [optionName: string]: unknown };\n\n/**\n * List of allowed types.\n */\nconst types: Set<OptionType> = new Set([String, Number, Boolean, Array, Object]);\n\n/**\n * The default values to return for each available type.\n */\nconst __defaultValues = {\n String: '',\n Number: 0,\n Boolean: false,\n Array: () => [],\n Object: () => ({}),\n};\n\nconst UPPERCASE_REGEX = /([A-Z])/g;\n\n/**\n * Get a property name.\n */\nexport const __getPropertyName = memo(function __getPropertyName(\n name: string,\n prefix = '',\n optionAttribute = features.get('attributes').option,\n) {\n return `${optionAttribute}${prefix ? `-${prefix}` : ''}-${name.replaceAll(UPPERCASE_REGEX, '-$1')}`;\n});\n\n/**\n * Class options to manage options as data attributes on an HTML element.\n *\n * @todo Use `MutationObserver` to update values? Might be more performant.\n */\nexport class OptionsManager<T> extends AbstractManager<\n T & { name: string; debug: boolean; log: boolean }\n> {\n /**\n * An object to store Array and Object values for reference.\n *\n * @private\n */\n __values = {};\n\n /**\n * Default props.\n */\n __props = {\n name: 'Base',\n debug: false,\n log: false,\n } as T & { name: string; debug: boolean; log: boolean };\n\n /**\n * Class constructor.\n */\n constructor(base: Base) {\n super(base);\n const schema: OptionsSchema = this.__config.options || {};\n this.props.name = this.__config.name;\n\n schema.debug = {\n type: Boolean,\n default: this.__config.debug ?? false,\n };\n\n schema.log = {\n type: Boolean,\n default: this.__config.log ?? false,\n };\n\n for (const [name, config] of Object.entries(schema)) {\n this.__register(\n name,\n types.has(config as OptionType)\n ? ({ type: config as OptionType } as OptionObject)\n : (config as OptionObject),\n );\n }\n }\n\n /**\n * Get an option value.\n */\n get(name: string, config: OptionObject) {\n const { type } = config;\n const defaultValue = isFunction(config.default) ? config.default(this.__base) : config.default;\n const attributes = features.get('attributes');\n const propertyName = __getPropertyName(name, '', attributes.option);\n const hasProperty = this.__element.hasAttribute(propertyName);\n\n if (type === Boolean) {\n if (defaultValue) {\n const negatedPropertyName = __getPropertyName(name, 'no', attributes.option);\n const hasNegatedProperty = this.__element.hasAttribute(negatedPropertyName);\n\n return !hasNegatedProperty;\n }\n\n return hasProperty || defaultValue;\n }\n\n const value = this.__element.getAttribute(propertyName);\n\n if (type === Number) {\n return hasProperty ? Number(value) : defaultValue;\n }\n\n if (type === Array || type === Object) {\n // eslint-disable-next-line no-param-reassign\n config = type === Array ? (config as ArrayOption) : (config as ObjectOption);\n\n if (!this.__values[name]) {\n let val = hasProperty ? JSON.parse(value) : defaultValue;\n\n if (isDefined(config.merge)) {\n val = isBoolean(config.merge)\n ? deepmerge(defaultValue, val)\n : deepmerge(defaultValue, val, config.merge);\n }\n\n this.__values[name] = val;\n }\n\n return this.__values[name];\n }\n\n return hasProperty ? value : defaultValue;\n }\n\n /**\n * Set an option value.\n */\n set(name: string, value: unknown, config: OptionObject) {\n const { type, default: defaultValue } = config;\n const attributes = features.get('attributes');\n const propertyName = __getPropertyName(name, '', attributes.option);\n\n if (value.constructor.name !== type.name) {\n if (isDev) {\n const val = isArray(value) || isObject(value) ? JSON.stringify(value) : value;\n throw new TypeError(\n `The \"${val}\" value for the \"${name}\" option must be of type \"${type.name}\"`,\n );\n }\n /* v8 ignore next 2 */\n return;\n }\n\n switch (type) {\n case Boolean:\n if (defaultValue) {\n const negatedPropertyName = __getPropertyName(name, 'no', attributes.option);\n\n if (value) {\n this.__element.removeAttribute(negatedPropertyName);\n } else {\n this.__element.setAttribute(negatedPropertyName, '');\n }\n } else if (value) {\n this.__element.setAttribute(propertyName, '');\n } else {\n this.__element.removeAttribute(propertyName);\n }\n break;\n case Array:\n case Object:\n this.__values[name] = value;\n break;\n default:\n this.__element.setAttribute(propertyName, value as string);\n }\n }\n\n /**\n * Register an option.\n * @private\n */\n __register(name: string, config: OptionObject) {\n if (!types.has(config.type)) {\n if (isDev) {\n throw new Error(\n `The \"${name}\" option has an invalid type. The allowed types are: String, Number, Boolean, Array and Object.`,\n );\n }\n /* v8 ignore next 2 */\n return;\n }\n\n config.default = config.default ?? __defaultValues[config.type.name];\n\n if ((config.type === Array || config.type === Object) && !isFunction(config.default)) {\n if (isDev) {\n throw new Error(\n `The default value for options of type \"${config.type.name}\" must be returned by a function.`,\n );\n }\n /* v8 ignore next 2 */\n return;\n }\n\n Object.defineProperty(this.props, name, {\n get: () => this.get(name, config),\n set: (value) => {\n this.set(name, value, config);\n },\n enumerable: true,\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,eAAe;AACtB,SAAS,SAAS,WAAW,WAAW,OAAO,YAAY,gBAAgB;AAC3E,SAAS,YAAY;AAGrB,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AA2CzB,MAAM,QAAyB,oBAAI,IAAI,CAAC,QAAQ,QAAQ,SAAS,OAAO,MAAM,CAAC;AAK/E,MAAM,kBAAkB;AAAA,EACtB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,OAAO,MAAM,CAAC;AAAA,EACd,QAAQ,OAAO,CAAC;AAClB;AAEA,MAAM,kBAAkB;AAKjB,MAAM,oBAAoB,KAAK,SAASA,mBAC7C,MACA,SAAS,IACT,kBAAkB,SAAS,IAAI,YAAY,EAAE,QAC7C;AACA,SAAO,GAAG,eAAe,GAAG,SAAS,IAAI,MAAM,KAAK,EAAE,IAAI,KAAK,WAAW,iBAAiB,KAAK,CAAC;AACnG,CAAC;AAOM,MAAM,uBAA0B,gBAErC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,CAAC;AAAA;AAAA;AAAA;AAAA,EAKZ,UAAU;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,EACP;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,MAAY;AACtB,UAAM,IAAI;AACV,UAAM,SAAwB,KAAK,SAAS,WAAW,CAAC;AACxD,SAAK,MAAM,OAAO,KAAK,SAAS;AAEhC,WAAO,QAAQ;AAAA,MACb,MAAM;AAAA,MACN,SAAS,KAAK,SAAS,SAAS;AAAA,IAClC;AAEA,WAAO,MAAM;AAAA,MACX,MAAM;AAAA,MACN,SAAS,KAAK,SAAS,OAAO;AAAA,IAChC;AAEA,eAAW,CAAC,MAAM,MAAM,KAAK,OAAO,QAAQ,MAAM,GAAG;AACnD,WAAK;AAAA,QACH;AAAA,QACA,MAAM,IAAI,MAAoB,IACzB,EAAE,MAAM,OAAqB,IAC7B;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAc,QAAsB;AACtC,UAAM,EAAE,KAAK,IAAI;AACjB,UAAM,eAAe,WAAW,OAAO,OAAO,IAAI,OAAO,QAAQ,KAAK,MAAM,IAAI,OAAO;AACvF,UAAM,aAAa,SAAS,IAAI,YAAY;AAC5C,UAAM,eAAe,kBAAkB,MAAM,IAAI,WAAW,MAAM;AAClE,UAAM,cAAc,KAAK,UAAU,aAAa,YAAY;AAE5D,QAAI,SAAS,SAAS;AACpB,UAAI,cAAc;AAChB,cAAM,sBAAsB,kBAAkB,MAAM,MAAM,WAAW,MAAM;AAC3E,cAAM,qBAAqB,KAAK,UAAU,aAAa,mBAAmB;AAE1E,eAAO,CAAC;AAAA,MACV;AAEA,aAAO,eAAe;AAAA,IACxB;AAEA,UAAM,QAAQ,KAAK,UAAU,aAAa,YAAY;AAEtD,QAAI,SAAS,QAAQ;AACnB,aAAO,cAAc,OAAO,KAAK,IAAI;AAAA,IACvC;AAEA,QAAI,SAAS,SAAS,SAAS,QAAQ;AAErC,eAAS,SAAS,QAAS,SAA0B;AAErD,UAAI,CAAC,KAAK,SAAS,IAAI,GAAG;AACxB,YAAI,MAAM,cAAc,KAAK,MAAM,KAAK,IAAI;AAE5C,YAAI,UAAU,OAAO,KAAK,GAAG;AAC3B,gBAAM,UAAU,OAAO,KAAK,IACxB,UAAU,cAAc,GAAG,IAC3B,UAAU,cAAc,KAAK,OAAO,KAAK;AAAA,QAC/C;AAEA,aAAK,SAAS,IAAI,IAAI;AAAA,MACxB;AAEA,aAAO,KAAK,SAAS,IAAI;AAAA,IAC3B;AAEA,WAAO,cAAc,QAAQ;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAc,OAAgB,QAAsB;AACtD,UAAM,EAAE,MAAM,SAAS,aAAa,IAAI;AACxC,UAAM,aAAa,SAAS,IAAI,YAAY;AAC5C,UAAM,eAAe,kBAAkB,MAAM,IAAI,WAAW,MAAM;AAElE,QAAI,MAAM,YAAY,SAAS,KAAK,MAAM;AACxC,UAAI,OAAO;AACT,cAAM,MAAM,QAAQ,KAAK,KAAK,SAAS,KAAK,IAAI,KAAK,UAAU,KAAK,IAAI;AACxE,cAAM,IAAI;AAAA,UACR,QAAQ,GAAG,oBAAoB,IAAI,6BAA6B,KAAK,IAAI;AAAA,QAC3E;AAAA,MACF;AAEA;AAAA,IACF;AAEA,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,YAAI,cAAc;AAChB,gBAAM,sBAAsB,kBAAkB,MAAM,MAAM,WAAW,MAAM;AAE3E,cAAI,OAAO;AACT,iBAAK,UAAU,gBAAgB,mBAAmB;AAAA,UACpD,OAAO;AACL,iBAAK,UAAU,aAAa,qBAAqB,EAAE;AAAA,UACrD;AAAA,QACF,WAAW,OAAO;AAChB,eAAK,UAAU,aAAa,cAAc,EAAE;AAAA,QAC9C,OAAO;AACL,eAAK,UAAU,gBAAgB,YAAY;AAAA,QAC7C;AACA;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,aAAK,SAAS,IAAI,IAAI;AACtB;AAAA,MACF;AACE,aAAK,UAAU,aAAa,cAAc,KAAe;AAAA,IAC7D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,MAAc,QAAsB;AAC7C,QAAI,CAAC,MAAM,IAAI,OAAO,IAAI,GAAG;AAC3B,UAAI,OAAO;AACT,cAAM,IAAI;AAAA,UACR,QAAQ,IAAI;AAAA,QACd;AAAA,MACF;AAEA;AAAA,IACF;AAEA,WAAO,UAAU,OAAO,WAAW,gBAAgB,OAAO,KAAK,IAAI;AAEnE,SAAK,OAAO,SAAS,SAAS,OAAO,SAAS,WAAW,CAAC,WAAW,OAAO,OAAO,GAAG;AACpF,UAAI,OAAO;AACT,cAAM,IAAI;AAAA,UACR,0CAA0C,OAAO,KAAK,IAAI;AAAA,QAC5D;AAAA,MACF;AAEA;AAAA,IACF;AAEA,WAAO,eAAe,KAAK,OAAO,MAAM;AAAA,MACtC,KAAK,MAAM,KAAK,IAAI,MAAM,MAAM;AAAA,MAChC,KAAK,CAAC,UAAU;AACd,aAAK,IAAI,MAAM,OAAO,MAAM;AAAA,MAC9B;AAAA,MACA,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AACF;",
|
|
6
6
|
"names": ["__getPropertyName"]
|
|
7
7
|
}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
+
import { getAncestorWhereUntil } from "../../utils/dom/ancestors.js";
|
|
2
|
+
import { isArray, isDev } from "../../utils/is.js";
|
|
3
|
+
import { memo } from "../../utils/memo.js";
|
|
4
|
+
import { camelCase } from "../../utils/string/changeCase.js";
|
|
5
|
+
import { endsWith } from "../../utils/string/endsWith.js";
|
|
6
|
+
import { startsWith } from "../../utils/string/startsWith.js";
|
|
1
7
|
import { AbstractManager } from "./AbstractManager.js";
|
|
2
|
-
import {
|
|
3
|
-
isDev,
|
|
4
|
-
isArray,
|
|
5
|
-
getAncestorWhereUntil,
|
|
6
|
-
endsWith,
|
|
7
|
-
startsWith,
|
|
8
|
-
memo,
|
|
9
|
-
camelCase
|
|
10
|
-
} from "../../utils/index.js";
|
|
11
8
|
import { features } from "../features.js";
|
|
12
9
|
const NORMALIZE_REF_NAME_REGEX = /\[\]$/;
|
|
13
10
|
const NAMESPACED_REF_REGEX = /^(.*\.)/;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../packages/js-toolkit/Base/managers/RefsManager.ts"],
|
|
4
|
-
"sourcesContent": ["import {
|
|
5
|
-
"mappings": "AAAA,SAAS,
|
|
4
|
+
"sourcesContent": ["import { getAncestorWhereUntil } from '../../utils/dom/ancestors.js';\nimport { isArray, isDev } from '../../utils/is.js';\nimport { memo } from '../../utils/memo.js';\nimport { camelCase } from '../../utils/string/changeCase.js';\nimport { endsWith } from '../../utils/string/endsWith.js';\nimport { startsWith } from '../../utils/string/startsWith.js';\nimport { AbstractManager } from './AbstractManager.js';\nimport { features } from '../features.js';\n\nconst NORMALIZE_REF_NAME_REGEX = /\\[\\]$/;\nconst NAMESPACED_REF_REGEX = /^(.*\\.)/;\n\n/**\n * Normalize the name of ref.\n */\nexport const normalizeRefName = memo(function normalizeRefName(name: string) {\n let normalizedName = name;\n\n if (endsWith(name, '[]')) {\n normalizedName = normalizedName.replace(NORMALIZE_REF_NAME_REGEX, '');\n }\n\n if (normalizedName.includes('.')) {\n return normalizedName.replace(NAMESPACED_REF_REGEX, '');\n }\n\n return normalizedName;\n});\n\n/**\n * Filter refs belonging to the related Base instance.\n */\nfunction refBelongToInstance(ref: HTMLElement, rootElement: HTMLElement, name: string) {\n const attributes = features.get('attributes');\n const isPrefixed = startsWith(ref.getAttribute(attributes.ref), name);\n const firstComponentAncestor = getAncestorWhereUntil(\n ref,\n (el) =>\n el &&\n (isPrefixed\n ? el.getAttribute(attributes.component) === name && el\n : el.getAttribute(attributes.component)) &&\n el !== rootElement,\n (el) => el === rootElement,\n );\n\n return firstComponentAncestor === rootElement;\n}\n\n/**\n * Refs Manager\n *\n * @todo Use `MutationObserver` to automatically update refs?\n */\nexport class RefsManager<T> extends AbstractManager<T> {\n /**\n * Get refs configuration.\n * @private\n */\n get __refs() {\n return this.__config.refs ?? [];\n }\n\n /**\n * Register all refs.\n */\n registerAll() {\n for (const refName of this.__refs) {\n this.__register(refName);\n }\n }\n\n /**\n * Unregister all refs.\n */\n unregisterAll() {\n for (const refName of this.__refs) {\n this.__unregister(refName);\n }\n }\n\n /**\n * Register one ref.\n * @private\n */\n __register(refName: string) {\n const isMultiple = endsWith(refName, '[]');\n const propName = normalizeRefName(refName);\n const { name } = this.__base.__config;\n const attributes = features.get('attributes');\n const refs = [] as HTMLElement[];\n const selector = `[${attributes.ref}=\"${refName}\"],[${attributes.ref}=\"${name}.${refName}\"]`;\n\n for (const ref of this.__element.querySelectorAll<HTMLElement>(selector)) {\n if (refBelongToInstance(ref, this.__element, name)) {\n refs.push(ref);\n }\n }\n\n /* v8 ignore next 7 */\n if (isDev && !isMultiple && refs.length > 1) {\n console.warn(\n `[${this.__base.$id}]`,\n `The \"${refName}\" ref has been found multiple times.`,\n 'Did you forgot to add the `[]` suffix to its name?',\n );\n }\n\n if (refs.length) {\n this.__eventsManager.bindRef(refName, refs);\n }\n\n Object.defineProperty(this.props, camelCase(propName), {\n // @todo remove usage of non-multiple refs as array\n value: isMultiple || refs.length > 1 ? refs : refs[0],\n enumerable: true,\n configurable: true,\n });\n }\n\n /**\n * Unregister one ref.\n */\n __unregister(refName: string) {\n const propName = normalizeRefName(refName);\n const refs = this.props[propName];\n this.__eventsManager.unbindRef(refName, isArray(refs) ? refs : [refs]);\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,6BAA6B;AACtC,SAAS,SAAS,aAAa;AAC/B,SAAS,YAAY;AACrB,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AAEzB,MAAM,2BAA2B;AACjC,MAAM,uBAAuB;AAKtB,MAAM,mBAAmB,KAAK,SAASA,kBAAiB,MAAc;AAC3E,MAAI,iBAAiB;AAErB,MAAI,SAAS,MAAM,IAAI,GAAG;AACxB,qBAAiB,eAAe,QAAQ,0BAA0B,EAAE;AAAA,EACtE;AAEA,MAAI,eAAe,SAAS,GAAG,GAAG;AAChC,WAAO,eAAe,QAAQ,sBAAsB,EAAE;AAAA,EACxD;AAEA,SAAO;AACT,CAAC;AAKD,SAAS,oBAAoB,KAAkB,aAA0B,MAAc;AACrF,QAAM,aAAa,SAAS,IAAI,YAAY;AAC5C,QAAM,aAAa,WAAW,IAAI,aAAa,WAAW,GAAG,GAAG,IAAI;AACpE,QAAM,yBAAyB;AAAA,IAC7B;AAAA,IACA,CAAC,OACC,OACC,aACG,GAAG,aAAa,WAAW,SAAS,MAAM,QAAQ,KAClD,GAAG,aAAa,WAAW,SAAS,MACxC,OAAO;AAAA,IACT,CAAC,OAAO,OAAO;AAAA,EACjB;AAEA,SAAO,2BAA2B;AACpC;AAOO,MAAM,oBAAuB,gBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKrD,IAAI,SAAS;AACX,WAAO,KAAK,SAAS,QAAQ,CAAC;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc;AACZ,eAAW,WAAW,KAAK,QAAQ;AACjC,WAAK,WAAW,OAAO;AAAA,IACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB;AACd,eAAW,WAAW,KAAK,QAAQ;AACjC,WAAK,aAAa,OAAO;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,SAAiB;AAC1B,UAAM,aAAa,SAAS,SAAS,IAAI;AACzC,UAAM,WAAW,iBAAiB,OAAO;AACzC,UAAM,EAAE,KAAK,IAAI,KAAK,OAAO;AAC7B,UAAM,aAAa,SAAS,IAAI,YAAY;AAC5C,UAAM,OAAO,CAAC;AACd,UAAM,WAAW,IAAI,WAAW,GAAG,KAAK,OAAO,OAAO,WAAW,GAAG,KAAK,IAAI,IAAI,OAAO;AAExF,eAAW,OAAO,KAAK,UAAU,iBAA8B,QAAQ,GAAG;AACxE,UAAI,oBAAoB,KAAK,KAAK,WAAW,IAAI,GAAG;AAClD,aAAK,KAAK,GAAG;AAAA,MACf;AAAA,IACF;AAGA,QAAI,SAAS,CAAC,cAAc,KAAK,SAAS,GAAG;AAC3C,cAAQ;AAAA,QACN,IAAI,KAAK,OAAO,GAAG;AAAA,QACnB,QAAQ,OAAO;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAEA,QAAI,KAAK,QAAQ;AACf,WAAK,gBAAgB,QAAQ,SAAS,IAAI;AAAA,IAC5C;AAEA,WAAO,eAAe,KAAK,OAAO,UAAU,QAAQ,GAAG;AAAA;AAAA,MAErD,OAAO,cAAc,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC;AAAA,MACpD,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,SAAiB;AAC5B,UAAM,WAAW,iBAAiB,OAAO;AACzC,UAAM,OAAO,KAAK,MAAM,QAAQ;AAChC,SAAK,gBAAgB,UAAU,SAAS,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;AAAA,EACvE;AACF;",
|
|
6
6
|
"names": ["normalizeRefName"]
|
|
7
7
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { OptionsManager } from './OptionsManager.js';
|
|
2
|
-
import type { OptionObject } from './OptionsManager.js';
|
|
1
|
+
import { type OptionObject, OptionsManager } from './OptionsManager.js';
|
|
3
2
|
export type ResponsiveOptionObject = OptionObject & {
|
|
4
3
|
responsive?: boolean;
|
|
5
4
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { useResize } from "../../services/ResizeService.js";
|
|
2
|
+
import { isDev } from "../../utils/is.js";
|
|
3
|
+
import { __getPropertyName, OptionsManager } from "./OptionsManager.js";
|
|
4
4
|
import { features } from "../features.js";
|
|
5
5
|
class ResponsiveOptionsManager extends OptionsManager {
|
|
6
6
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../packages/js-toolkit/Base/managers/ResponsiveOptionsManager.ts"],
|
|
4
|
-
"sourcesContent": ["import {
|
|
5
|
-
"mappings": "AAAA,SAAS,
|
|
4
|
+
"sourcesContent": ["import { useResize } from '../../services/ResizeService.js';\nimport { isDev } from '../../utils/is.js';\nimport { __getPropertyName, type OptionObject, OptionsManager } from './OptionsManager.js';\nimport { features } from '../features.js';\n\nexport type ResponsiveOptionObject = OptionObject & { responsive?: boolean };\n\n/**\n * Class options to manage options as data attributes on an HTML element.\n */\nexport class ResponsiveOptionsManager<T> extends OptionsManager<T> {\n /**\n * Get an option value.\n *\n * @param {string} name The option name.\n * @param {ResponsiveOptionObject} config The option configuration.\n * @return {any}\n */\n get(name: string, config: ResponsiveOptionObject) {\n if (!config.responsive) {\n return super.get(name, config);\n }\n\n return super.get(this.__getResponsiveName(name), config);\n }\n\n /**\n * Set an option value.\n *\n * @param {string} name The option name.\n * @param {any} value The new value.\n * @param {ResponsiveOptionObject} config The option configuration.\n */\n set(name: string, value: unknown, config: ResponsiveOptionObject) {\n if (!config.responsive) {\n super.set(name, value, config);\n return;\n }\n\n if (isDev) {\n console.warn(`[${this.__base.$id}]`, 'Responsive options are read-only.');\n }\n }\n\n /**\n * Get the currently active responsive name of an option.\n *\n * @param {ResponsiveOptionsManager} that\n * @param {string} name The default name of the option.\n * @return {string} The responsive name if one matches the current breakpoint, the default name otherwise.\n */\n __getResponsiveName(name: string) {\n const { breakpoint } = useResize().props();\n\n if (!breakpoint) {\n return name;\n }\n\n let responsiveName = name;\n const propertyName = __getPropertyName(name).toLowerCase();\n const regex = new RegExp(`${propertyName}:(.+)$`, 'i');\n const attributes = features.get('attributes');\n const dataOptionRegExp = new RegExp(`^${attributes.option}-`);\n\n for (const optionName of this.__element.getAttributeNames()) {\n if (regex.test(optionName)) {\n const [, breakpoints] = optionName.match(regex);\n const isInBreakpoint = breakpoints.split(':').includes(breakpoint);\n if (isInBreakpoint) {\n responsiveName = optionName.replace(dataOptionRegExp, '');\n }\n }\n }\n\n return responsiveName;\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,iBAAiB;AAC1B,SAAS,aAAa;AACtB,SAAS,mBAAsC,sBAAsB;AACrE,SAAS,gBAAgB;AAOlB,MAAM,iCAAoC,eAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQjE,IAAI,MAAc,QAAgC;AAChD,QAAI,CAAC,OAAO,YAAY;AACtB,aAAO,MAAM,IAAI,MAAM,MAAM;AAAA,IAC/B;AAEA,WAAO,MAAM,IAAI,KAAK,oBAAoB,IAAI,GAAG,MAAM;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,MAAc,OAAgB,QAAgC;AAChE,QAAI,CAAC,OAAO,YAAY;AACtB,YAAM,IAAI,MAAM,OAAO,MAAM;AAC7B;AAAA,IACF;AAEA,QAAI,OAAO;AACT,cAAQ,KAAK,IAAI,KAAK,OAAO,GAAG,KAAK,mCAAmC;AAAA,IAC1E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,oBAAoB,MAAc;AAChC,UAAM,EAAE,WAAW,IAAI,UAAU,EAAE,MAAM;AAEzC,QAAI,CAAC,YAAY;AACf,aAAO;AAAA,IACT;AAEA,QAAI,iBAAiB;AACrB,UAAM,eAAe,kBAAkB,IAAI,EAAE,YAAY;AACzD,UAAM,QAAQ,IAAI,OAAO,GAAG,YAAY,UAAU,GAAG;AACrD,UAAM,aAAa,SAAS,IAAI,YAAY;AAC5C,UAAM,mBAAmB,IAAI,OAAO,IAAI,WAAW,MAAM,GAAG;AAE5D,eAAW,cAAc,KAAK,UAAU,kBAAkB,GAAG;AAC3D,UAAI,MAAM,KAAK,UAAU,GAAG;AAC1B,cAAM,CAAC,EAAE,WAAW,IAAI,WAAW,MAAM,KAAK;AAC9C,cAAM,iBAAiB,YAAY,MAAM,GAAG,EAAE,SAAS,UAAU;AACjE,YAAI,gBAAgB;AAClB,2BAAiB,WAAW,QAAQ,kBAAkB,EAAE;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import type { ServiceInterface } from '../../services/AbstractService.js';
|
|
2
|
+
import { type KeyServiceInterface, useKey } from '../../services/KeyService.js';
|
|
3
|
+
import { type PointerServiceInterface, usePointer } from '../../services/PointerService.js';
|
|
4
|
+
import { type RafServiceInterface, useRaf } from '../../services/RafService.js';
|
|
5
|
+
import { type ResizeServiceInterface, useResize } from '../../services/ResizeService.js';
|
|
6
|
+
import { type ScrollServiceInterface, useScroll } from '../../services/ScrollService.js';
|
|
3
7
|
import { AbstractManager } from './AbstractManager.js';
|
|
4
8
|
declare const SERVICES_MAP: {
|
|
5
9
|
scrolled: typeof useScroll;
|