@astryx-vue/lab 0.3.1 → 0.4.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/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { VNodeChild } from "vue";
2
- import { FieldStatusInput, IconSize, PopoverPlacement, SyntaxThemeDefinition } from "@astryx-vue/core";
1
+ import { MaybeRef, VNodeChild } from "vue";
2
+ import { FieldStatusInput, IconSize, PopoverAlignment, PopoverPlacement, SyntaxThemeDefinition } from "@astryx-vue/core";
3
3
  //#region src/CircularProgress/types.d.ts
4
4
  /** Variants a theme can extend through declaration merging in TypeScript. */
5
5
  interface CircularProgressVariantMap {
@@ -63,10 +63,10 @@ interface CircularProgressProps {
63
63
  //#endregion
64
64
  //#region src/CircularProgress/CircularProgress.vue.d.ts
65
65
  declare var __VLS_1$1: {};
66
- type __VLS_Slots$4 = {} & {
66
+ type __VLS_Slots$6 = {} & {
67
67
  default?: (props: typeof __VLS_1$1) => any;
68
68
  };
69
- declare const __VLS_base$4: import("vue").DefineComponent<CircularProgressProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<CircularProgressProps> & Readonly<{}>, {
69
+ declare const __VLS_base$6: import("vue").DefineComponent<CircularProgressProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<CircularProgressProps> & Readonly<{}>, {
70
70
  value: number;
71
71
  size: CircularProgressSize;
72
72
  max: number;
@@ -77,9 +77,9 @@ declare const __VLS_base$4: import("vue").DefineComponent<CircularProgressProps,
77
77
  isIndeterminate: boolean;
78
78
  isDisabled: boolean;
79
79
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
80
- declare const __VLS_export$9: __VLS_WithSlots$4<typeof __VLS_base$4, __VLS_Slots$4>;
81
- declare const _default: typeof __VLS_export$9;
82
- type __VLS_WithSlots$4<T, S> = T & {
80
+ declare const __VLS_export$11: __VLS_WithSlots$6<typeof __VLS_base$6, __VLS_Slots$6>;
81
+ declare const _default: typeof __VLS_export$11;
82
+ type __VLS_WithSlots$6<T, S> = T & {
83
83
  new (): {
84
84
  $slots: S;
85
85
  };
@@ -288,8 +288,8 @@ interface DiffViewerSlots {
288
288
  }
289
289
  //#endregion
290
290
  //#region src/DiffViewer/DiffViewer.vue.d.ts
291
- type __VLS_Slots$3 = DiffViewerSlots;
292
- declare const __VLS_base$3: import("vue").DefineComponent<DiffViewerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
291
+ type __VLS_Slots$5 = DiffViewerSlots;
292
+ declare const __VLS_base$5: import("vue").DefineComponent<DiffViewerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
293
293
  collapsedChange: (isCollapsed: boolean) => any;
294
294
  "update:isCollapsed": (isCollapsed: boolean) => any;
295
295
  lineNumberClick: (ref: DiffViewerLineRef, event: MouseEvent) => any;
@@ -313,9 +313,9 @@ declare const __VLS_base$3: import("vue").DefineComponent<DiffViewerProps, {}, {
313
313
  syntaxTheme: import("@astryx-vue/core").SyntaxThemeDefinition;
314
314
  renderLineAnnotation: (ref: DiffViewerLineRef) => import("vue").VNodeChild;
315
315
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
316
- declare const __VLS_export$8: __VLS_WithSlots$3<typeof __VLS_base$3, __VLS_Slots$3>;
317
- declare const _default$1: typeof __VLS_export$8;
318
- type __VLS_WithSlots$3<T, S> = T & {
316
+ declare const __VLS_export$10: __VLS_WithSlots$5<typeof __VLS_base$5, __VLS_Slots$5>;
317
+ declare const _default$1: typeof __VLS_export$10;
318
+ type __VLS_WithSlots$5<T, S> = T & {
319
319
  new (): {
320
320
  $slots: S;
321
321
  };
@@ -390,17 +390,17 @@ interface InfoTipProps {
390
390
  //#endregion
391
391
  //#region src/InfoTip/InfoTip.vue.d.ts
392
392
  declare var __VLS_13$1: {};
393
- type __VLS_Slots$2 = {} & {
393
+ type __VLS_Slots$4 = {} & {
394
394
  content?: (props: typeof __VLS_13$1) => any;
395
395
  };
396
- declare const __VLS_base$2: import("vue").DefineComponent<InfoTipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<InfoTipProps> & Readonly<{}>, {
396
+ declare const __VLS_base$4: import("vue").DefineComponent<InfoTipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<InfoTipProps> & Readonly<{}>, {
397
397
  label: string;
398
398
  size: import("@astryx-vue/core").IconSize;
399
399
  content: string;
400
400
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
401
- declare const __VLS_export$7: __VLS_WithSlots$2<typeof __VLS_base$2, __VLS_Slots$2>;
402
- declare const _default$2: typeof __VLS_export$7;
403
- type __VLS_WithSlots$2<T, S> = T & {
401
+ declare const __VLS_export$9: __VLS_WithSlots$4<typeof __VLS_base$4, __VLS_Slots$4>;
402
+ declare const _default$2: typeof __VLS_export$9;
403
+ type __VLS_WithSlots$4<T, S> = T & {
404
404
  new (): {
405
405
  $slots: S;
406
406
  };
@@ -515,7 +515,7 @@ interface ListInputEmits<T> {
515
515
  }
516
516
  //#endregion
517
517
  //#region src/ListInput/ListInput.vue.d.ts
518
- declare const __VLS_export$6: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$3<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
518
+ declare const __VLS_export$8: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$3<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
519
519
  props: import("vue").PublicProps & __VLS_PrettifyLocal$3<ListInputProps<T> & {
520
520
  "onUpdate:modelValue"?: ((value: T[]) => any) | undefined;
521
521
  onChange?: ((value: T[], change: ListInputChange<T>) => any) | undefined;
@@ -529,7 +529,7 @@ declare const __VLS_export$6: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_
529
529
  }>) => import("vue").VNode & {
530
530
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
531
531
  };
532
- declare const _default$3: typeof __VLS_export$6;
532
+ declare const _default$3: typeof __VLS_export$8;
533
533
  type __VLS_PrettifyLocal$3<T> = (T extends any ? { [K in keyof T]: T[K]; } : { [K in keyof T as K]: T[K]; }) & {};
534
534
  //#endregion
535
535
  //#region src/LogStream/types.d.ts
@@ -597,12 +597,12 @@ declare var __VLS_2: {
597
597
  }, __VLS_13: {
598
598
  entry: LogEntry;
599
599
  };
600
- type __VLS_Slots$1 = {} & {
600
+ type __VLS_Slots$3 = {} & {
601
601
  entry?: (props: typeof __VLS_2) => any;
602
602
  } & {
603
603
  detail?: (props: typeof __VLS_13) => any;
604
604
  };
605
- declare const __VLS_base$1: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
605
+ declare const __VLS_base$3: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
606
606
  "update:isFollowing": (value: boolean) => any;
607
607
  followChange: (following: boolean) => any;
608
608
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
@@ -614,9 +614,9 @@ declare const __VLS_base$1: import("vue").DefineComponent<__VLS_PublicProps, {},
614
614
  maxHeight: string | number;
615
615
  hasTimestamps: boolean;
616
616
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
617
- declare const __VLS_export$5: __VLS_WithSlots$1<typeof __VLS_base$1, __VLS_Slots$1>;
618
- declare const _default$4: typeof __VLS_export$5;
619
- type __VLS_WithSlots$1<T, S> = T & {
617
+ declare const __VLS_export$7: __VLS_WithSlots$3<typeof __VLS_base$3, __VLS_Slots$3>;
618
+ declare const _default$4: typeof __VLS_export$7;
619
+ type __VLS_WithSlots$3<T, S> = T & {
620
620
  new (): {
621
621
  $slots: S;
622
622
  };
@@ -689,7 +689,7 @@ interface MobileTokenizerEmits<T extends SearchableItem = SearchableItem> {
689
689
  }
690
690
  //#endregion
691
691
  //#region src/MobileTokenizer/MobileTokenizer.vue.d.ts
692
- declare const __VLS_export$4: <T extends SearchableItem>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$2<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
692
+ declare const __VLS_export$6: <T extends SearchableItem>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$2<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
693
693
  props: import("vue").PublicProps & __VLS_PrettifyLocal$2<MobileTokenizerProps<T> & {
694
694
  "onUpdate:modelValue"?: ((value: T[]) => any) | undefined;
695
695
  onChange?: ((value: T[], change: MobileTokenizerChange<T>) => any) | undefined;
@@ -706,7 +706,7 @@ declare const __VLS_export$4: <T extends SearchableItem>(__VLS_props: NonNullabl
706
706
  }>) => import("vue").VNode & {
707
707
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
708
708
  };
709
- declare const _default$5: typeof __VLS_export$4;
709
+ declare const _default$5: typeof __VLS_export$6;
710
710
  type __VLS_PrettifyLocal$2<T> = (T extends any ? { [K in keyof T]: T[K]; } : { [K in keyof T as K]: T[K]; }) & {};
711
711
  //#endregion
712
712
  //#region src/Stat/types.d.ts
@@ -746,20 +746,20 @@ interface StatProps {
746
746
  //#endregion
747
747
  //#region src/Stat/Stat.vue.d.ts
748
748
  declare var __VLS_1: {}, __VLS_3: {};
749
- type __VLS_Slots = {} & {
749
+ type __VLS_Slots$2 = {} & {
750
750
  default?: (props: typeof __VLS_1) => any;
751
751
  } & {
752
752
  media?: (props: typeof __VLS_3) => any;
753
753
  };
754
- declare const __VLS_base: import("vue").DefineComponent<StatProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<StatProps> & Readonly<{}>, {
754
+ declare const __VLS_base$2: import("vue").DefineComponent<StatProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<StatProps> & Readonly<{}>, {
755
755
  value: string;
756
756
  delta: StatDelta;
757
757
  description: string;
758
758
  size: StatSize;
759
759
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
760
- declare const __VLS_export$3: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
761
- declare const _default$7: typeof __VLS_export$3;
762
- type __VLS_WithSlots<T, S> = T & {
760
+ declare const __VLS_export$5: __VLS_WithSlots$2<typeof __VLS_base$2, __VLS_Slots$2>;
761
+ declare const _default$7: typeof __VLS_export$5;
762
+ type __VLS_WithSlots$2<T, S> = T & {
763
763
  new (): {
764
764
  $slots: S;
765
765
  };
@@ -900,13 +900,13 @@ interface PathPersonality {
900
900
  export declare function applyPersonality(d: string, personality: PathPersonality): string;
901
901
  //#endregion
902
902
  //#region src/SVGIcon/SVGIcon.vue.d.ts
903
- declare const __VLS_export$2: import("vue").DefineComponent<SVGIconProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<SVGIconProps> & Readonly<{}>, {
903
+ declare const __VLS_export$4: import("vue").DefineComponent<SVGIconProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<SVGIconProps> & Readonly<{}>, {
904
904
  size: SVGIconSize;
905
905
  strokeWidth: number;
906
906
  variation: SVGIconVariation;
907
907
  color: SVGIconColor;
908
908
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
909
- declare const _default$6: typeof __VLS_export$2;
909
+ declare const _default$6: typeof __VLS_export$4;
910
910
  //#endregion
911
911
  //#region src/SVGIcon/types-xif.d.ts
912
912
  /**
@@ -1048,6 +1048,79 @@ export declare const xifStar: XIFIcon;
1048
1048
  export declare const xifBellOverride: XIFIcon;
1049
1049
  export declare const xifExamples: XIFIcon[];
1050
1050
  //#endregion
1051
+ //#region src/Tour/context.d.ts
1052
+ type TourDismissSource = 'backdrop' | 'escape' | 'close' | 'skip' | 'complete';
1053
+ //#endregion
1054
+ //#region src/Tour/types.d.ts
1055
+ interface TourProps {
1056
+ /** 是否运行。关闭后步骤重置;调用方负责在 dismiss 后把它设为 false。 */
1057
+ isActive: boolean;
1058
+ /** 在目标周围压暗页面,保留目标亮区。 */
1059
+ hasBackdrop?: boolean;
1060
+ /** 显示“第几步 / 总步数”。 */
1061
+ isStepCountShown?: boolean;
1062
+ }
1063
+ interface TourEmits {
1064
+ dismiss: [source: TourDismissSource];
1065
+ }
1066
+ interface TourSlots {
1067
+ default?: () => unknown;
1068
+ }
1069
+ interface TourStepProps {
1070
+ /** 指向步骤目标元素的模板 ref。 */
1071
+ 'targetRef': MaybeRef<HTMLElement | null>;
1072
+ /** 步骤标题,同时作为弹层名称。 */
1073
+ 'heading': string;
1074
+ 'placement'?: PopoverPlacement;
1075
+ 'alignment'?: PopoverAlignment;
1076
+ 'data-testid'?: string;
1077
+ }
1078
+ interface TourStepSlots {
1079
+ default?: () => unknown;
1080
+ }
1081
+ //#endregion
1082
+ //#region src/Tour/Tour.vue.d.ts
1083
+ type __VLS_Slots$1 = TourSlots;
1084
+ declare const __VLS_base$1: import("vue").DefineComponent<TourProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
1085
+ dismiss: (source: TourDismissSource) => any;
1086
+ }, string, import("vue").PublicProps, Readonly<TourProps> & Readonly<{
1087
+ onDismiss?: ((source: TourDismissSource) => any) | undefined;
1088
+ }>, {
1089
+ hasBackdrop: boolean;
1090
+ isStepCountShown: boolean;
1091
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
1092
+ declare const __VLS_export$3: __VLS_WithSlots$1<typeof __VLS_base$1, __VLS_Slots$1>;
1093
+ declare const _default$8: typeof __VLS_export$3;
1094
+ type __VLS_WithSlots$1<T, S> = T & {
1095
+ new (): {
1096
+ $slots: S;
1097
+ };
1098
+ };
1099
+ //#endregion
1100
+ //#region src/Tour/TourStep.vue.d.ts
1101
+ type __VLS_Slots = TourStepSlots;
1102
+ declare const __VLS_base: any;
1103
+ declare const __VLS_export$2: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
1104
+ declare const _default$9: typeof __VLS_export$2;
1105
+ type __VLS_WithSlots<T, S> = T & {
1106
+ new (): {
1107
+ $slots: S;
1108
+ };
1109
+ };
1110
+ //#endregion
1111
+ //#region src/Tour/useTour.d.ts
1112
+ interface UseTourReturn {
1113
+ readonly activeStepIndex: number;
1114
+ readonly stepCount: number;
1115
+ readonly isFirstStep: boolean;
1116
+ readonly isLastStep: boolean;
1117
+ next: () => void;
1118
+ previous: () => void;
1119
+ dismiss: (source: TourDismissSource) => void;
1120
+ }
1121
+ /** 读取最近的 Tour。没有控制器时返回 null,由调用方决定是否跳过自定义 UI。 */
1122
+ export declare function useTour(): UseTourReturn | null;
1123
+ //#endregion
1051
1124
  //#region src/TransferList/types.d.ts
1052
1125
  /** 一个可搬运的选项。`value` 唯一,`label` 是可见文字,也是操作名的来源。 */
1053
1126
  interface TransferListOption<T extends string = string> {
@@ -1130,7 +1203,7 @@ declare const __VLS_export$1: <T extends string>(__VLS_props: NonNullable<Awaite
1130
1203
  }>) => import("vue").VNode & {
1131
1204
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
1132
1205
  };
1133
- declare const _default$8: typeof __VLS_export$1;
1206
+ declare const _default$10: typeof __VLS_export$1;
1134
1207
  type __VLS_PrettifyLocal$1<T> = (T extends any ? { [K in keyof T]: T[K]; } : { [K in keyof T as K]: T[K]; }) & {};
1135
1208
  //#endregion
1136
1209
  //#region src/TransferList/TransferListSelector.vue.d.ts
@@ -1186,7 +1259,7 @@ declare const __VLS_export: <T extends string>(__VLS_props: NonNullable<Awaited<
1186
1259
  }>) => import("vue").VNode & {
1187
1260
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
1188
1261
  };
1189
- declare const _default$9: typeof __VLS_export;
1262
+ declare const _default$11: typeof __VLS_export;
1190
1263
  type __VLS_PrettifyLocal<T> = (T extends any ? { [K in keyof T]: T[K]; } : { [K in keyof T as K]: T[K]; }) & {};
1191
1264
  //#endregion
1192
- export { _default as CircularProgress, type CircularProgressProps, type CircularProgressSize, type CircularProgressVariant, type CircularProgressVariantMap, type CreateDiffFileOptions, _default$1 as DiffViewer, type DiffViewerChangeIndicator, type DiffViewerEmits, type DiffViewerFile, type DiffViewerFileStatus, type DiffViewerHunk, type DiffViewerInlineHighlight, type DiffViewerLine, type DiffViewerLineKind, type DiffViewerLineRef, type DiffViewerProps, type DiffViewerSide, type DiffViewerSlots, type DiffViewerViewMode, type IconShape, type IconShapeRole, _default$2 as InfoTip, type InfoTipProps, type InfoTipSize, type InlineDiffGranularity, type InlineDiffResult, type InlineRange, _default$3 as ListInput, type ListInputChange, type ListInputColumn, type ListInputColumnWidth, type ListInputEmits, type ListInputProps, type ListInputRenderContext, type ListInputValueContext, type LogEntry, _default$4 as LogStream, type LogStreamEmits, type LogStreamLevel, type LogStreamProps, _default$5 as MobileTokenizer, type MobileTokenizerChange, type MobileTokenizerEmits, type MobileTokenizerProps, type PanelGroup, type PanelRow, type PathPersonality, _default$6 as SVGIcon, type SVGIconColor, type SVGIconDef, type SVGIconProps, type SVGIconSize, type SVGIconVariation, type SearchSource, type SearchableItem, _default$7 as Stat, type StatDelta, type StatDeltaDirection, type StatDeltaSentiment, type StatProps, type StatSize, _default$8 as TransferList, type TransferListEmits, type TransferListOption, type TransferListProps, _default$9 as TransferListSelector, type TransferListSlots, type XIFAnimate, type XIFIcon, type XIFPath, type XIFPersonality, type XIFSlot };
1265
+ export { _default as CircularProgress, type CircularProgressProps, type CircularProgressSize, type CircularProgressVariant, type CircularProgressVariantMap, type CreateDiffFileOptions, _default$1 as DiffViewer, type DiffViewerChangeIndicator, type DiffViewerEmits, type DiffViewerFile, type DiffViewerFileStatus, type DiffViewerHunk, type DiffViewerInlineHighlight, type DiffViewerLine, type DiffViewerLineKind, type DiffViewerLineRef, type DiffViewerProps, type DiffViewerSide, type DiffViewerSlots, type DiffViewerViewMode, type IconShape, type IconShapeRole, _default$2 as InfoTip, type InfoTipProps, type InfoTipSize, type InlineDiffGranularity, type InlineDiffResult, type InlineRange, _default$3 as ListInput, type ListInputChange, type ListInputColumn, type ListInputColumnWidth, type ListInputEmits, type ListInputProps, type ListInputRenderContext, type ListInputValueContext, type LogEntry, _default$4 as LogStream, type LogStreamEmits, type LogStreamLevel, type LogStreamProps, _default$5 as MobileTokenizer, type MobileTokenizerChange, type MobileTokenizerEmits, type MobileTokenizerProps, type PanelGroup, type PanelRow, type PathPersonality, _default$6 as SVGIcon, type SVGIconColor, type SVGIconDef, type SVGIconProps, type SVGIconSize, type SVGIconVariation, type SearchSource, type SearchableItem, _default$7 as Stat, type StatDelta, type StatDeltaDirection, type StatDeltaSentiment, type StatProps, type StatSize, _default$8 as Tour, type TourDismissSource, type TourEmits, type TourProps, type TourSlots, _default$9 as TourStep, type TourStepProps, type TourStepSlots, _default$10 as TransferList, type TransferListEmits, type TransferListOption, type TransferListProps, _default$11 as TransferListSelector, type TransferListSlots, type UseTourReturn, type XIFAnimate, type XIFIcon, type XIFPath, type XIFPersonality, type XIFSlot };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, getCurrentInstance, guardReactiveProps, h, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onScopeDispose, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, useAttrs, useId, useModel, useSlots, useTemplateRef, watch, withCtx } from "vue";
1
+ import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, getCurrentInstance, guardReactiveProps, h, inject, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onBeforeUnmount, onMounted, onScopeDispose, openBlock, provide, ref, renderList, renderSlot, resolveDynamicComponent, shallowRef, toDisplayString, toValue, unref, useAttrs, useId, useModel, useSlots, useTemplateRef, watch, withCtx } from "vue";
2
2
  import "../styles/circular-progress.css";
3
- import { AlertDialog, BottomSheet, Button, CheckboxIndicator, ComplexSelector, EmptyState, Field, FieldStatus, Icon, IconButton, Item, List, SyntaxTheme, Text, TextInput, Token, Tooltip, VisuallyHidden, tokenize, useAnnounce, useScrollableArea, useTranslator } from "@astryx-vue/core";
3
+ import { AlertDialog, BottomSheet, Button, CheckboxIndicator, ComplexSelector, EmptyState, Field, FieldStatus, HStack, Heading, Icon, IconButton, Item, List, Popover, SyntaxTheme, Text, TextInput, Token, Tooltip, VStack, VisuallyHidden, tokenize, useAnnounce, useScrollableArea, useTranslator } from "@astryx-vue/core";
4
4
  import "../styles/diff-viewer.css";
5
5
  import "../styles/info-tip.css";
6
6
  import "../styles/list-input.css";
@@ -8,6 +8,7 @@ import "../styles/log-stream.css";
8
8
  import "../styles/mobile-tokenizer.css";
9
9
  import "../styles/stat.css";
10
10
  import "../styles/svg-icon.css";
11
+ import "../styles/tour.css";
11
12
  import "../styles/transfer-list.css";
12
13
  import "../styles/transfer-list-selector.css";
13
14
  //#region src/CircularProgress/types.ts
@@ -32,8 +33,8 @@ function defaultFormatValueLabel(value, max) {
32
33
  }
33
34
  //#endregion
34
35
  //#region src/CircularProgress/CircularProgress.vue
35
- const _hoisted_1$13 = ["data-size", "data-variant"];
36
- const _hoisted_2$12 = { class: "astryx-circular-progress__ring" };
36
+ const _hoisted_1$15 = ["data-size", "data-variant"];
37
+ const _hoisted_2$13 = { class: "astryx-circular-progress__ring" };
37
38
  const _hoisted_3$11 = [
38
39
  "aria-valuenow",
39
40
  "aria-valuemin",
@@ -138,7 +139,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
138
139
  "astryx-circular-progress__visually-hidden": !showLabel.value,
139
140
  "astryx-circular-progress__label--disabled": showLabel.value && __props.isDisabled
140
141
  }])
141
- }, toDisplayString(__props.label), 3), createElementVNode("div", _hoisted_2$12, [(openBlock(), createElementBlock("svg", {
142
+ }, toDisplayString(__props.label), 3), createElementVNode("div", _hoisted_2$13, [(openBlock(), createElementBlock("svg", {
142
143
  class: normalizeClass(["astryx-circular-progress__svg", { "astryx-circular-progress__svg--indeterminate": __props.isIndeterminate }]),
143
144
  role: "progressbar",
144
145
  "aria-labelledby": labelId,
@@ -177,7 +178,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
177
178
  }, null, 8, _hoisted_6$8))], 10, _hoisted_3$11)), _ctx.$slots.default || hasCenterContent.value ? (openBlock(), createElementBlock("div", _hoisted_7$6, [renderSlot(_ctx.$slots, "default", {}, () => [hasCenterContent.value ? (openBlock(), createElementBlock("span", {
178
179
  key: 0,
179
180
  class: normalizeClass(["astryx-circular-progress__value", { "astryx-circular-progress__value--disabled": __props.isDisabled }])
180
- }, toDisplayString(valueText.value), 3)) : createCommentVNode("v-if", true)])])) : createCommentVNode("v-if", true)])], 16, _hoisted_1$13);
181
+ }, toDisplayString(valueText.value), 3)) : createCommentVNode("v-if", true)])])) : createCommentVNode("v-if", true)])], 16, _hoisted_1$15);
181
182
  };
182
183
  }
183
184
  });
@@ -409,13 +410,13 @@ var RenderVNode_default = defineComponent({
409
410
  });
410
411
  //#endregion
411
412
  //#region src/DiffViewer/DiffViewerTable.vue
412
- const _hoisted_1$12 = [
413
+ const _hoisted_1$14 = [
413
414
  "data-view-mode",
414
415
  "data-has-line-numbers",
415
416
  "data-change-indicator",
416
417
  "data-change-background"
417
418
  ];
418
- const _hoisted_2$11 = {
419
+ const _hoisted_2$12 = {
419
420
  key: 0,
420
421
  scope: "col",
421
422
  class: "astryx-diff-viewer__column-header"
@@ -530,7 +531,7 @@ const _hoisted_47 = {
530
531
  key: 0,
531
532
  class: "astryx-diff-viewer__annotation-content"
532
533
  };
533
- const _sfc_main$13 = /*@__PURE__*/ defineComponent({
534
+ const _sfc_main$16 = /*@__PURE__*/ defineComponent({
534
535
  name: "AstryxDiffViewerTable",
535
536
  __name: "DiffViewerTable",
536
537
  props: {
@@ -610,7 +611,7 @@ const _sfc_main$13 = /*@__PURE__*/ defineComponent({
610
611
  _cache[3] || (_cache[3] = createElementVNode("col", null, null, -1))
611
612
  ]),
612
613
  createElementVNode("thead", null, [createElementVNode("tr", null, [
613
- __props.hasLineNumbers ? (openBlock(), createElementBlock("th", _hoisted_2$11, [createVNode(unref(VisuallyHidden), null, {
614
+ __props.hasLineNumbers ? (openBlock(), createElementBlock("th", _hoisted_2$12, [createVNode(unref(VisuallyHidden), null, {
614
615
  default: withCtx(() => [..._cache[4] || (_cache[4] = [createTextVNode("Original line number", -1)])]),
615
616
  _: 1
616
617
  })])) : createCommentVNode("v-if", true),
@@ -687,7 +688,7 @@ const _sfc_main$13 = /*@__PURE__*/ defineComponent({
687
688
  class: "astryx-diff-viewer__annotation"
688
689
  }, [createElementVNode("div", _hoisted_18, [createVNode(unref(RenderVNode_default), { content: row.cell.note }, null, 8, ["content"])])], 8, _hoisted_17)])) : createCommentVNode("v-if", true)], 64))], 64);
689
690
  }), 128))])
690
- ], 14, _hoisted_1$12)) : (openBlock(), createElementBlock("table", {
691
+ ], 14, _hoisted_1$14)) : (openBlock(), createElementBlock("table", {
691
692
  key: 1,
692
693
  ref_key: "splitTable",
693
694
  ref: splitTable,
@@ -1228,8 +1229,8 @@ function buildSplitRows(file, cells) {
1228
1229
  }
1229
1230
  //#endregion
1230
1231
  //#region src/DiffViewer/DiffViewer.vue
1231
- const _hoisted_1$11 = ["data-view-mode"];
1232
- const _hoisted_2$10 = ["aria-expanded"];
1232
+ const _hoisted_1$13 = ["data-view-mode"];
1233
+ const _hoisted_2$11 = ["aria-expanded"];
1233
1234
  const _hoisted_3$9 = { class: "astryx-diff-viewer__path" };
1234
1235
  const _hoisted_4$8 = {
1235
1236
  key: 1,
@@ -1421,7 +1422,7 @@ const _sfc_main$1 = /*@__PURE__*/ defineComponent({
1421
1422
  icon: "chevronRight",
1422
1423
  size: "xsm",
1423
1424
  color: "inherit"
1424
- })], 2), createElementVNode("span", _hoisted_3$9, toDisplayString(displayPath.value), 1)], 8, _hoisted_2$10)) : displayPath.value != null ? (openBlock(), createElementBlock("span", _hoisted_4$8, toDisplayString(displayPath.value), 1)) : createCommentVNode("v-if", true),
1425
+ })], 2), createElementVNode("span", _hoisted_3$9, toDisplayString(displayPath.value), 1)], 8, _hoisted_2$11)) : displayPath.value != null ? (openBlock(), createElementBlock("span", _hoisted_4$8, toDisplayString(displayPath.value), 1)) : createCommentVNode("v-if", true),
1425
1426
  statusColor.value != null && statusLabel.value != null ? (openBlock(), createBlock(unref(Token), {
1426
1427
  key: 2,
1427
1428
  size: "sm",
@@ -1450,7 +1451,7 @@ const _sfc_main$1 = /*@__PURE__*/ defineComponent({
1450
1451
  }), [createElementVNode("div", {
1451
1452
  ref: unref(scroll).content,
1452
1453
  class: "astryx-diff-viewer__content"
1453
- }, [createVNode(_sfc_main$13, {
1454
+ }, [createVNode(_sfc_main$16, {
1454
1455
  "view-mode": __props.viewMode,
1455
1456
  "unified-rows": unifiedRows.value,
1456
1457
  "split-rows": splitRows.value,
@@ -1473,7 +1474,7 @@ const _sfc_main$1 = /*@__PURE__*/ defineComponent({
1473
1474
  "digits"
1474
1475
  ])], 512)], 16, _hoisted_12))], 64)) : createCommentVNode("v-if", true)], 8, _hoisted_9$3)]),
