ngx-tethys 19.0.5 → 19.0.7
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/CHANGELOG.md +20 -0
- package/anchor/anchor-link.component.d.ts +2 -1
- package/anchor/anchor.component.d.ts +2 -1
- package/anchor/anchor.token.d.ts +9 -0
- package/carousel/carousel.component.d.ts +2 -1
- package/carousel/carousel.token.d.ts +7 -0
- package/carousel/engine/carousel-base.d.ts +3 -3
- package/carousel/engine/carousel-fade.d.ts +2 -2
- package/carousel/engine/carousel-noop.d.ts +2 -2
- package/carousel/engine/carousel-slide.d.ts +2 -2
- package/collapse/collapse-item.component.d.ts +2 -1
- package/collapse/collapse.component.d.ts +5 -5
- package/collapse/collapse.token.d.ts +15 -0
- package/core/theme/enum.d.ts +5 -0
- package/core/theme/index.d.ts +1 -0
- package/core/theme/store.d.ts +1 -1
- package/core/theme/theme.d.ts +0 -5
- package/date-picker/standard-types.d.ts +7 -2
- package/drag-drop/drag-drop.service.d.ts +2 -2
- package/drag-drop/{drop-container.class.d.ts → drag-drop.token.d.ts} +12 -7
- package/drag-drop/drag-handle.directive.d.ts +2 -1
- package/drag-drop/drag-ref.d.ts +3 -5
- package/drag-drop/drag.directive.d.ts +3 -3
- package/drag-drop/drop-container.directive.d.ts +1 -1
- package/drag-drop/index.d.ts +1 -1
- package/fesm2022/ngx-tethys-anchor.mjs +17 -4
- package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
- package/fesm2022/ngx-tethys-carousel.mjs +15 -3
- package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
- package/fesm2022/ngx-tethys-collapse.mjs +90 -77
- package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
- package/fesm2022/ngx-tethys-core.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-drag-drop.mjs +0 -3
- package/fesm2022/ngx-tethys-drag-drop.mjs.map +1 -1
- package/fesm2022/ngx-tethys-grid.mjs +11 -10
- package/fesm2022/ngx-tethys-grid.mjs.map +1 -1
- package/fesm2022/ngx-tethys-guider.mjs +41 -46
- package/fesm2022/ngx-tethys-guider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-i18n.mjs +51 -54
- package/fesm2022/ngx-tethys-i18n.mjs.map +1 -1
- package/fesm2022/ngx-tethys-image.mjs +17 -4
- package/fesm2022/ngx-tethys-image.mjs.map +1 -1
- package/fesm2022/ngx-tethys-list.mjs.map +1 -1
- package/fesm2022/ngx-tethys-message.mjs +2 -2
- package/fesm2022/ngx-tethys-message.mjs.map +1 -1
- package/fesm2022/ngx-tethys-notify.mjs +2 -2
- package/fesm2022/ngx-tethys-notify.mjs.map +1 -1
- package/fesm2022/ngx-tethys-radio.mjs +118 -108
- package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
- package/fesm2022/ngx-tethys-resizable.mjs +1 -0
- package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
- package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
- package/fesm2022/ngx-tethys-shared.mjs +3 -18
- package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
- package/fesm2022/ngx-tethys-table.mjs.map +1 -1
- package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree.mjs +0 -3
- package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
- package/fesm2022/ngx-tethys-util.mjs +4 -8
- package/fesm2022/ngx-tethys-util.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/grid/grid.type.d.ts +5 -0
- package/grid/index.d.ts +1 -0
- package/grid/thy-grid-item.component.d.ts +1 -1
- package/grid/thy-grid.component.d.ts +1 -11
- package/guider/guider-manager.d.ts +2 -1
- package/guider/guider-ref.d.ts +6 -6
- package/guider/guider-step-ref.d.ts +3 -4
- package/guider/guider.interface.d.ts +26 -0
- package/i18n/i18n.service.d.ts +1 -1
- package/i18n/index.d.ts +2 -5
- package/i18n/locale.d.ts +1 -7
- package/i18n/locales/index.d.ts +5 -0
- package/i18n/util.d.ts +3 -0
- package/image/image-group.component.d.ts +4 -4
- package/image/image.directive.d.ts +2 -1
- package/image/image.token.d.ts +17 -0
- package/list/selection/selection-list.d.ts +2 -1
- package/list/selection/selection.interface.d.ts +2 -3
- package/message/abstract/abstract-message-queue.service.d.ts +2 -2
- package/message/abstract/abstract-message-ref.d.ts +6 -2
- package/package.json +1 -1
- package/radio/group/radio-group.component.d.ts +2 -1
- package/radio/radio.component.d.ts +3 -3
- package/radio/radio.token.d.ts +12 -0
- package/resizable/interface.d.ts +5 -0
- package/resizable/resizable.directive.d.ts +6 -18
- package/resizable/resizable.service.d.ts +1 -1
- package/resizable/resize-handle.component.d.ts +1 -6
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/segment/segment-item.component.d.ts +2 -1
- package/segment/segment.token.d.ts +10 -4
- package/shared/index.d.ts +1 -0
- package/shared/option/list-option/list-option.component.d.ts +10 -5
- package/shared/option/option.component.d.ts +1 -3
- package/shared/option/option.token.d.ts +11 -11
- package/shared/shared.type.d.ts +1 -0
- package/table/index.d.ts +1 -0
- package/table/styles/table.scss +9 -1
- package/table/table-skeleton.component.d.ts +11 -3
- package/table/table.component.d.ts +1 -3
- package/table/table.type.d.ts +3 -0
- package/timeline/index.d.ts +1 -0
- package/timeline/timeline-item.component.d.ts +1 -1
- package/timeline/timeline.component.d.ts +1 -1
- package/timeline/timeline.type.d.ts +1 -0
- package/tree/index.d.ts +0 -1
- package/tree/tree-abstract.d.ts +1 -1
- package/tree/tree-node.component.d.ts +17 -8
- package/tree/tree.class.d.ts +53 -1
- package/tree/tree.component.d.ts +1 -1
- package/tree/tree.pipe.d.ts +1 -1
- package/tree/tree.service.d.ts +4 -10
- package/tree/tree-node.class.d.ts +0 -29
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-guider.mjs","sources":["../../../src/guider/guider-manager.ts","../../../src/guider/utils.ts","../../../src/guider/guider-step-ref.ts","../../../src/guider/guider.class.ts","../../../src/guider/guider-ref.ts","../../../src/guider/guider.service.ts","../../../src/guider/guider.directive.ts","../../../src/guider/guider-hint/guider-hint.component.ts","../../../src/guider/guider-hint/guider-hint.component.html","../../../src/guider/guider.module.ts","../../../src/guider/ngx-tethys-guider.ts"],"sourcesContent":["import { ThyGuiderRef } from './guider-ref';\nimport { Injectable } from '@angular/core';\n\n/**\n * @public\n * @order 60\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ThyGuiderManager {\n private targetListMap = {};\n\n private thyGuiderRef: ThyGuiderRef;\n\n private activeStepKey: string;\n\n constructor() {}\n\n public updateActive(key: string, guiderRef: ThyGuiderRef) {\n this.activeStepKey = key;\n this.thyGuiderRef = guiderRef;\n }\n\n public addStepTarget(key: string, el: HTMLElement) {\n this.targetListMap[key] = el;\n }\n\n public removeStepTarget(key: string) {\n delete this.targetListMap[key];\n }\n\n public getActiveTarget(key: string): HTMLElement {\n return this.targetListMap[key];\n }\n\n public getActive(): { key: string; guiderRef: ThyGuiderRef } {\n return {\n key: this.activeStepKey,\n guiderRef: this.thyGuiderRef\n };\n }\n}\n","import { SafeAny } from 'ngx-tethys/types';\nimport { isArray, isNumber, isObject } from 'ngx-tethys/util';\n\nexport function isPositionDataType(target: any): target is { x: number; y: number } {\n if (isObject(target) && !isArray(target)) {\n if (isNumber((target as SafeAny).x) && isNumber((target as SafeAny).y)) {\n return true;\n }\n }\n return false;\n}\n","import { Overlay } from '@angular/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport { Inject, Renderer2, RendererFactory2 } from '@angular/core';\nimport { ThyPopover, ThyPopoverConfig, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { coerceArray, isArray, isNull, isString, isUndefinedOrNull } from 'ngx-tethys/util';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { ThyGuiderManager } from './guider-manager';\nimport { ThyGuiderRef } from './guider-ref';\nimport { ThyGuiderStep } from './guider.class';\nimport { isPositionDataType } from './utils';\n\nconst pointContainerSize = 28;\n\n/**\n * @public\n * @order 50\n */\nexport class ThyGuiderStepRef {\n private renderer: Renderer2;\n\n private lastPointerContainer: any;\n\n private lastTargetElement: Element;\n\n private targetElementObserver: Subscription;\n\n private lastTipContainer: any;\n\n private guiderRef: ThyGuiderRef;\n\n private lastPopoverRef: ThyPopoverRef<any>;\n\n constructor(\n public step: ThyGuiderStep,\n public stepIndex: number,\n private readonly rendererFactory: RendererFactory2,\n private popover: ThyPopover,\n private guiderManager: ThyGuiderManager,\n private overlay: Overlay,\n @Inject(DOCUMENT) private document: Document\n ) {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n\n public show(guiderRef: ThyGuiderRef) {\n this.guiderRef = guiderRef;\n this.createPoint(this.step, guiderRef);\n }\n\n public dispose() {\n this.removeLastPointContainer();\n this.removeTip();\n }\n\n private getTargetElement(step: ThyGuiderStep) {\n let targetElement: HTMLElement;\n\n if (step.target && !isPositionDataType(step.target)) {\n const target = [...coerceArray(step.target)];\n\n while (target.length && isUndefinedOrNull(targetElement)) {\n targetElement = this.document.querySelector(target.shift());\n }\n } else {\n targetElement = this.guiderManager.getActiveTarget(step.key);\n }\n return targetElement;\n }\n\n private createPoint(step: ThyGuiderStep, guiderRef: ThyGuiderRef) {\n // target 为空并且 guiderManager 中的 targetMap 也没有此step 的 key,或者 target 直接为 坐标数组\n // 则执行无 target 的显示\n if (!this.isTipHasTarget(step)) {\n this.createTip(this.step);\n return;\n }\n\n const targetElement = this.getTargetElement(step);\n\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && isNull(targetElement)) {\n throw new Error(`there is no target called ${coerceArray(step.target).join(' or ')}`);\n }\n this.targetElementObserver = fromEvent(targetElement, 'click').subscribe(() => {\n guiderRef.targetClicked().next(step);\n });\n const positionValue = targetElement?.style?.position;\n if (!positionValue || positionValue === 'static') {\n this.renderer.setStyle(targetElement, 'position', 'relative');\n }\n this.setStyleForPointContainer(step, targetElement);\n }\n\n private setStyleForPointContainer(step: ThyGuiderStep, targetElement: Element) {\n const pointPosition = this.getPointPosition(step, targetElement);\n const pointContainer = this.setPointPosition(pointPosition);\n\n this.renderPoint(targetElement, pointContainer);\n }\n\n private getPointPosition(step: ThyGuiderStep, targetElement: Element): [number, number] {\n const targetElementClientRect = targetElement.getBoundingClientRect();\n const { width: targetElementWidth, height: targetElementHeight } = targetElementClientRect;\n const pointOffset = step.pointOffset;\n // 只通过 pointOffset 控制 point 的位置,默认在 target 的右下角,\n // offset 的基点也为默认位置\n return [targetElementWidth + pointOffset[0], targetElementHeight + pointOffset[1]];\n }\n\n private setPointPosition(pointPosition: [number, number]) {\n const currentPointContainer = this.renderer.createElement('div');\n\n this.renderer.addClass(currentPointContainer, 'thy-guider-highlight-container');\n if (this.guiderRef.config.pointClass) {\n this.addPointClass(currentPointContainer, this.guiderRef.config.pointClass);\n }\n this.renderer.setStyle(currentPointContainer, 'position', 'absolute');\n this.renderer.setStyle(currentPointContainer, 'left', pointPosition[0] + 'px');\n this.renderer.setStyle(currentPointContainer, 'top', pointPosition[1] + 'px');\n this.renderer.setStyle(currentPointContainer, 'transform', 'translate(-100%,-100%)');\n\n return currentPointContainer;\n }\n\n private addPointClass(el: any, pointClass: string | string[]) {\n if (isString(pointClass)) {\n this.renderer.addClass(el, pointClass);\n }\n if (isArray(pointClass)) {\n pointClass.forEach(classItem => {\n this.renderer.addClass(el, classItem);\n });\n }\n }\n\n private renderPoint(targetElement: Element, pointContainer: any) {\n this.renderer.appendChild(targetElement, pointContainer);\n this.lastPointerContainer = pointContainer;\n this.lastTargetElement = targetElement;\n this.createTip(this.step);\n }\n\n private removeLastPointContainer() {\n if (this.lastPointerContainer) {\n this.renderer.removeChild(this.document.body, this.lastPointerContainer);\n this.lastPointerContainer = undefined;\n }\n }\n\n private createTip(step: ThyGuiderStep) {\n if (this.isTipHasTarget(step)) {\n this.tipWithTarget(step);\n } else {\n this.tipWithoutTarget(step);\n }\n }\n\n private tipWithoutTarget(step: ThyGuiderStep) {\n const position = this.getTipPosition(step);\n this.lastPopoverRef = this.popover.open(this.guiderRef.config.hintComponent, {\n origin: null,\n originPosition: position,\n originActiveClass: '',\n panelClass: this.guiderRef.config.hintClass || '',\n backdropClosable: false,\n hasBackdrop: false,\n manualClosure: true,\n initialState: {\n guiderRef: this.guiderRef,\n stepRef: this\n },\n scrollStrategy: this.overlay.scrollStrategies.block()\n });\n }\n\n private getTipPosition(step: ThyGuiderStep): { x: number; y: number } {\n if (isPositionDataType(step.target)) {\n return step.target;\n }\n return this.guiderRef.config.defaultPosition;\n }\n\n private createTipContainer() {\n const tipContainer = this.renderer.createElement('div');\n this.renderer.addClass(tipContainer, 'thy-guider-content-container');\n this.renderer.setStyle(tipContainer, 'position', 'absolute');\n this.renderer.setStyle(tipContainer, 'top', '0px');\n this.renderer.setStyle(tipContainer, 'right', '0px');\n this.renderer.setStyle(tipContainer, 'bottom', '0px');\n this.renderer.setStyle(tipContainer, 'left', '0px');\n return tipContainer;\n }\n\n private tipWithTarget(step: ThyGuiderStep) {\n const targetElement = this.getTargetElement(step);\n const hintContainer = this.createTipContainer();\n\n this.renderer.appendChild(targetElement, hintContainer);\n this.lastTipContainer = hintContainer;\n\n const popoverConfig = {\n origin: hintContainer,\n placement: step.hintPlacement,\n panelClass: this.guiderRef.config.hintClass || '',\n backdropClosable: false,\n hasBackdrop: false,\n manualClosure: true,\n initialState: {\n guiderRef: this.guiderRef,\n stepRef: this\n },\n scrollStrategy: this.overlay.scrollStrategies.block()\n } as ThyPopoverConfig<any>;\n\n const pointPosition = this.getPointPosition(step, targetElement);\n const hintOffset = this.getTipOffset(step, pointPosition, targetElement);\n if (hintOffset) {\n popoverConfig.offset = hintOffset;\n }\n this.lastPopoverRef = this.popover.open(this.guiderRef.config.hintComponent, popoverConfig);\n }\n\n private getTipOffset(step: ThyGuiderStep, pointPosition: [number, number], targetElement: Element): number {\n const hintPlacement = step.hintPlacement;\n const targetElementClientRect = targetElement.getBoundingClientRect();\n const { width: targetElementWidth, height: targetElementHeight } = targetElementClientRect;\n let hintOffset: number = step.hintOffset || 0;\n const pointXAxisOffset = pointPosition[0];\n const pointYAxisOffset = pointPosition[1];\n\n if (hintPlacement.startsWith('top')) {\n if (pointYAxisOffset < pointContainerSize) {\n hintOffset = hintOffset + Math.abs(pointYAxisOffset) + pointContainerSize;\n }\n } else if (hintPlacement.startsWith('bottom')) {\n if (pointYAxisOffset > targetElementHeight) {\n hintOffset = hintOffset + (pointYAxisOffset - targetElementHeight) + 10; // 10 为空隙量\n }\n } else if (hintPlacement.startsWith('left')) {\n if (pointXAxisOffset < 0) {\n hintOffset = hintOffset + Math.abs(pointXAxisOffset) + pointContainerSize;\n }\n } else if (hintPlacement.startsWith('right')) {\n if (pointXAxisOffset > targetElementWidth) {\n hintOffset = hintOffset + (pointXAxisOffset - targetElementWidth) + 10; // 10 为空隙量\n }\n }\n return hintOffset;\n }\n\n private removeTip() {\n if (this.lastPopoverRef) {\n this.lastPopoverRef.close();\n this.lastPopoverRef = undefined;\n }\n if (this.lastTipContainer) {\n this.renderer.removeChild(this.document.body, this.lastTipContainer);\n this.lastTipContainer = undefined;\n }\n if (this.lastTargetElement && this.targetElementObserver) {\n this.targetElementObserver.unsubscribe();\n this.lastTargetElement = undefined;\n this.targetElementObserver = undefined;\n }\n }\n\n private isTipHasTarget(step: ThyGuiderStep): boolean {\n if (step.target) {\n return !isPositionDataType(step.target);\n } else {\n return !!this.guiderManager.getActiveTarget(step.key);\n }\n }\n}\n","import { Type } from '@angular/core';\nimport { ThyPlacement } from 'ngx-tethys/core';\n\n/**\n * @public\n * @order 30\n */\nexport interface ThyGuiderStep<TData = any> {\n /**\n * 步骤的唯一标识符\n */\n key: string;\n\n /**\n * 步骤的目标DOM selectors,如果为 [number,number] 类型则是相对浏览器视窗的位置\n * @type string | string[] | { x: number; y: number }\n */\n target?: string | string[] | { x: number; y: number };\n\n /**\n * 新手引导内容组件的值\n */\n data: TData;\n\n /**\n * 步骤对应的路由\n */\n route?: string;\n\n /**\n * 当前步骤内容组件基于 target 元素的方位\n */\n hintPlacement?: ThyPlacement;\n\n /**\n * 当前步骤内容组件基于位置的偏移量(与 popover 中 offset 相同作用)\n */\n hintOffset?: number;\n\n /**\n * 当前步骤高亮圆圈基于默认位置的偏移量\n */\n pointOffset?: [number, number];\n}\n\n/**\n * 新手引导服务的配置项\n * @public\n * @order 20\n */\nexport class ThyGuiderConfig {\n /**\n * 新手引导内容组件\n */\n hintComponent?: Type<unknown>;\n\n /**\n * 新手引导步骤信息\n * @type ThyGuiderStep[]\n */\n steps: ThyGuiderStep[];\n\n /**\n * 新手引导内容组件基于 target 元素的方位\n */\n hintPlacement?: ThyPlacement;\n\n /**\n * 新手引导内容组件默认位置(基于浏览器视窗,优先级小于 hintPlacement\n */\n defaultPosition?: { x: number; y: number };\n\n /**\n * 新手引导高亮圆圈基于默认位置的偏移量\n */\n pointOffset?: [number, number];\n\n /**\n * 新手引导内容组件基于位置的偏移量(与 popover 中 offset 相同作用)\n */\n hintOffset?: number;\n\n /**\n * 新手引导弹窗的自定义类\n * @type string | string[]\n */\n hintClass?: string | string[];\n\n /**\n * 新手引导point的自定义类\n * @type string | string[]\n */\n pointClass?: string | string[];\n}\n\nexport const defaultGuiderPositionConfig = {\n hintComponent: null as Type<unknown>,\n hintPlacement: 'rightBottom',\n defaultPosition: { x: 0, y: 0 },\n pointOffset: [0, 0],\n hintOffset: 4\n};\n","import { Router } from '@angular/router';\nimport { helpers } from 'ngx-tethys/util';\nimport { DOCUMENT } from '@angular/common';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { ThyGuiderManager } from './guider-manager';\nimport { ThyGuiderStepRef } from './guider-step-ref';\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\nimport { ThyGuiderConfig, ThyGuiderStep } from './guider.class';\nimport { Inject, NgZone, RendererFactory2 } from '@angular/core';\nimport { Overlay } from '@angular/cdk/overlay';\n\nexport class ThyGuiderRef {\n public steps: ThyGuiderStep[];\n\n private stepChange$: ReplaySubject<ThyGuiderStep> = new ReplaySubject<ThyGuiderStep>();\n\n private guiderEnded$ = new Subject();\n\n private closed$ = new Subject<ThyGuiderStep>();\n\n private targetClicked$ = new Subject<ThyGuiderStep>();\n\n private currentStep: ThyGuiderStep;\n\n private currentStepIndex: number;\n\n private stepsRef: ThyGuiderStepRef[];\n\n constructor(\n public config: ThyGuiderConfig,\n private rendererFactory: RendererFactory2,\n private popover: ThyPopover,\n private router: Router,\n private guiderManager: ThyGuiderManager,\n private ngZone: NgZone,\n private overlay: Overlay,\n @Inject(DOCUMENT) private document: any\n ) {\n this.stepsRef = config.steps.map((step, index) => {\n return new ThyGuiderStepRef(step, index, this.rendererFactory, this.popover, this.guiderManager, this.overlay, this.document);\n });\n this.steps = config.steps;\n }\n\n public stepChange(): Observable<ThyGuiderStep> {\n return this.stepChange$.asObservable();\n }\n\n public ended() {\n return this.guiderEnded$;\n }\n\n public closed() {\n return this.closed$;\n }\n\n public targetClicked() {\n return this.targetClicked$;\n }\n\n public start(startWith?: number) {\n this.to(startWith);\n\n return this.stepChange();\n }\n\n public next() {\n if (this.currentStepIndex + 1 > this.steps.length) {\n return;\n }\n this.to(this.currentStepIndex + 1);\n }\n\n public previous() {\n if (this.currentStepIndex - 1 < 0) {\n return;\n }\n\n this.to(this.currentStepIndex - 1);\n }\n\n public active(indexOrKey: number | string): void {\n if (helpers.isNumber(indexOrKey)) {\n this.to(indexOrKey as number);\n return;\n }\n if (helpers.isString(indexOrKey)) {\n const index = this.steps.findIndex(step => step.key === (indexOrKey as string));\n this.to(index);\n return;\n }\n }\n\n private to(index: number): void {\n this.removeExistedStep();\n\n if (!helpers.isNumber(index) || index >= this.steps.length || index < 0 || Number.isNaN(index)) {\n index = 0;\n }\n this.currentStep = this.steps[index];\n this.currentStepIndex = index;\n\n // update guiderManager\n this.guiderManager.updateActive(this.currentStep.key, this);\n if (this.currentStep.route && this.currentStep.route !== this.router.url) {\n this.ngZone.run(() => {\n this.router.navigateByUrl(this.currentStep.route);\n });\n return;\n }\n setTimeout(() => {\n this.drawStep();\n this.notifyStepClicked();\n }, 0);\n }\n\n public close() {\n this.removeManagerActiveKey();\n this.stepsRef[this.currentStepIndex]?.dispose();\n this.closed$.next(this.currentStep);\n }\n\n public end() {\n this.close();\n this.guiderEnded$.next(this.currentStep);\n this.notifyGuiderIsFinished();\n }\n\n private removeManagerActiveKey() {\n const activeKey = this.guiderManager.getActive().key;\n if (activeKey && this.steps.some(step => step.key === activeKey)) {\n this.guiderManager.updateActive('', undefined);\n }\n }\n\n private notifyStepClicked() {\n this.stepChange$.next(this.currentStep);\n }\n\n private drawStep() {\n this.removeExistedStep();\n this.stepsRef[this.currentStepIndex].show(this);\n }\n\n private notifyGuiderIsFinished() {\n this.stepChange$.complete();\n // this.targetClicked().unsubscribe();\n this.currentStepIndex = 0;\n }\n\n private removeExistedStep() {\n this.stepsRef[this.currentStepIndex]?.dispose();\n }\n}\n","import { Router } from '@angular/router';\nimport { helpers } from 'ngx-tethys/util';\nimport { DOCUMENT } from '@angular/common';\nimport { ThyGuiderRef } from './guider-ref';\nimport { NgZone, inject } from '@angular/core';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { ThyGuiderManager } from './guider-manager';\nimport { Injectable, RendererFactory2 } from '@angular/core';\nimport { ThyGuiderStep, ThyGuiderConfig, defaultGuiderPositionConfig } from './guider.class';\nimport { Overlay } from '@angular/cdk/overlay';\n\n/**\n * 新手引导服务\n * @public\n * @order 10\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ThyGuider {\n private readonly rendererFactory = inject(RendererFactory2);\n private popover = inject(ThyPopover);\n private router = inject(Router);\n private guiderManager = inject(ThyGuiderManager);\n private ngZone = inject(NgZone);\n private overlay = inject(Overlay);\n private document = inject(DOCUMENT);\n\n private guiderRef: ThyGuiderRef;\n\n private guiderRefs: ThyGuiderRef[] = [];\n\n public create(config: ThyGuiderConfig): ThyGuiderRef {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!config || !config?.steps || !helpers.isArray(config?.steps)) {\n throw new Error(`'config.steps' must be an array of length greater than 0`);\n }\n }\n const normalizeConfig = this.normalizeConfig(config);\n this.guiderRef = new ThyGuiderRef(\n normalizeConfig,\n this.rendererFactory,\n this.popover,\n this.router,\n this.guiderManager,\n this.ngZone,\n this.overlay,\n this.document\n );\n this.guiderRef.closed().subscribe(() => {\n const index = this.guiderRefs.findIndex(guiderRef => guiderRef === this.guiderRef);\n this.guiderRefs.splice(index, 1);\n });\n this.guiderRefs.push(this.guiderRef);\n return this.guiderRef;\n }\n\n private normalizeConfig(config: ThyGuiderConfig): ThyGuiderConfig {\n const normalizeConfig = Object.assign({}, defaultGuiderPositionConfig, config);\n normalizeConfig.steps = normalizeConfig.steps.map(step => {\n return this.normalizeStep(step, normalizeConfig);\n });\n return normalizeConfig;\n }\n\n private normalizeStep(step: ThyGuiderStep, config: ThyGuiderConfig): ThyGuiderStep {\n const tempStep = Object.assign(\n {\n hintPlacement: config.hintPlacement,\n hintOffset: config.hintOffset,\n pointOffset: config.pointOffset\n },\n step\n );\n\n return tempStep;\n }\n\n close() {\n if (this.guiderRefs.length > 0) {\n const lasGuiderRef = this.guiderRefs[this.guiderRefs.length - 1];\n if (lasGuiderRef) {\n lasGuiderRef.close();\n this.guiderRefs.pop();\n }\n }\n }\n}\n","import { ThyGuiderManager } from './guider-manager';\nimport { AfterViewInit, Directive, ElementRef, Input, OnDestroy, OnInit, NgZone, inject } from '@angular/core';\nimport { take } from 'rxjs/operators';\n\n/**\n * 标记新手引导的步骤的target,使用指令方式的新手引导支持多路由跳转\n * @name thyGuiderTarget\n * @order 40\n */\n@Directive({\n selector: '[thyGuiderTarget]',\n exportAs: 'thyGuiderTarget'\n})\nexport class ThyGuiderTargetDirective implements OnInit, OnDestroy, AfterViewInit {\n private guiderManager = inject(ThyGuiderManager);\n private el = inject(ElementRef);\n private ngZone = inject(NgZone);\n\n /**\n * 标记当前元素对应的新手引导中 step 的 key\n */\n @Input('thyGuiderTarget')\n target: string;\n\n ngOnInit() {\n this.guiderManager.addStepTarget(this.target, this.el.nativeElement);\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n const { key, guiderRef } = this.guiderManager.getActive();\n if (key === this.target) {\n const index = guiderRef.steps.findIndex(step => step.key === this.target);\n this.ngZone.run(() => {\n guiderRef.active(index);\n });\n }\n });\n }\n\n ngAfterViewInit() {}\n\n ngOnDestroy() {\n const { guiderRef } = this.guiderManager.getActive();\n if (guiderRef) {\n guiderRef.close();\n }\n this.guiderManager.removeStepTarget(this.target);\n }\n}\n","import { HostBinding, Component, OnInit, TemplateRef, Signal } from '@angular/core';\nimport { ThyGuiderRef } from '../guider-ref';\nimport { helpers } from 'ngx-tethys/util';\nimport { defaultGuiderPositionConfig, ThyGuiderStep } from '../guider.class';\nimport { ThyGuiderStepRef } from '../guider-step-ref';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { injectLocale, ThyGuiderLocale } from 'ngx-tethys/i18n';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-guider-hint',\n templateUrl: 'guider-hint.component.html',\n imports: [NgTemplateOutlet, NgClass]\n})\nexport class ThyGuiderHint implements OnInit {\n @HostBinding('class.thy-guider-tip-container') guiderHint = true;\n\n locale: Signal<ThyGuiderLocale> = injectLocale('guider');\n\n public guiderRef: ThyGuiderRef;\n\n public stepRef: ThyGuiderStepRef;\n\n public descriptionString: string;\n\n public descriptionTemplateRef: TemplateRef<any>;\n\n public currentStepIndex: number;\n\n constructor() {}\n\n ngOnInit() {\n this.setDescription(this.stepRef.step.data.description);\n }\n\n private setDescription(value: string | TemplateRef<any>) {\n if (helpers.isString(value)) {\n this.descriptionString = value as string;\n } else {\n this.descriptionTemplateRef = value as TemplateRef<any>;\n }\n }\n\n public jump() {\n this.guiderRef.end();\n }\n\n public prev() {\n this.guiderRef.previous();\n }\n\n public next() {\n this.guiderRef.next();\n }\n\n public end() {\n this.guiderRef.end();\n }\n\n public trackByFn(index: number, step: ThyGuiderStep) {\n return step.key || index;\n }\n}\n\ndefaultGuiderPositionConfig.hintComponent = ThyGuiderHint;\n","<div class=\"thy-guider-tip-top\">\n <img [src]=\"stepRef.step.data.image\" [alt]=\"stepRef.step.data.title\" />\n <a href=\"javascript:;\" class=\"thy-guider-tip-top-btn\" (click)=\"jump()\">{{ locale().skip }}</a>\n</div>\n<div class=\"thy-guider-tip-content\">\n <div class=\"thy-guider-tip-content-title\">{{ stepRef.step.data.title }}</div>\n <div class=\"thy-guider-tip-content-description\">\n @if (descriptionTemplateRef) {\n <ng-template [ngTemplateOutlet]=\"descriptionTemplateRef\"></ng-template>\n } @else {\n {{ descriptionString }}\n }\n </div>\n <div class=\"thy-guider-tip-step\">\n <div class=\"thy-guider-tip-step-pagination\">\n @for (step of guiderRef.steps; track trackByFn(i, step); let i = $index) {\n <span class=\"pagination-item\" [ngClass]=\"{ active: i === stepRef.stepIndex }\"></span>\n }\n </div>\n <div class=\"thy-guider-tip-step-btn\">\n @if (stepRef.stepIndex !== 0) {\n <a href=\"javascript:;\" (click)=\"prev()\" class=\"thy-guider-tip-step-pre\">{{ locale().prev }}</a>\n }\n @if (stepRef.stepIndex !== guiderRef.steps.length - 1) {\n <a href=\"javascript:;\" (click)=\"next()\" class=\"thy-guider-tip-step-next\">{{ locale().next }}</a>\n } @else {\n <a href=\"javascript:;\" (click)=\"end()\" class=\"thy-guider-tip-step-next\">{{ locale().finish }}</a>\n }\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { ThyGuider } from './guider.service';\nimport { CommonModule } from '@angular/common';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyButtonModule } from 'ngx-tethys/button';\nimport { ThyPopoverModule } from 'ngx-tethys/popover';\nimport { ThyGuiderTargetDirective } from './guider.directive';\nimport { ThyGuiderHint } from './guider-hint/guider-hint.component';\n\n@NgModule({\n imports: [CommonModule, ThySharedModule, ThyIconModule, ThyButtonModule, ThyPopoverModule, ThyGuiderHint, ThyGuiderTargetDirective],\n exports: [ThyGuiderHint, ThyGuiderTargetDirective],\n providers: [ThyGuider]\n})\nexport class ThyGuiderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-guider.mjs","sources":["../../../src/guider/utils.ts","../../../src/guider/guider-step-ref.ts","../../../src/guider/guider.class.ts","../../../src/guider/guider-ref.ts","../../../src/guider/guider-manager.ts","../../../src/guider/guider.service.ts","../../../src/guider/guider.directive.ts","../../../src/guider/guider-hint/guider-hint.component.ts","../../../src/guider/guider-hint/guider-hint.component.html","../../../src/guider/guider.module.ts","../../../src/guider/ngx-tethys-guider.ts"],"sourcesContent":["import { SafeAny } from 'ngx-tethys/types';\nimport { isArray, isNumber, isObject } from 'ngx-tethys/util';\n\nexport function isPositionDataType(target: any): target is { x: number; y: number } {\n if (isObject(target) && !isArray(target)) {\n if (isNumber((target as SafeAny).x) && isNumber((target as SafeAny).y)) {\n return true;\n }\n }\n return false;\n}\n","import { Overlay } from '@angular/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport { Inject, Renderer2, RendererFactory2 } from '@angular/core';\nimport { ThyPopover, ThyPopoverConfig, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { coerceArray, isArray, isNull, isString, isUndefinedOrNull } from 'ngx-tethys/util';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { IThyGuiderManager, IThyGuiderRef } from './guider.interface';\nimport { ThyGuiderStep } from './guider.class';\nimport { isPositionDataType } from './utils';\n\nconst pointContainerSize = 28;\n\n/**\n * @public\n * @order 50\n */\nexport class ThyGuiderStepRef {\n private renderer: Renderer2;\n\n private lastPointerContainer: any;\n\n private lastTargetElement: Element;\n\n private targetElementObserver: Subscription;\n\n private lastTipContainer: any;\n\n private guiderRef: IThyGuiderRef;\n\n private lastPopoverRef: ThyPopoverRef<any>;\n\n constructor(\n public step: ThyGuiderStep,\n public stepIndex: number,\n private readonly rendererFactory: RendererFactory2,\n private popover: ThyPopover,\n private guiderManager: IThyGuiderManager,\n private overlay: Overlay,\n @Inject(DOCUMENT) private document: Document\n ) {\n this.renderer = this.rendererFactory.createRenderer(null, null);\n }\n\n public show(guiderRef: IThyGuiderRef): void {\n this.guiderRef = guiderRef;\n this.createPoint(this.step, guiderRef);\n }\n\n public dispose() {\n this.removeLastPointContainer();\n this.removeTip();\n }\n\n private getTargetElement(step: ThyGuiderStep) {\n let targetElement: HTMLElement;\n\n if (step.target && !isPositionDataType(step.target)) {\n const target = [...coerceArray(step.target)];\n\n while (target.length && isUndefinedOrNull(targetElement)) {\n targetElement = this.document.querySelector(target.shift());\n }\n } else {\n targetElement = this.guiderManager.getActiveTarget(step.key);\n }\n return targetElement;\n }\n\n private createPoint(step: ThyGuiderStep, guiderRef: IThyGuiderRef) {\n // target 为空并且 guiderManager 中的 targetMap 也没有此step 的 key,或者 target 直接为 坐标数组\n // 则执行无 target 的显示\n if (!this.isTipHasTarget(step)) {\n this.createTip(this.step);\n return;\n }\n\n const targetElement = this.getTargetElement(step);\n\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && isNull(targetElement)) {\n throw new Error(`there is no target called ${coerceArray(step.target).join(' or ')}`);\n }\n this.targetElementObserver = fromEvent(targetElement, 'click').subscribe(() => {\n guiderRef.targetClicked().next(step);\n });\n const positionValue = targetElement?.style?.position;\n if (!positionValue || positionValue === 'static') {\n this.renderer.setStyle(targetElement, 'position', 'relative');\n }\n this.setStyleForPointContainer(step, targetElement);\n }\n\n private setStyleForPointContainer(step: ThyGuiderStep, targetElement: Element) {\n const pointPosition = this.getPointPosition(step, targetElement);\n const pointContainer = this.setPointPosition(pointPosition);\n\n this.renderPoint(targetElement, pointContainer);\n }\n\n private getPointPosition(step: ThyGuiderStep, targetElement: Element): [number, number] {\n const targetElementClientRect = targetElement.getBoundingClientRect();\n const { width: targetElementWidth, height: targetElementHeight } = targetElementClientRect;\n const pointOffset = step.pointOffset;\n // 只通过 pointOffset 控制 point 的位置,默认在 target 的右下角,\n // offset 的基点也为默认位置\n return [targetElementWidth + pointOffset[0], targetElementHeight + pointOffset[1]];\n }\n\n private setPointPosition(pointPosition: [number, number]) {\n const currentPointContainer = this.renderer.createElement('div');\n\n this.renderer.addClass(currentPointContainer, 'thy-guider-highlight-container');\n if (this.guiderRef.config.pointClass) {\n this.addPointClass(currentPointContainer, this.guiderRef.config.pointClass);\n }\n this.renderer.setStyle(currentPointContainer, 'position', 'absolute');\n this.renderer.setStyle(currentPointContainer, 'left', pointPosition[0] + 'px');\n this.renderer.setStyle(currentPointContainer, 'top', pointPosition[1] + 'px');\n this.renderer.setStyle(currentPointContainer, 'transform', 'translate(-100%,-100%)');\n\n return currentPointContainer;\n }\n\n private addPointClass(el: any, pointClass: string | string[]) {\n if (isString(pointClass)) {\n this.renderer.addClass(el, pointClass);\n }\n if (isArray(pointClass)) {\n pointClass.forEach(classItem => {\n this.renderer.addClass(el, classItem);\n });\n }\n }\n\n private renderPoint(targetElement: Element, pointContainer: any) {\n this.renderer.appendChild(targetElement, pointContainer);\n this.lastPointerContainer = pointContainer;\n this.lastTargetElement = targetElement;\n this.createTip(this.step);\n }\n\n private removeLastPointContainer() {\n if (this.lastPointerContainer) {\n this.renderer.removeChild(this.document.body, this.lastPointerContainer);\n this.lastPointerContainer = undefined;\n }\n }\n\n private createTip(step: ThyGuiderStep) {\n if (this.isTipHasTarget(step)) {\n this.tipWithTarget(step);\n } else {\n this.tipWithoutTarget(step);\n }\n }\n\n private tipWithoutTarget(step: ThyGuiderStep) {\n const position = this.getTipPosition(step);\n this.lastPopoverRef = this.popover.open(this.guiderRef.config.hintComponent, {\n origin: null,\n originPosition: position,\n originActiveClass: '',\n panelClass: this.guiderRef.config.hintClass || '',\n backdropClosable: false,\n hasBackdrop: false,\n manualClosure: true,\n initialState: {\n guiderRef: this.guiderRef,\n stepRef: this\n },\n scrollStrategy: this.overlay.scrollStrategies.block()\n });\n }\n\n private getTipPosition(step: ThyGuiderStep): { x: number; y: number } {\n if (isPositionDataType(step.target)) {\n return step.target;\n }\n return this.guiderRef.config.defaultPosition;\n }\n\n private createTipContainer() {\n const tipContainer = this.renderer.createElement('div');\n this.renderer.addClass(tipContainer, 'thy-guider-content-container');\n this.renderer.setStyle(tipContainer, 'position', 'absolute');\n this.renderer.setStyle(tipContainer, 'top', '0px');\n this.renderer.setStyle(tipContainer, 'right', '0px');\n this.renderer.setStyle(tipContainer, 'bottom', '0px');\n this.renderer.setStyle(tipContainer, 'left', '0px');\n return tipContainer;\n }\n\n private tipWithTarget(step: ThyGuiderStep) {\n const targetElement = this.getTargetElement(step);\n const hintContainer = this.createTipContainer();\n\n this.renderer.appendChild(targetElement, hintContainer);\n this.lastTipContainer = hintContainer;\n\n const popoverConfig = {\n origin: hintContainer,\n placement: step.hintPlacement,\n panelClass: this.guiderRef.config.hintClass || '',\n backdropClosable: false,\n hasBackdrop: false,\n manualClosure: true,\n initialState: {\n guiderRef: this.guiderRef,\n stepRef: this\n },\n scrollStrategy: this.overlay.scrollStrategies.block()\n } as ThyPopoverConfig<any>;\n\n const pointPosition = this.getPointPosition(step, targetElement);\n const hintOffset = this.getTipOffset(step, pointPosition, targetElement);\n if (hintOffset) {\n popoverConfig.offset = hintOffset;\n }\n this.lastPopoverRef = this.popover.open(this.guiderRef.config.hintComponent, popoverConfig);\n }\n\n private getTipOffset(step: ThyGuiderStep, pointPosition: [number, number], targetElement: Element): number {\n const hintPlacement = step.hintPlacement;\n const targetElementClientRect = targetElement.getBoundingClientRect();\n const { width: targetElementWidth, height: targetElementHeight } = targetElementClientRect;\n let hintOffset: number = step.hintOffset || 0;\n const pointXAxisOffset = pointPosition[0];\n const pointYAxisOffset = pointPosition[1];\n\n if (hintPlacement.startsWith('top')) {\n if (pointYAxisOffset < pointContainerSize) {\n hintOffset = hintOffset + Math.abs(pointYAxisOffset) + pointContainerSize;\n }\n } else if (hintPlacement.startsWith('bottom')) {\n if (pointYAxisOffset > targetElementHeight) {\n hintOffset = hintOffset + (pointYAxisOffset - targetElementHeight) + 10; // 10 为空隙量\n }\n } else if (hintPlacement.startsWith('left')) {\n if (pointXAxisOffset < 0) {\n hintOffset = hintOffset + Math.abs(pointXAxisOffset) + pointContainerSize;\n }\n } else if (hintPlacement.startsWith('right')) {\n if (pointXAxisOffset > targetElementWidth) {\n hintOffset = hintOffset + (pointXAxisOffset - targetElementWidth) + 10; // 10 为空隙量\n }\n }\n return hintOffset;\n }\n\n private removeTip() {\n if (this.lastPopoverRef) {\n this.lastPopoverRef.close();\n this.lastPopoverRef = undefined;\n }\n if (this.lastTipContainer) {\n this.renderer.removeChild(this.document.body, this.lastTipContainer);\n this.lastTipContainer = undefined;\n }\n if (this.lastTargetElement && this.targetElementObserver) {\n this.targetElementObserver.unsubscribe();\n this.lastTargetElement = undefined;\n this.targetElementObserver = undefined;\n }\n }\n\n private isTipHasTarget(step: ThyGuiderStep): boolean {\n if (step.target) {\n return !isPositionDataType(step.target);\n } else {\n return !!this.guiderManager.getActiveTarget(step.key);\n }\n }\n}\n","import { Type } from '@angular/core';\nimport { ThyPlacement } from 'ngx-tethys/core';\n\n/**\n * @public\n * @order 30\n */\nexport interface ThyGuiderStep<TData = any> {\n /**\n * 步骤的唯一标识符\n */\n key: string;\n\n /**\n * 步骤的目标DOM selectors,如果为 [number,number] 类型则是相对浏览器视窗的位置\n * @type string | string[] | { x: number; y: number }\n */\n target?: string | string[] | { x: number; y: number };\n\n /**\n * 新手引导内容组件的值\n */\n data: TData;\n\n /**\n * 步骤对应的路由\n */\n route?: string;\n\n /**\n * 当前步骤内容组件基于 target 元素的方位\n */\n hintPlacement?: ThyPlacement;\n\n /**\n * 当前步骤内容组件基于位置的偏移量(与 popover 中 offset 相同作用)\n */\n hintOffset?: number;\n\n /**\n * 当前步骤高亮圆圈基于默认位置的偏移量\n */\n pointOffset?: [number, number];\n}\n\n/**\n * 新手引导服务的配置项\n * @public\n * @order 20\n */\nexport class ThyGuiderConfig {\n /**\n * 新手引导内容组件\n */\n hintComponent?: Type<unknown>;\n\n /**\n * 新手引导步骤信息\n * @type ThyGuiderStep[]\n */\n steps: ThyGuiderStep[];\n\n /**\n * 新手引导内容组件基于 target 元素的方位\n */\n hintPlacement?: ThyPlacement;\n\n /**\n * 新手引导内容组件默认位置(基于浏览器视窗,优先级小于 hintPlacement\n */\n defaultPosition?: { x: number; y: number };\n\n /**\n * 新手引导高亮圆圈基于默认位置的偏移量\n */\n pointOffset?: [number, number];\n\n /**\n * 新手引导内容组件基于位置的偏移量(与 popover 中 offset 相同作用)\n */\n hintOffset?: number;\n\n /**\n * 新手引导弹窗的自定义类\n * @type string | string[]\n */\n hintClass?: string | string[];\n\n /**\n * 新手引导point的自定义类\n * @type string | string[]\n */\n pointClass?: string | string[];\n}\n\nexport const defaultGuiderPositionConfig = {\n hintComponent: null as Type<unknown>,\n hintPlacement: 'rightBottom',\n defaultPosition: { x: 0, y: 0 },\n pointOffset: [0, 0],\n hintOffset: 4\n};\n","import { Router } from '@angular/router';\nimport { helpers } from 'ngx-tethys/util';\nimport { DOCUMENT } from '@angular/common';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { IThyGuiderManager, IThyGuiderRef } from './guider.interface';\nimport { ThyGuiderStepRef } from './guider-step-ref';\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\nimport { ThyGuiderConfig, ThyGuiderStep } from './guider.class';\nimport { Inject, NgZone, RendererFactory2 } from '@angular/core';\nimport { Overlay } from '@angular/cdk/overlay';\n\nexport class ThyGuiderRef implements IThyGuiderRef {\n public steps: ThyGuiderStep[];\n\n private stepChange$: ReplaySubject<ThyGuiderStep> = new ReplaySubject<ThyGuiderStep>();\n\n private guiderEnded$ = new Subject<ThyGuiderStep>();\n\n private closed$ = new Subject<ThyGuiderStep>();\n\n private targetClicked$ = new Subject<ThyGuiderStep>();\n\n private currentStep: ThyGuiderStep;\n\n private currentStepIndex: number;\n\n private stepsRef: ThyGuiderStepRef[];\n\n constructor(\n public config: ThyGuiderConfig,\n private rendererFactory: RendererFactory2,\n private popover: ThyPopover,\n private router: Router,\n private guiderManager: IThyGuiderManager,\n private ngZone: NgZone,\n private overlay: Overlay,\n @Inject(DOCUMENT) private document: any\n ) {\n this.stepsRef = config.steps.map((step, index) => {\n return new ThyGuiderStepRef(step, index, this.rendererFactory, this.popover, this.guiderManager, this.overlay, this.document);\n });\n this.steps = config.steps;\n }\n\n public stepChange(): Observable<ThyGuiderStep> {\n return this.stepChange$.asObservable();\n }\n\n public ended(): Subject<ThyGuiderStep> {\n return this.guiderEnded$;\n }\n\n public closed(): Subject<ThyGuiderStep> {\n return this.closed$;\n }\n\n public targetClicked(): Subject<ThyGuiderStep> {\n return this.targetClicked$;\n }\n\n public start(startWith?: number) {\n this.to(startWith);\n\n return this.stepChange();\n }\n\n public next(): void {\n if (this.currentStepIndex + 1 > this.steps.length) {\n return;\n }\n this.to(this.currentStepIndex + 1);\n }\n\n public previous(): void {\n if (this.currentStepIndex - 1 < 0) {\n return;\n }\n\n this.to(this.currentStepIndex - 1);\n }\n\n public active(indexOrKey: number | string): void {\n if (helpers.isNumber(indexOrKey)) {\n this.to(indexOrKey as number);\n return;\n }\n if (helpers.isString(indexOrKey)) {\n const index = this.steps.findIndex(step => step.key === (indexOrKey as string));\n this.to(index);\n return;\n }\n }\n\n private to(index: number): void {\n this.removeExistedStep();\n\n if (!helpers.isNumber(index) || index >= this.steps.length || index < 0 || Number.isNaN(index)) {\n index = 0;\n }\n this.currentStep = this.steps[index];\n this.currentStepIndex = index;\n\n // update guiderManager\n this.guiderManager.updateActive(this.currentStep.key, this);\n if (this.currentStep.route && this.currentStep.route !== this.router.url) {\n this.ngZone.run(() => {\n this.router.navigateByUrl(this.currentStep.route);\n });\n return;\n }\n setTimeout(() => {\n this.drawStep();\n this.notifyStepClicked();\n }, 0);\n }\n\n public close(): void {\n this.removeManagerActiveKey();\n this.stepsRef[this.currentStepIndex]?.dispose();\n this.closed$.next(this.currentStep);\n }\n\n public end(): void {\n this.close();\n this.guiderEnded$.next(this.currentStep);\n this.notifyGuiderIsFinished();\n }\n\n private removeManagerActiveKey() {\n const activeKey = this.guiderManager.getActive().key;\n if (activeKey && this.steps.some(step => step.key === activeKey)) {\n this.guiderManager.updateActive('', undefined);\n }\n }\n\n private notifyStepClicked() {\n this.stepChange$.next(this.currentStep);\n }\n\n private drawStep() {\n this.removeExistedStep();\n this.stepsRef[this.currentStepIndex].show(this);\n }\n\n private notifyGuiderIsFinished() {\n this.stepChange$.complete();\n this.currentStepIndex = 0;\n }\n\n private removeExistedStep() {\n this.stepsRef[this.currentStepIndex]?.dispose();\n }\n}\n","import { ThyGuiderRef } from './guider-ref';\nimport { Injectable } from '@angular/core';\nimport { IThyGuiderManager } from './guider.interface';\n\n/**\n * @public\n * @order 60\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ThyGuiderManager implements IThyGuiderManager {\n private targetListMap: Record<string, HTMLElement> = {};\n\n private thyGuiderRef: ThyGuiderRef;\n\n private activeStepKey: string;\n\n constructor() {}\n\n public updateActive(key: string, guiderRef: ThyGuiderRef): void {\n this.activeStepKey = key;\n this.thyGuiderRef = guiderRef;\n }\n\n public addStepTarget(key: string, el: HTMLElement): void {\n this.targetListMap[key] = el;\n }\n\n public removeStepTarget(key: string): void {\n delete this.targetListMap[key];\n }\n\n public getActiveTarget(key: string): HTMLElement {\n return this.targetListMap[key];\n }\n\n public getActive(): { key: string; guiderRef: ThyGuiderRef } {\n return {\n key: this.activeStepKey,\n guiderRef: this.thyGuiderRef\n };\n }\n}\n","import { Router } from '@angular/router';\nimport { helpers } from 'ngx-tethys/util';\nimport { DOCUMENT } from '@angular/common';\nimport { ThyGuiderRef } from './guider-ref';\nimport { NgZone, inject } from '@angular/core';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { ThyGuiderManager } from './guider-manager';\nimport { Injectable, RendererFactory2 } from '@angular/core';\nimport { ThyGuiderStep, ThyGuiderConfig, defaultGuiderPositionConfig } from './guider.class';\nimport { Overlay } from '@angular/cdk/overlay';\n\n/**\n * 新手引导服务\n * @public\n * @order 10\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ThyGuider {\n private readonly rendererFactory = inject(RendererFactory2);\n private popover = inject(ThyPopover);\n private router = inject(Router);\n private guiderManager = inject(ThyGuiderManager);\n private ngZone = inject(NgZone);\n private overlay = inject(Overlay);\n private document = inject(DOCUMENT);\n\n private guiderRef: ThyGuiderRef;\n\n private guiderRefs: ThyGuiderRef[] = [];\n\n public create(config: ThyGuiderConfig): ThyGuiderRef {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!config || !config?.steps || !helpers.isArray(config?.steps)) {\n throw new Error(`'config.steps' must be an array of length greater than 0`);\n }\n }\n const normalizeConfig = this.normalizeConfig(config);\n this.guiderRef = new ThyGuiderRef(\n normalizeConfig,\n this.rendererFactory,\n this.popover,\n this.router,\n this.guiderManager,\n this.ngZone,\n this.overlay,\n this.document\n );\n this.guiderRef.closed().subscribe(() => {\n const index = this.guiderRefs.findIndex(guiderRef => guiderRef === this.guiderRef);\n this.guiderRefs.splice(index, 1);\n });\n this.guiderRefs.push(this.guiderRef);\n return this.guiderRef;\n }\n\n private normalizeConfig(config: ThyGuiderConfig): ThyGuiderConfig {\n const normalizeConfig = Object.assign({}, defaultGuiderPositionConfig, config);\n normalizeConfig.steps = normalizeConfig.steps.map(step => {\n return this.normalizeStep(step, normalizeConfig);\n });\n return normalizeConfig;\n }\n\n private normalizeStep(step: ThyGuiderStep, config: ThyGuiderConfig): ThyGuiderStep {\n const tempStep = Object.assign(\n {\n hintPlacement: config.hintPlacement,\n hintOffset: config.hintOffset,\n pointOffset: config.pointOffset\n },\n step\n );\n\n return tempStep;\n }\n\n close() {\n if (this.guiderRefs.length > 0) {\n const lasGuiderRef = this.guiderRefs[this.guiderRefs.length - 1];\n if (lasGuiderRef) {\n lasGuiderRef.close();\n this.guiderRefs.pop();\n }\n }\n }\n}\n","import { ThyGuiderManager } from './guider-manager';\nimport { AfterViewInit, Directive, ElementRef, Input, OnDestroy, OnInit, NgZone, inject } from '@angular/core';\nimport { take } from 'rxjs/operators';\n\n/**\n * 标记新手引导的步骤的target,使用指令方式的新手引导支持多路由跳转\n * @name thyGuiderTarget\n * @order 40\n */\n@Directive({\n selector: '[thyGuiderTarget]',\n exportAs: 'thyGuiderTarget'\n})\nexport class ThyGuiderTargetDirective implements OnInit, OnDestroy, AfterViewInit {\n private guiderManager = inject(ThyGuiderManager);\n private el = inject(ElementRef);\n private ngZone = inject(NgZone);\n\n /**\n * 标记当前元素对应的新手引导中 step 的 key\n */\n @Input('thyGuiderTarget')\n target: string;\n\n ngOnInit() {\n this.guiderManager.addStepTarget(this.target, this.el.nativeElement);\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n const { key, guiderRef } = this.guiderManager.getActive();\n if (key === this.target) {\n const index = guiderRef.steps.findIndex(step => step.key === this.target);\n this.ngZone.run(() => {\n guiderRef.active(index);\n });\n }\n });\n }\n\n ngAfterViewInit() {}\n\n ngOnDestroy() {\n const { guiderRef } = this.guiderManager.getActive();\n if (guiderRef) {\n guiderRef.close();\n }\n this.guiderManager.removeStepTarget(this.target);\n }\n}\n","import { HostBinding, Component, OnInit, TemplateRef, Signal } from '@angular/core';\nimport { ThyGuiderRef } from '../guider-ref';\nimport { helpers } from 'ngx-tethys/util';\nimport { defaultGuiderPositionConfig, ThyGuiderStep } from '../guider.class';\nimport { ThyGuiderStepRef } from '../guider-step-ref';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { injectLocale, ThyGuiderLocale } from 'ngx-tethys/i18n';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-guider-hint',\n templateUrl: 'guider-hint.component.html',\n imports: [NgTemplateOutlet, NgClass]\n})\nexport class ThyGuiderHint implements OnInit {\n @HostBinding('class.thy-guider-tip-container') guiderHint = true;\n\n locale: Signal<ThyGuiderLocale> = injectLocale('guider');\n\n public guiderRef: ThyGuiderRef;\n\n public stepRef: ThyGuiderStepRef;\n\n public descriptionString: string;\n\n public descriptionTemplateRef: TemplateRef<any>;\n\n public currentStepIndex: number;\n\n constructor() {}\n\n ngOnInit() {\n this.setDescription(this.stepRef.step.data.description);\n }\n\n private setDescription(value: string | TemplateRef<any>) {\n if (helpers.isString(value)) {\n this.descriptionString = value as string;\n } else {\n this.descriptionTemplateRef = value as TemplateRef<any>;\n }\n }\n\n public jump() {\n this.guiderRef.end();\n }\n\n public prev() {\n this.guiderRef.previous();\n }\n\n public next() {\n this.guiderRef.next();\n }\n\n public end() {\n this.guiderRef.end();\n }\n\n public trackByFn(index: number, step: ThyGuiderStep) {\n return step.key || index;\n }\n}\n\ndefaultGuiderPositionConfig.hintComponent = ThyGuiderHint;\n","<div class=\"thy-guider-tip-top\">\n <img [src]=\"stepRef.step.data.image\" [alt]=\"stepRef.step.data.title\" />\n <a href=\"javascript:;\" class=\"thy-guider-tip-top-btn\" (click)=\"jump()\">{{ locale().skip }}</a>\n</div>\n<div class=\"thy-guider-tip-content\">\n <div class=\"thy-guider-tip-content-title\">{{ stepRef.step.data.title }}</div>\n <div class=\"thy-guider-tip-content-description\">\n @if (descriptionTemplateRef) {\n <ng-template [ngTemplateOutlet]=\"descriptionTemplateRef\"></ng-template>\n } @else {\n {{ descriptionString }}\n }\n </div>\n <div class=\"thy-guider-tip-step\">\n <div class=\"thy-guider-tip-step-pagination\">\n @for (step of guiderRef.steps; track trackByFn(i, step); let i = $index) {\n <span class=\"pagination-item\" [ngClass]=\"{ active: i === stepRef.stepIndex }\"></span>\n }\n </div>\n <div class=\"thy-guider-tip-step-btn\">\n @if (stepRef.stepIndex !== 0) {\n <a href=\"javascript:;\" (click)=\"prev()\" class=\"thy-guider-tip-step-pre\">{{ locale().prev }}</a>\n }\n @if (stepRef.stepIndex !== guiderRef.steps.length - 1) {\n <a href=\"javascript:;\" (click)=\"next()\" class=\"thy-guider-tip-step-next\">{{ locale().next }}</a>\n } @else {\n <a href=\"javascript:;\" (click)=\"end()\" class=\"thy-guider-tip-step-next\">{{ locale().finish }}</a>\n }\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { ThyGuider } from './guider.service';\nimport { CommonModule } from '@angular/common';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyButtonModule } from 'ngx-tethys/button';\nimport { ThyPopoverModule } from 'ngx-tethys/popover';\nimport { ThyGuiderTargetDirective } from './guider.directive';\nimport { ThyGuiderHint } from './guider-hint/guider-hint.component';\n\n@NgModule({\n imports: [CommonModule, ThySharedModule, ThyIconModule, ThyButtonModule, ThyPopoverModule, ThyGuiderHint, ThyGuiderTargetDirective],\n exports: [ThyGuiderHint, ThyGuiderTargetDirective],\n providers: [ThyGuider]\n})\nexport class ThyGuiderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, signal, Injectable,
|
|
2
|
+
import { InjectionToken, inject, signal, Injectable, computed } from '@angular/core';
|
|
3
3
|
|
|
4
4
|
var ThyLocaleType;
|
|
5
5
|
(function (ThyLocaleType) {
|
|
@@ -10,45 +10,6 @@ var ThyLocaleType;
|
|
|
10
10
|
ThyLocaleType["deDe"] = "de-de";
|
|
11
11
|
})(ThyLocaleType || (ThyLocaleType = {}));
|
|
12
12
|
|
|
13
|
-
class ThyI18nService {
|
|
14
|
-
constructor() {
|
|
15
|
-
this.locales = {
|
|
16
|
-
[ThyLocaleType.zhHans]: inject(THY_I18N_ZH_HANS, { optional: true }) || zhHansLocale,
|
|
17
|
-
[ThyLocaleType.zhHant]: inject(THY_I18N_ZH_HANT, { optional: true }) || zhHantLocale,
|
|
18
|
-
[ThyLocaleType.enUs]: inject(THY_I18N_EN_US, { optional: true }) || enUsLocale,
|
|
19
|
-
[ThyLocaleType.jaJp]: inject(THY_I18N_JA_JP, { optional: true }) || jaJpLocale,
|
|
20
|
-
[ThyLocaleType.deDe]: inject(THY_I18N_DE_DE, { optional: true }) || deDeLocale
|
|
21
|
-
};
|
|
22
|
-
this.defaultLocaleId = normalizeLocale(inject(THY_I18N_LOCALE_ID, { optional: true })) || getDefaultLocaleId();
|
|
23
|
-
this.locale = signal(this.locales[this.defaultLocaleId]);
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* 设置语言
|
|
27
|
-
* @param id
|
|
28
|
-
*/
|
|
29
|
-
setLocale(id) {
|
|
30
|
-
let localeId = normalizeLocale(id);
|
|
31
|
-
if (localeId.includes('zh') && localeId !== ThyLocaleType.zhHans && localeId !== ThyLocaleType.zhHant) {
|
|
32
|
-
localeId = ThyLocaleType.zhHans;
|
|
33
|
-
}
|
|
34
|
-
this.locale.set(this.locales[localeId] || this.locales[this.defaultLocaleId] || {});
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* 获取当前语言
|
|
38
|
-
*/
|
|
39
|
-
getLocale() {
|
|
40
|
-
return this.locale;
|
|
41
|
-
}
|
|
42
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ThyI18nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
43
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ThyI18nService, providedIn: 'root' }); }
|
|
44
|
-
}
|
|
45
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ThyI18nService, decorators: [{
|
|
46
|
-
type: Injectable,
|
|
47
|
-
args: [{
|
|
48
|
-
providedIn: 'root'
|
|
49
|
-
}]
|
|
50
|
-
}] });
|
|
51
|
-
|
|
52
13
|
// Support configure the default locale id
|
|
53
14
|
const THY_I18N_LOCALE_ID = new InjectionToken('thy-i18n-locale-id');
|
|
54
15
|
// Support rewrite language package
|
|
@@ -58,23 +19,9 @@ const THY_I18N_EN_US = new InjectionToken('thy-i18n-en-us');
|
|
|
58
19
|
const THY_I18N_JA_JP = new InjectionToken('thy-i18n-ja-jp');
|
|
59
20
|
const THY_I18N_DE_DE = new InjectionToken('thy-i18n-de-de');
|
|
60
21
|
|
|
61
|
-
function injectLocale(key) {
|
|
62
|
-
const i18n = inject(ThyI18nService);
|
|
63
|
-
const allLocale = i18n.getLocale();
|
|
64
|
-
return computed(() => {
|
|
65
|
-
if (key) {
|
|
66
|
-
return allLocale()[key] ?? allLocale();
|
|
67
|
-
}
|
|
68
|
-
return allLocale();
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
22
|
function normalizeLocale(localeId) {
|
|
72
23
|
return localeId?.toLowerCase().replace(/_/g, '-');
|
|
73
24
|
}
|
|
74
|
-
/**
|
|
75
|
-
* 支持语言列表中获取默认语言
|
|
76
|
-
* return ThyLocaleType
|
|
77
|
-
*/
|
|
78
25
|
function getDefaultLocaleId() {
|
|
79
26
|
let defaultLocaleId = ThyLocaleType.zhHans;
|
|
80
27
|
const allLocales = [ThyLocaleType.zhHans, ThyLocaleType.zhHant, ThyLocaleType.enUs, ThyLocaleType.jaJp, ThyLocaleType.deDe];
|
|
@@ -770,6 +717,56 @@ var deDeLocale = {
|
|
|
770
717
|
}
|
|
771
718
|
};
|
|
772
719
|
|
|
720
|
+
class ThyI18nService {
|
|
721
|
+
constructor() {
|
|
722
|
+
this.locales = {
|
|
723
|
+
[ThyLocaleType.zhHans]: inject(THY_I18N_ZH_HANS, { optional: true }) || zhHansLocale,
|
|
724
|
+
[ThyLocaleType.zhHant]: inject(THY_I18N_ZH_HANT, { optional: true }) || zhHantLocale,
|
|
725
|
+
[ThyLocaleType.enUs]: inject(THY_I18N_EN_US, { optional: true }) || enUsLocale,
|
|
726
|
+
[ThyLocaleType.jaJp]: inject(THY_I18N_JA_JP, { optional: true }) || jaJpLocale,
|
|
727
|
+
[ThyLocaleType.deDe]: inject(THY_I18N_DE_DE, { optional: true }) || deDeLocale
|
|
728
|
+
};
|
|
729
|
+
this.defaultLocaleId = normalizeLocale(inject(THY_I18N_LOCALE_ID, { optional: true })) || getDefaultLocaleId();
|
|
730
|
+
this.locale = signal(this.locales[this.defaultLocaleId]);
|
|
731
|
+
}
|
|
732
|
+
/**
|
|
733
|
+
* 设置语言
|
|
734
|
+
* @param id
|
|
735
|
+
*/
|
|
736
|
+
setLocale(id) {
|
|
737
|
+
let localeId = normalizeLocale(id);
|
|
738
|
+
if (localeId.includes('zh') && localeId !== ThyLocaleType.zhHans && localeId !== ThyLocaleType.zhHant) {
|
|
739
|
+
localeId = ThyLocaleType.zhHans;
|
|
740
|
+
}
|
|
741
|
+
this.locale.set(this.locales[localeId] || this.locales[this.defaultLocaleId] || {});
|
|
742
|
+
}
|
|
743
|
+
/**
|
|
744
|
+
* 获取当前语言
|
|
745
|
+
*/
|
|
746
|
+
getLocale() {
|
|
747
|
+
return this.locale;
|
|
748
|
+
}
|
|
749
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ThyI18nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
750
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ThyI18nService, providedIn: 'root' }); }
|
|
751
|
+
}
|
|
752
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.6", ngImport: i0, type: ThyI18nService, decorators: [{
|
|
753
|
+
type: Injectable,
|
|
754
|
+
args: [{
|
|
755
|
+
providedIn: 'root'
|
|
756
|
+
}]
|
|
757
|
+
}] });
|
|
758
|
+
|
|
759
|
+
function injectLocale(key) {
|
|
760
|
+
const i18n = inject(ThyI18nService);
|
|
761
|
+
const allLocale = i18n.getLocale();
|
|
762
|
+
return computed(() => {
|
|
763
|
+
if (key) {
|
|
764
|
+
return allLocale()[key] ?? allLocale();
|
|
765
|
+
}
|
|
766
|
+
return allLocale();
|
|
767
|
+
});
|
|
768
|
+
}
|
|
769
|
+
|
|
773
770
|
/**
|
|
774
771
|
* Generated bundle index. Do not edit.
|
|
775
772
|
*/
|