1475
1476
  _: 3
1476
- }, 16))], 16, _hoisted_1$11);
1477
+ }, 16))], 16, _hoisted_1$13);
1477
1478
  };
1478
1479
  }
1479
1480
  });
@@ -1771,7 +1772,7 @@ function parseUnifiedDiff(patch) {
1771
1772
  }
1772
1773
  //#endregion
1773
1774
  //#region src/InfoTip/InfoTip.vue
1774
- const _hoisted_1$10 = ["aria-label"];
1775
+ const _hoisted_1$12 = ["aria-label"];
1775
1776
  const _sfc_main$2 = /*@__PURE__*/ defineComponent({
1776
1777
  name: "AstryxInfoTip",
1777
1778
  __name: "InfoTip",
@@ -1793,7 +1794,7 @@ const _sfc_main$2 = /*@__PURE__*/ defineComponent({
1793
1794
  }, [createVNode(unref(Icon), {
1794
1795
  icon: "info",
1795
1796
  size: __props.size
1796
- }, null, 8, ["size"])], 8, _hoisted_1$10)]),
1797
+ }, null, 8, ["size"])], 8, _hoisted_1$12)]),
1797
1798
  _: 2
1798
1799
  }, [_ctx.$slots.content ? {
1799
1800
  name: "content",
@@ -1882,7 +1883,7 @@ var ListInputCell_default = defineComponent({
1882
1883
  });
1883
1884
  //#endregion
1884
1885
  //#region src/ListInput/ListInputRow.vue
1885
- const _hoisted_1$9 = [
1886
+ const _hoisted_1$11 = [
1886
1887
  "data-list-input-motion-key",
1887
1888
  "data-list-input-drop-target",
1888
1889
  "aria-describedby",
@@ -1890,7 +1891,7 @@ const _hoisted_1$9 = [
1890
1891
  "aria-posinset",
1891
1892
  "aria-setsize"
1892
1893
  ];
1893
- const _hoisted_2$9 = ["data-list-input-reorder-source", "data-list-input-row"];
1894
+ const _hoisted_2$10 = ["data-list-input-reorder-source", "data-list-input-row"];
1894
1895
  const _hoisted_3$8 = ["data-list-input-cell"];
1895
1896
  const _hoisted_4$7 = ["data-list-input-column-label", "data-list-input-repeated"];
1896
1897
  const _hoisted_5$6 = { class: "astryx-list-input__cell-content" };
@@ -1899,7 +1900,7 @@ const _hoisted_7$3 = {
1899
1900
  key: 0,
1900
1901
  class: "astryx-list-input__control-cell astryx-list-input__control-cell--reorder"
1901
1902
  };
1902
- const _sfc_main$12 = /*@__PURE__*/ defineComponent({
1903
+ const _sfc_main$15 = /*@__PURE__*/ defineComponent({
1903
1904
  name: "AstryxListInputRow",
1904
1905
  __name: "ListInputRow",
1905
1906
  props: {
@@ -2033,7 +2034,7 @@ const _sfc_main$12 = /*@__PURE__*/ defineComponent({
2033
2034
  "type",
2034
2035
  "message"
2035
2036
  ])) : createCommentVNode("v-if", true)
2036
- ], 10, _hoisted_2$9)], 8, _hoisted_1$9);
2037
+ ], 10, _hoisted_2$10)], 8, _hoisted_1$11);
2037
2038
  };
2038
2039
  }
2039
2040
  });
@@ -2323,14 +2324,14 @@ function useListReorder(options) {
2323
2324
  }
2324
2325
  //#endregion
2325
2326
  //#region src/ListInput/ListInput.vue
2326
- const _hoisted_1$8 = [
2327
+ const _hoisted_1$10 = [
2327
2328
  "aria-describedby",
2328
2329
  "aria-disabled",
2329
2330
  "aria-busy",
2330
2331
  "data-reorderable",
2331
2332
  "data-state"
2332
2333
  ];
2333
- const _hoisted_2$8 = ["aria-describedby"];
2334
+ const _hoisted_2$9 = ["aria-describedby"];
2334
2335
  const _hoisted_3$7 = {
2335
2336
  key: 0,
2336
2337
  "data-list-input-motion-key": "state:empty",
@@ -2623,7 +2624,7 @@ const _sfc_main$3 = /*@__PURE__*/ defineComponent({
2623
2624
  description: unref(t)("@astryx.listInput.emptyDescription", { itemName: __props.itemName }),
2624
2625
  "is-compact": ""
2625
2626
  }, null, 8, ["title", "description"])])) : createCommentVNode("v-if", true), (openBlock(true), createElementBlock(Fragment, null, renderList(unref(reorder).displayValue.value, (item, index) => {
2626
- return openBlock(), createBlock(_sfc_main$12, {
2627
+ return openBlock(), createBlock(_sfc_main$15, {
2627
2628
  key: itemKeyOf(item),
2628
2629
  item,
2629
2630
  index,
@@ -2665,7 +2666,7 @@ const _sfc_main$3 = /*@__PURE__*/ defineComponent({
2665
2666
  "item-status-id",
2666
2667
  "handlers"
2667
2668
  ]);
2668
- }), 128))], 8, _hoisted_2$8),
2669
+ }), 128))], 8, _hoisted_2$9),
2669
2670
  createElementVNode("div", _hoisted_4$6, [createElementVNode("div", _hoisted_5$5, [createVNode(unref(Button), {
2670
2671
  ref_key: "addButtonRef",
2671
2672
  ref: addButtonRef,
@@ -2689,7 +2690,7 @@ const _sfc_main$3 = /*@__PURE__*/ defineComponent({
2689
2690
  default: withCtx(() => [createTextVNode(toDisplayString(unref(t)("@astryx.listInput.reorderInstructions")), 1)]),
2690
2691
  _: 1
2691
2692
  })) : createCommentVNode("v-if", true)
2692
- ], 8, _hoisted_1$8), (openBlock(), createBlock(Teleport, { to: "body" }, [unref(reorder).previewStyle.value != null ? (openBlock(), createElementBlock("div", {
2693
+ ], 8, _hoisted_1$10), (openBlock(), createBlock(Teleport, { to: "body" }, [unref(reorder).previewStyle.value != null ? (openBlock(), createElementBlock("div", {
2693
2694
  key: 0,
2694
2695
  ref_key: "previewHost",
2695
2696
  ref: previewHost,
@@ -2714,8 +2715,8 @@ const _sfc_main$3 = /*@__PURE__*/ defineComponent({
2714
2715
  });
2715
2716
  //#endregion
2716
2717
  //#region src/LogStream/LogStreamRow.vue
2717
- const _hoisted_1$7 = ["data-level", "data-cols"];
2718
- const _hoisted_2$7 = {
2718
+ const _hoisted_1$9 = ["data-level", "data-cols"];
2719
+ const _hoisted_2$8 = {
2719
2720
  key: 0,
2720
2721
  class: "astryx-log-stream__time"
2721
2722
  };
@@ -2738,7 +2739,7 @@ const _hoisted_11 = {
2738
2739
  key: 0,
2739
2740
  class: "astryx-log-stream__detail"
2740
2741
  };
2741
- const _sfc_main$11 = /*@__PURE__*/ defineComponent({
2742
+ const _sfc_main$14 = /*@__PURE__*/ defineComponent({
2742
2743
  name: "AstryxLogStreamRow",
2743
2744
  __name: "LogStreamRow",
2744
2745
  props: {
@@ -2764,7 +2765,7 @@ const _sfc_main$11 = /*@__PURE__*/ defineComponent({
2764
2765
  "data-level": __props.entry.level,
2765
2766
  "data-cols": cols.value
2766
2767
  }, [
2767
- __props.hasTimestamps ? (openBlock(), createElementBlock("span", _hoisted_2$7, toDisplayString(__props.entry.timestamp), 1)) : createCommentVNode("v-if", true),
2768
+ __props.hasTimestamps ? (openBlock(), createElementBlock("span", _hoisted_2$8, toDisplayString(__props.entry.timestamp), 1)) : createCommentVNode("v-if", true),
2768
2769
  createElementVNode("span", _hoisted_3$6, toDisplayString(__props.entry.level), 1),
2769
2770
  __props.hasSource ? (openBlock(), createElementBlock("span", {
2770
2771
  key: 1,
@@ -2772,7 +2773,7 @@ const _sfc_main$11 = /*@__PURE__*/ defineComponent({
2772
2773
  title: __props.entry.source
2773
2774
  }, toDisplayString(__props.entry.source), 9, _hoisted_4$5)) : createCommentVNode("v-if", true),
2774
2775
  createElementVNode("span", _hoisted_5$4, toDisplayString(__props.entry.message), 1)
2775
- ], 8, _hoisted_1$7)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createElementVNode("button", {
2776
+ ], 8, _hoisted_1$9)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createElementVNode("button", {
2776
2777
  type: "button",
2777
2778
  class: "astryx-log-stream__row astryx-log-stream__row--button",
2778
2779
  "data-level": __props.entry.level,
@@ -2840,8 +2841,8 @@ function useLogFollow(options) {
2840
2841
  }
2841
2842
  //#endregion
2842
2843
  //#region src/LogStream/LogStream.vue
2843
- const _hoisted_1$6 = ["data-variant"];
2844
- const _hoisted_2$6 = ["aria-label", "aria-live"];
2844
+ const _hoisted_1$8 = ["data-variant"];
2845
+ const _hoisted_2$7 = ["aria-label", "aria-live"];
2845
2846
  const _sfc_main$4 = /*@__PURE__*/ defineComponent({
2846
2847
  name: "AstryxLogStream",
2847
2848
  inheritAttrs: false,
@@ -2908,7 +2909,7 @@ const _sfc_main$4 = /*@__PURE__*/ defineComponent({
2908
2909
  style: normalizeStyle(scrollerStyle.value),
2909
2910
  onScrollPassive: _cache[0] || (_cache[0] = (...args) => unref(handleScroll) && unref(handleScroll)(...args))
2910
2911
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.entries, (entry) => {
2911
- return renderSlot(_ctx.$slots, "entry", { entry }, () => [createVNode(_sfc_main$11, {
2912
+ return renderSlot(_ctx.$slots, "entry", { entry }, () => [createVNode(_sfc_main$14, {
2912
2913
  entry,
2913
2914
  "has-timestamps": __props.hasTimestamps,
2914
2915
  "has-source": hasSource.value,
@@ -2925,14 +2926,14 @@ const _sfc_main$4 = /*@__PURE__*/ defineComponent({
2925
2926
  "is-expanded",
2926
2927
  "onToggle"
2927
2928
  ])], void 0, entry.id);
2928
- }), 128))], 44, _hoisted_2$6),
2929
+ }), 128))], 44, _hoisted_2$7),
2929
2930
  !following.value && !unref(isAtBottom) && __props.entries.length > 0 ? (openBlock(), createElementBlock("button", {
2930
2931
  key: 0,
2931
2932
  type: "button",
2932
2933
  class: "astryx-log-stream__jump",
2933
2934
  onClick: _cache[1] || (_cache[1] = (...args) => unref(jumpToLatest) && unref(jumpToLatest)(...args))
2934
2935
  }, " Jump to latest ↓ ")) : createCommentVNode("v-if", true)
2935
- ], 16, _hoisted_1$6);
2936
+ ], 16, _hoisted_1$8);
2936
2937
  };
2937
2938
  }
2938
2939
  });
@@ -3040,12 +3041,12 @@ function useSheetSearch(options) {
3040
3041
  }
3041
3042
  //#endregion
3042
3043
  //#region src/MobileTokenizer/MobileTokenizer.vue
3043
- const _hoisted_1$5 = [
3044
+ const _hoisted_1$7 = [
3044
3045
  "aria-expanded",
3045
3046
  "aria-label",
3046
3047
  "aria-disabled"
3047
3048
  ];
3048
- const _hoisted_2$5 = {
3049
+ const _hoisted_2$6 = {
3049
3050
  key: 1,
3050
3051
  class: "astryx-mobile-tokenizer__trigger-placeholder"
3051
3052
  };
@@ -3240,7 +3241,7 @@ const _sfc_main$5 = /*@__PURE__*/ defineComponent({
3240
3241
  label: item.label,
3241
3242
  disabled: __props.isDisabled
3242
3243
  }, null, 8, ["label", "disabled"]);
3243
- }), 128)) : (openBlock(), createElementBlock("span", _hoisted_2$5, toDisplayString(__props.placeholder ?? ""), 1))], 8, _hoisted_1$5), !__props.isDisabled ? (openBlock(), createBlock(unref(BottomSheet), {
3244
+ }), 128)) : (openBlock(), createElementBlock("span", _hoisted_2$6, toDisplayString(__props.placeholder ?? ""), 1))], 8, _hoisted_1$7), !__props.isDisabled ? (openBlock(), createBlock(unref(BottomSheet), {
3244
3245
  key: 0,
3245
3246
  "is-open": isOpen.value,
3246
3247
  label: __props.label,
@@ -3370,8 +3371,8 @@ const DELTA_GLYPH_PATHS = {
3370
3371
  };
3371
3372
  //#endregion
3372
3373
  //#region src/Stat/Stat.vue
3373
- const _hoisted_1$4 = ["data-size"];
3374
- const _hoisted_2$4 = { class: "astryx-stat__label" };
3374
+ const _hoisted_1$6 = ["data-size"];
3375
+ const _hoisted_2$5 = { class: "astryx-stat__label" };
3375
3376
  const _hoisted_3$4 = { class: "astryx-stat__value-row" };
3376
3377
  const _hoisted_4$3 = { class: "astryx-stat__value" };
3377
3378
  const _hoisted_5$2 = ["data-sentiment"];
@@ -3420,7 +3421,7 @@ const _sfc_main$7 = /*@__PURE__*/ defineComponent({
3420
3421
  class: ["astryx-stat", unref(attrs).class],
3421
3422
  "data-size": __props.size
3422
3423
  }), [
3423
- createElementVNode("span", _hoisted_2$4, toDisplayString(__props.label), 1),
3424
+ createElementVNode("span", _hoisted_2$5, toDisplayString(__props.label), 1),
3424
3425
  createElementVNode("span", _hoisted_3$4, [createElementVNode("span", _hoisted_4$3, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.value), 1)])]), __props.delta != null && sentiment.value != null ? (openBlock(), createElementBlock("span", {
3425
3426
  key: 0,
3426
3427
  class: "astryx-stat__delta",
@@ -3432,7 +3433,7 @@ const _sfc_main$7 = /*@__PURE__*/ defineComponent({
3432
3433
  ], 8, _hoisted_5$2)) : createCommentVNode("v-if", true)]),
3433
3434
  __props.description != null ? (openBlock(), createElementBlock("span", _hoisted_9, toDisplayString(__props.description), 1)) : createCommentVNode("v-if", true),
3434
3435
  _ctx.$slots.media ? (openBlock(), createElementBlock("div", _hoisted_10, [renderSlot(_ctx.$slots, "media")])) : createCommentVNode("v-if", true)
3435
- ], 16, _hoisted_1$4);
3436
+ ], 16, _hoisted_1$6);
3436
3437
  };
3437
3438
  }
3438
3439
  });
@@ -4234,13 +4235,13 @@ function applyPersonality(d, personality) {
4234
4235
  }
4235
4236
  //#endregion
4236
4237
  //#region src/SVGIcon/SVGIcon.vue
4237
- const _hoisted_1$3 = [
4238
+ const _hoisted_1$5 = [
4238
4239
  "viewBox",
4239
4240
  "data-variation",
4240
4241
  "data-size",
4241
4242
  "data-color"
4242
4243
  ];
4243
- const _hoisted_2$3 = { key: 0 };
4244
+ const _hoisted_2$4 = { key: 0 };
4244
4245
  const _hoisted_3$3 = ["mask"];
4245
4246
  const _hoisted_4$2 = {
4246
4247
  key: 2,
@@ -4318,7 +4319,7 @@ const _sfc_main$6 = /*@__PURE__*/ defineComponent({
4318
4319
  "data-color": __props.color
4319
4320
  }, mergedAttrs.value, { style: svgStyle.value }), [
4320
4321
  createCommentVNode(" 遮罩:把次层的填充形状从主层里挖出带间隙的洞。 "),
4321
- useMask.value ? (openBlock(), createElementBlock("defs", _hoisted_2$3, [createElementVNode("mask", { id: maskId }, [_cache[0] || (_cache[0] = createElementVNode("rect", {
4322
+ useMask.value ? (openBlock(), createElementBlock("defs", _hoisted_2$4, [createElementVNode("mask", { id: maskId }, [_cache[0] || (_cache[0] = createElementVNode("rect", {
4322
4323
  width: "24",
4323
4324
  height: "24",
4324
4325
  fill: "white"
@@ -4348,7 +4349,7 @@ const _sfc_main$6 = /*@__PURE__*/ defineComponent({
4348
4349
  }), 128))])) : createCommentVNode("v-if", true), secondary.value.stroke.length > 0 ? (openBlock(), createElementBlock("g", _hoisted_6$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(secondary.value.stroke, (shape, index) => {
4349
4350
  return openBlock(), createBlock(resolveDynamicComponent(shape.type), mergeProps({ key: `secondary-stroke-${index}` }, { ref_for: true }, shape.attrs), null, 16);
4350
4351
  }), 128))])) : createCommentVNode("v-if", true)], 64)) : createCommentVNode("v-if", true)
4351
- ], 16, _hoisted_1$3);
4352
+ ], 16, _hoisted_1$5);
4352
4353
  };
4353
4354
  }
4354
4355
  });
@@ -4486,6 +4487,280 @@ const xifExamples = [
4486
4487
  xifBellOverride
4487
4488
  ];
4488
4489
  //#endregion
4490
+ //#region src/Tour/context.ts
4491
+ const TOUR_CONTEXT_KEY = Symbol("AstryxTour");
4492
+ //#endregion
4493
+ //#region src/Tour/Tour.vue
4494
+ const _sfc_main$8 = /*@__PURE__*/ defineComponent({
4495
+ name: "AstryxTour",
4496
+ __name: "Tour",
4497
+ props: {
4498
+ isActive: { type: Boolean },
4499
+ hasBackdrop: {
4500
+ type: Boolean,
4501
+ default: false
4502
+ },
4503
+ isStepCountShown: {
4504
+ type: Boolean,
4505
+ default: false
4506
+ }
4507
+ },
4508
+ emits: ["dismiss"],
4509
+ setup(__props, { emit: __emit }) {
4510
+ const props = __props;
4511
+ const emit = __emit;
4512
+ const stepIds = ref([]);
4513
+ const activeStepIndex = ref(0);
4514
+ const stepCount = computed(() => stepIds.value.length);
4515
+ const activeStepId = computed(() => props.isActive ? stepIds.value[activeStepIndex.value] ?? null : null);
4516
+ function registerStep(id) {
4517
+ if (!stepIds.value.includes(id)) stepIds.value.push(id);
4518
+ return () => {
4519
+ const index = stepIds.value.indexOf(id);
4520
+ if (index >= 0) stepIds.value.splice(index, 1);
4521
+ };
4522
+ }
4523
+ function next() {
4524
+ if (activeStepIndex.value < stepCount.value - 1) activeStepIndex.value += 1;
4525
+ else emit("dismiss", "complete");
4526
+ }
4527
+ function previous() {
4528
+ if (activeStepIndex.value > 0) activeStepIndex.value -= 1;
4529
+ }
4530
+ function dismiss(source) {
4531
+ emit("dismiss", source);
4532
+ }
4533
+ watch(() => props.isActive, (active) => {
4534
+ if (!active) activeStepIndex.value = 0;
4535
+ }, { flush: "sync" });
4536
+ watch(stepCount, (count) => {
4537
+ if (activeStepIndex.value >= count) activeStepIndex.value = Math.max(0, count - 1);
4538
+ });
4539
+ provide(TOUR_CONTEXT_KEY, {
4540
+ registerStep,
4541
+ activeStepId,
4542
+ activeStepIndex: computed(() => activeStepIndex.value),
4543
+ stepCount,
4544
+ isStepCountShown: computed(() => props.isStepCountShown),
4545
+ hasBackdrop: computed(() => props.hasBackdrop),
4546
+ onNext: next,
4547
+ onPrevious: previous,
4548
+ onDismiss: dismiss
4549
+ });
4550
+ return (_ctx, _cache) => {
4551
+ return renderSlot(_ctx.$slots, "default");
4552
+ };
4553
+ }
4554
+ });
4555
+ //#endregion
4556
+ //#region src/Tour/TourHighlight.vue
4557
+ const _hoisted_1$4 = ["data-testid"];
4558
+ const _sfc_main$13 = /*@__PURE__*/ defineComponent({
4559
+ __name: "TourHighlight",
4560
+ props: {
4561
+ rect: {},
4562
+ hasBackdrop: { type: Boolean }
4563
+ },
4564
+ emits: ["backdropClick"],
4565
+ setup(__props, { emit: __emit }) {
4566
+ const props = __props;
4567
+ const emit = __emit;
4568
+ function onBackdropPointerDown(event) {
4569
+ if (!props.hasBackdrop) return;
4570
+ event.preventDefault();
4571
+ event.stopPropagation();
4572
+ emit("backdropClick");
4573
+ }
4574
+ const highlightStyle = computed(() => props.rect == null ? void 0 : {
4575
+ top: `${props.rect.top - 4}px`,
4576
+ left: `${props.rect.left - 4}px`,
4577
+ width: `${props.rect.width + 8}px`,
4578
+ height: `${props.rect.height + 8}px`,
4579
+ borderRadius: props.rect.radius
4580
+ });
4581
+ return (_ctx, _cache) => {
4582
+ return openBlock(), createElementBlock("div", {
4583
+ class: normalizeClass(["astryx-tour-highlight-root", { "is-interactive": __props.hasBackdrop }]),
4584
+ "data-testid": __props.hasBackdrop ? "tour-backdrop" : void 0,
4585
+ "aria-hidden": "true",
4586
+ onPointerdown: onBackdropPointerDown
4587
+ }, [createElementVNode("div", {
4588
+ class: normalizeClass(["astryx-tour-highlight", {
4589
+ "has-backdrop": __props.hasBackdrop,
4590
+ "is-hidden": __props.rect == null
4591
+ }]),
4592
+ style: normalizeStyle(highlightStyle.value),
4593
+ "data-testid": "tour-highlight"
4594
+ }, null, 6)], 42, _hoisted_1$4);
4595
+ };
4596
+ }
4597
+ });
4598
+ //#endregion
4599
+ //#region src/Tour/TourStep.vue
4600
+ const _hoisted_1$3 = ["data-testid"];
4601
+ const _hoisted_2$3 = { key: 1 };
4602
+ const _sfc_main$9 = /*@__PURE__*/ defineComponent({
4603
+ name: "AstryxTourStep",
4604
+ __name: "TourStep",
4605
+ props: {
4606
+ targetRef: {},
4607
+ heading: {},
4608
+ placement: { default: "below" },
4609
+ alignment: { default: "start" },
4610
+ "data-testid": {}
4611
+ },
4612
+ setup(__props) {
4613
+ const props = __props;
4614
+ const slots = useSlots();
4615
+ const tour = inject(TOUR_CONTEXT_KEY, null);
4616
+ const id = `astryx-tour-step-${useId()}`;
4617
+ const isActiveStep = computed(() => tour?.activeStepId.value === id);
4618
+ const activeStepIndex = computed(() => tour?.activeStepIndex.value ?? 0);
4619
+ const stepCount = computed(() => tour?.stepCount.value ?? 0);
4620
+ const isFirstStep = computed(() => activeStepIndex.value <= 0);
4621
+ const isLastStep = computed(() => stepCount.value > 0 && activeStepIndex.value === stepCount.value - 1);
4622
+ const target = computed(() => toValue(props.targetRef));
4623
+ const rect = shallowRef(null);
4624
+ let unregister;
4625
+ function measure() {
4626
+ const element = target.value;
4627
+ if (element == null || !isActiveStep.value) {
4628
+ rect.value = null;
4629
+ return;
4630
+ }
4631
+ const box = element.getBoundingClientRect();
4632
+ rect.value = {
4633
+ top: box.top,
4634
+ left: box.left,
4635
+ width: box.width,
4636
+ height: box.height,
4637
+ radius: getComputedStyle(element).borderRadius || "0px"
4638
+ };
4639
+ }
4640
+ function stopMeasuring() {
4641
+ window.removeEventListener("scroll", measure, true);
4642
+ window.removeEventListener("resize", measure);
4643
+ }
4644
+ watch([isActiveStep, target], async ([active]) => {
4645
+ stopMeasuring();
4646
+ if (!active || tour == null) {
4647
+ rect.value = null;
4648
+ return;
4649
+ }
4650
+ await nextTick();
4651
+ measure();
4652
+ window.addEventListener("scroll", measure, true);
4653
+ window.addEventListener("resize", measure);
4654
+ }, {
4655
+ immediate: true,
4656
+ flush: "post"
4657
+ });
4658
+ onMounted(() => {
4659
+ unregister = tour?.registerStep(id);
4660
+ });
4661
+ onBeforeUnmount(() => {
4662
+ stopMeasuring();
4663
+ unregister?.();
4664
+ });
4665
+ function onOpenChange(open) {
4666
+ if (!open) tour?.onDismiss("close");
4667
+ }
4668
+ return (_ctx, _cache) => {
4669
+ return unref(tour) && isActiveStep.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createVNode(_sfc_main$13, {
4670
+ rect: rect.value,
4671
+ "has-backdrop": unref(tour).hasBackdrop.value,
4672
+ onBackdropClick: _cache[0] || (_cache[0] = ($event) => unref(tour).onDismiss("backdrop"))
4673
+ }, null, 8, ["rect", "has-backdrop"]), createVNode(unref(Popover), {
4674
+ anchor: target.value,
4675
+ "is-open": "",
4676
+ placement: __props.placement,
4677
+ alignment: __props.alignment,
4678
+ width: "fit-content",
4679
+ label: __props.heading,
4680
+ "has-light-dismiss": !unref(tour).hasBackdrop.value,
4681
+ "close-button-label": "Close tour",
4682
+ onOpenChange
4683
+ }, {
4684
+ content: withCtx(() => [createElementVNode("div", {
4685
+ class: "astryx-tour-step",
4686
+ "data-testid": props["data-testid"]
4687
+ }, [createVNode(unref(VStack), { gap: 1 }, {
4688
+ default: withCtx(() => [createVNode(unref(Heading), { level: 4 }, {
4689
+ default: withCtx(() => [createTextVNode(toDisplayString(__props.heading), 1)]),
4690
+ _: 1
4691
+ }), unref(slots).default ? (openBlock(), createBlock(unref(Text), {
4692
+ key: 0,
4693
+ type: "body"
4694
+ }, {
4695
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
4696
+ _: 3
4697
+ })) : createCommentVNode("v-if", true)]),
4698
+ _: 3
4699
+ }), createVNode(unref(HStack), {
4700
+ class: "astryx-tour-step__footer",
4701
+ gap: 2,
4702
+ "h-align": "between"
4703
+ }, {
4704
+ default: withCtx(() => [unref(tour).isStepCountShown.value && stepCount.value > 0 ? (openBlock(), createBlock(unref(Text), {
4705
+ key: 0,
4706
+ type: "supporting",
4707
+ color: "secondary"
4708
+ }, {
4709
+ default: withCtx(() => [createTextVNode(toDisplayString(activeStepIndex.value + 1) + " of " + toDisplayString(stepCount.value), 1)]),
4710
+ _: 1
4711
+ })) : (openBlock(), createElementBlock("span", _hoisted_2$3)), createVNode(unref(HStack), { gap: 2 }, {
4712
+ default: withCtx(() => [!isFirstStep.value ? (openBlock(), createBlock(unref(Button), {
4713
+ key: 0,
4714
+ variant: "ghost",
4715
+ size: "sm",
4716
+ label: "Back",
4717
+ onClick: unref(tour).onPrevious
4718
+ }, null, 8, ["onClick"])) : createCommentVNode("v-if", true), createVNode(unref(Button), {
4719
+ variant: "primary",
4720
+ size: "sm",
4721
+ label: isLastStep.value ? "Done" : "Next",
4722
+ onClick: unref(tour).onNext
4723
+ }, null, 8, ["label", "onClick"])]),
4724
+ _: 1
4725
+ })]),
4726
+ _: 1
4727
+ })], 8, _hoisted_1$3)]),
4728
+ _: 3
4729
+ }, 8, [
4730
+ "anchor",
4731
+ "placement",
4732
+ "alignment",
4733
+ "label",
4734
+ "has-light-dismiss"
4735
+ ])], 64)) : createCommentVNode("v-if", true);
4736
+ };
4737
+ }
4738
+ });
4739
+ //#endregion
4740
+ //#region src/Tour/useTour.ts
4741
+ /** 读取最近的 Tour。没有控制器时返回 null,由调用方决定是否跳过自定义 UI。 */
4742
+ function useTour() {
4743
+ const tour = inject(TOUR_CONTEXT_KEY, null);
4744
+ if (tour == null) return null;
4745
+ return {
4746
+ get activeStepIndex() {
4747
+ return tour.activeStepIndex.value;
4748
+ },
4749
+ get stepCount() {
4750
+ return tour.stepCount.value;
4751
+ },
4752
+ get isFirstStep() {
4753
+ return tour.activeStepIndex.value <= 0;
4754
+ },
4755
+ get isLastStep() {
4756
+ return tour.stepCount.value > 0 && tour.activeStepIndex.value === tour.stepCount.value - 1;
4757
+ },
4758
+ next: tour.onNext,
4759
+ previous: tour.onPrevious,
4760
+ dismiss: tour.onDismiss
4761
+ };
4762
+ }
4763
+ //#endregion
4489
4764
  //#region src/TransferList/transferItems.ts
4490
4765
  /** 把 `fromIndex` 那一项挪到 `toIndex`,返回新数组。 */
4491
4766
  function moveItem(value, fromIndex, toIndex) {
@@ -4558,7 +4833,7 @@ const _hoisted_5 = {
4558
4833
  class: "astryx-transfer-list-panel__group-heading"
4559
4834
  };
4560
4835
  const _hoisted_6 = ["data-transfer-list-empty"];
4561
- const _sfc_main$10 = /*@__PURE__*/ defineComponent({
4836
+ const _sfc_main$12 = /*@__PURE__*/ defineComponent({
4562
4837
  name: "AstryxTransferListPanel",
4563
4838
  __name: "TransferListPanel",
4564
4839
  props: {
@@ -5030,7 +5305,7 @@ const _hoisted_3$1 = {
5030
5305
  class: "astryx-transfer-list__controls"
5031
5306
  };
5032
5307
  const _hoisted_4 = { class: "astryx-transfer-list-collection" };
5033
- const _sfc_main$8 = /*@__PURE__*/ defineComponent({
5308
+ const _sfc_main$10 = /*@__PURE__*/ defineComponent({
5034
5309
  name: "AstryxTransferList",
5035
5310
  inheritAttrs: false,
5036
5311
  __name: "TransferList",
@@ -5304,7 +5579,7 @@ const _sfc_main$8 = /*@__PURE__*/ defineComponent({
5304
5579
  default: withCtx(() => [createTextVNode(toDisplayString(unref(t)("@astryx.transferList.reorderInstructions")), 1)]),
5305
5580
  _: 1
5306
5581
  }),
5307
- createElementVNode("div", _hoisted_4, [createVNode(_sfc_main$10, {
5582
+ createElementVNode("div", _hoisted_4, [createVNode(_sfc_main$12, {
5308
5583
  side: "selected",
5309
5584
  "heading-id": selectedHeadingId,
5310
5585
  label: selectedLabel.value,
@@ -5340,7 +5615,7 @@ const _sfc_main$8 = /*@__PURE__*/ defineComponent({
5340
5615
  "dragging-value",
5341
5616
  "grabbed-value",
5342
5617
  "drop-target"
5343
- ]), createVNode(_sfc_main$10, {
5618
+ ]), createVNode(_sfc_main$12, {
5344
5619
  side: "available",
5345
5620
  "heading-id": availableHeadingId,
5346
5621
  label: availableLabel.value,
@@ -5395,7 +5670,7 @@ const _hoisted_3 = {
5395
5670
  class: "astryx-transfer-list-selector__footer"
5396
5671
  };
5397
5672
  const DEFAULT_SELECTOR_WIDTH = "min(41rem, calc(100vw - 32px))";
5398
- const _sfc_main$9 = /*@__PURE__*/ defineComponent({
5673
+ const _sfc_main$11 = /*@__PURE__*/ defineComponent({
5399
5674
  name: "AstryxTransferListSelector",
5400
5675
  __name: "TransferListSelector",
5401
5676
  props: {
@@ -5532,7 +5807,7 @@ const _sfc_main$9 = /*@__PURE__*/ defineComponent({
5532
5807
  }, [createElementVNode("fieldset", {
5533
5808
  class: "astryx-transfer-list-selector__fieldset",
5534
5809
  disabled: __props.isDisabled
5535
- }, [createVNode(_sfc_main$8, {
5810
+ }, [createVNode(_sfc_main$10, {
5536
5811
  label: __props.label,
5537
5812
  "is-label-hidden": "",
5538
5813
  options: __props.options,
@@ -5611,4 +5886,4 @@ const _sfc_main$9 = /*@__PURE__*/ defineComponent({
5611
5886
  }
5612
5887
  });
5613
5888
  //#endregion
5614
- export { _sfc_main as CircularProgress, _sfc_main$1 as DiffViewer, _sfc_main$2 as InfoTip, _sfc_main$3 as ListInput, _sfc_main$4 as LogStream, _sfc_main$5 as MobileTokenizer, _sfc_main$6 as SVGIcon, _sfc_main$7 as Stat, _sfc_main$8 as TransferList, _sfc_main$9 as TransferListSelector, addCurvature, adjustTension, applyPersonality, bellIcon, calendarIcon, checkIcon, createDiffFile, eyeIcon, folderIcon, heartIcon, homeIcon, lockIcon, mailIcon, menuIcon, parseUnifiedDiff, roundCorners, searchIcon, settingsIcon, shieldIcon, starIcon, starterIcons, xIcon, xifBell, xifBellOverride, xifCheck, xifExamples, xifFile, xifHome, xifShield, xifStar };
5889
+ export { _sfc_main as CircularProgress, _sfc_main$1 as DiffViewer, _sfc_main$2 as InfoTip, _sfc_main$3 as ListInput, _sfc_main$4 as LogStream, _sfc_main$5 as MobileTokenizer, _sfc_main$6 as SVGIcon, _sfc_main$7 as Stat, _sfc_main$8 as Tour, _sfc_main$9 as TourStep, _sfc_main$10 as TransferList, _sfc_main$11 as TransferListSelector, addCurvature, adjustTension, applyPersonality, bellIcon, calendarIcon, checkIcon, createDiffFile, eyeIcon, folderIcon, heartIcon, homeIcon, lockIcon, mailIcon, menuIcon, parseUnifiedDiff, roundCorners, searchIcon, settingsIcon, shieldIcon, starIcon, starterIcons, useTour, xIcon, xifBell, xifBellOverride, xifCheck, xifExamples, xifFile, xifHome, xifShield, xifStar };
package/lab.css CHANGED
@@ -9,3 +9,4 @@
9
9
  @import './styles/transfer-list-selector.css';
10
10
  @import './styles/list-input.css';
11
11
  @import './styles/diff-viewer.css';
12
+ @import './styles/tour.css';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@astryx-vue/lab",
3
3
  "type": "module",
4
- "version": "0.3.1",
4
+ "version": "0.4.0",
5
5
  "description": "Astryx lab components for Vue 3 — experimental components that may change. Ships only under the canary dist-tag.",
6
6
  "author": "ShenQingchuan",
7
7
  "license": "MIT",
@@ -53,7 +53,7 @@
53
53
  ],
54
54
  "peerDependencies": {
55
55
  "vue": "^3.5.0",
56
- "@astryx-vue/core": "^0.7.11"
56
+ "@astryx-vue/core": "^0.7.12"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@types/node": "26.6.4",
@@ -64,7 +64,7 @@
64
64
  "unplugin-vue": "8.0.0",
65
65
  "vue": "3.5.43",
66
66
  "vue-tsc": "3.3.12",
67
- "@astryx-vue/core": "^0.7.11"
67
+ "@astryx-vue/core": "^0.7.12"
68
68
  },
69
69
  "scripts": {
70
70
  "build": "tsdown",
@@ -0,0 +1,65 @@
1
+ @layer astryx.reset, astryx.tokens, astryx.base, astryx.components, astryx.overrides;
2
+
3
+ @layer astryx.components {
4
+ .astryx-tour-step {
5
+ display: flex;
6
+ flex-direction: column;
7
+ gap: var(--astryx-spacing-3, 12px);
8
+ max-width: 320px;
9
+ }
10
+
11
+ .astryx-tour-step__footer {
12
+ align-items: center;
13
+ }
14
+
15
+ .astryx-tour-highlight-root {
16
+ position: fixed;
17
+ z-index: calc(var(--astryx-popover-z-index, 1000) - 1);
18
+ inset: 0;
19
+ box-sizing: border-box;
20
+ width: 100vw;
21
+ max-width: none;
22
+ height: 100vh;
23
+ max-height: none;
24
+ margin: 0;
25
+ padding: 0;
26
+ border: 0;
27
+ background: transparent;
28
+ overflow: visible;
29
+ pointer-events: none;
30
+ }
31
+
32
+ .astryx-tour-highlight-root.is-interactive {
33
+ pointer-events: auto;
34
+ }
35
+
36
+ .astryx-tour-highlight {
37
+ position: absolute;
38
+ pointer-events: none;
39
+ box-shadow:
40
+ 0 0 0 2px var(--astryx-color-background-surface, #fff),
41
+ 0 0 0 4px var(--astryx-color-accent, #0064e0);
42
+ transition:
43
+ top var(--astryx-duration-fast, 125ms) var(--astryx-ease-standard, ease),
44
+ left var(--astryx-duration-fast, 125ms) var(--astryx-ease-standard, ease),
45
+ width var(--astryx-duration-fast, 125ms) var(--astryx-ease-standard, ease),
46
+ height var(--astryx-duration-fast, 125ms) var(--astryx-ease-standard, ease);
47
+ }
48
+
49
+ .astryx-tour-highlight.has-backdrop {
50
+ box-shadow:
51
+ 0 0 0 2px var(--astryx-color-background-surface, #fff),
52
+ 0 0 0 4px var(--astryx-color-accent, #0064e0),
53
+ 0 0 0 9999px var(--astryx-color-overlay, rgb(0 0 0 / 50%));
54
+ }
55
+
56
+ .astryx-tour-highlight.is-hidden {
57
+ opacity: 0;
58
+ }
59
+
60
+ @media (prefers-reduced-motion: reduce) {
61
+ .astryx-tour-highlight {
62
+ transition: none;
63
+ }
64
+ }
65
+ }