@raxium/vue 0.1.2 → 0.2.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.
@@ -1,4 +1,5 @@
1
1
  import type { DatePickerProps } from '.';
2
+ import { DatePicker } from '@ark-ui/vue';
2
3
  declare var __VLS_14: {};
3
4
  type __VLS_Slots = {} & {
4
5
  default?: (props: typeof __VLS_14) => any;
@@ -6,23 +7,23 @@ type __VLS_Slots = {} & {
6
7
  declare const __VLS_base: import("vue").DefineComponent<DatePickerProps, {
7
8
  $api: import("@ark-ui/vue").UseDatePickerReturn;
8
9
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
9
- openChange: (details: import("@zag-js/date-picker").OpenChangeDetails) => any;
10
- focusChange: (details: import("@zag-js/date-picker").FocusChangeDetails) => any;
11
- valueChange: (details: import("@zag-js/date-picker").ValueChangeDetails) => any;
12
- "update:modelValue": (value: import("@zag-js/date-picker").DateValue[]) => any;
10
+ openChange: (details: DatePicker.OpenChangeDetails) => any;
11
+ focusChange: (details: DatePicker.FocusChangeDetails) => any;
12
+ valueChange: (details: DatePicker.ValueChangeDetails) => any;
13
+ "update:modelValue": (value: DatePicker.DateValue[]) => any;
13
14
  "update:open": (open: boolean) => any;
14
- viewChange: (details: import("@zag-js/date-picker").ViewChangeDetails) => any;
15
- "update:view": (view: import("@zag-js/date-picker").DateView) => any;
16
- "update:focusedValue": (focusedValue: import("@zag-js/date-picker").DateValue) => any;
15
+ viewChange: (details: DatePicker.ViewChangeDetails) => any;
16
+ "update:view": (view: DatePicker.DateView) => any;
17
+ "update:focusedValue": (focusedValue: DatePicker.DateValue) => any;
17
18
  }, string, import("vue").PublicProps, Readonly<DatePickerProps> & Readonly<{
18
- onOpenChange?: ((details: import("@zag-js/date-picker").OpenChangeDetails) => any) | undefined;
19
- onFocusChange?: ((details: import("@zag-js/date-picker").FocusChangeDetails) => any) | undefined;
20
- onValueChange?: ((details: import("@zag-js/date-picker").ValueChangeDetails) => any) | undefined;
21
- "onUpdate:modelValue"?: ((value: import("@zag-js/date-picker").DateValue[]) => any) | undefined;
19
+ onOpenChange?: ((details: DatePicker.OpenChangeDetails) => any) | undefined;
20
+ onFocusChange?: ((details: DatePicker.FocusChangeDetails) => any) | undefined;
21
+ onValueChange?: ((details: DatePicker.ValueChangeDetails) => any) | undefined;
22
+ "onUpdate:modelValue"?: ((value: DatePicker.DateValue[]) => any) | undefined;
22
23
  "onUpdate:open"?: ((open: boolean) => any) | undefined;
23
- onViewChange?: ((details: import("@zag-js/date-picker").ViewChangeDetails) => any) | undefined;
24
- "onUpdate:view"?: ((view: import("@zag-js/date-picker").DateView) => any) | undefined;
25
- "onUpdate:focusedValue"?: ((focusedValue: import("@zag-js/date-picker").DateValue) => any) | undefined;
24
+ onViewChange?: ((details: DatePicker.ViewChangeDetails) => any) | undefined;
25
+ "onUpdate:view"?: ((view: DatePicker.DateView) => any) | undefined;
26
+ "onUpdate:focusedValue"?: ((focusedValue: DatePicker.DateValue) => any) | undefined;
26
27
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
27
28
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
28
29
  declare const _default: typeof __VLS_export;
@@ -14,9 +14,9 @@ declare const __VLS_base: import("vue").DefineComponent<EditableProps, {
14
14
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
15
15
  valueChange: (details: import("@ark-ui/vue").EditableValueChangeDetails) => any;
16
16
  "update:modelValue": (value: string) => any;
17
- focusOutside: (event: import("@ark-ui/vue").ColorPickerFocusOutsideEvent) => any;
18
- interactOutside: (event: import("@ark-ui/vue").ColorPickerInteractOutsideEvent) => any;
19
- pointerDownOutside: (event: import("@ark-ui/vue").ColorPickerPointerDownOutsideEvent) => any;
17
+ focusOutside: (event: import("@zag-js/date-picker").FocusOutsideEvent) => any;
18
+ interactOutside: (event: import("@zag-js/date-picker").InteractOutsideEvent) => any;
19
+ pointerDownOutside: (event: import("@zag-js/date-picker").PointerDownOutsideEvent) => any;
20
20
  editChange: (details: import("@ark-ui/vue").EditableEditChangeDetails) => any;
21
21
  valueCommit: (details: import("@ark-ui/vue").EditableValueChangeDetails) => any;
22
22
  valueRevert: (details: import("@ark-ui/vue").EditableValueChangeDetails) => any;
@@ -24,9 +24,9 @@ declare const __VLS_base: import("vue").DefineComponent<EditableProps, {
24
24
  }, string, import("vue").PublicProps, Readonly<EditableProps> & Readonly<{
25
25
  onValueChange?: ((details: import("@ark-ui/vue").EditableValueChangeDetails) => any) | undefined;
26
26
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
27
- onFocusOutside?: ((event: import("@ark-ui/vue").ColorPickerFocusOutsideEvent) => any) | undefined;
28
- onInteractOutside?: ((event: import("@ark-ui/vue").ColorPickerInteractOutsideEvent) => any) | undefined;
29
- onPointerDownOutside?: ((event: import("@ark-ui/vue").ColorPickerPointerDownOutsideEvent) => any) | undefined;
27
+ onFocusOutside?: ((event: import("@zag-js/date-picker").FocusOutsideEvent) => any) | undefined;
28
+ onInteractOutside?: ((event: import("@zag-js/date-picker").InteractOutsideEvent) => any) | undefined;
29
+ onPointerDownOutside?: ((event: import("@zag-js/date-picker").PointerDownOutsideEvent) => any) | undefined;
30
30
  onEditChange?: ((details: import("@ark-ui/vue").EditableEditChangeDetails) => any) | undefined;
31
31
  onValueCommit?: ((details: import("@ark-ui/vue").EditableValueChangeDetails) => any) | undefined;
32
32
  onValueRevert?: ((details: import("@ark-ui/vue").EditableValueChangeDetails) => any) | undefined;
@@ -1,4 +1,5 @@
1
1
  import type { FloatingPanelProps } from '.';
2
+ import { FloatingPanel } from '@ark-ui/vue';
2
3
  declare var __VLS_14: {};
3
4
  type __VLS_Slots = {} & {
4
5
  default?: (props: typeof __VLS_14) => any;
@@ -11,27 +12,27 @@ declare const __VLS_base: import("vue").DefineComponent<FloatingPanelProps, {
11
12
  setOpacity: (o: number) => void;
12
13
  };
13
14
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
14
- openChange: (details: import("@zag-js/floating-panel").OpenChangeDetails) => any;
15
+ openChange: (details: FloatingPanel.OpenChangeDetails) => any;
15
16
  exitComplete: () => any;
16
17
  "update:open": (open: boolean) => any;
17
- positionChange: (details: import("@zag-js/floating-panel").PositionChangeDetails) => any;
18
+ positionChange: (details: FloatingPanel.PositionChangeDetails) => any;
18
19
  "update:position": (details: import("@zag-js/floating-panel").Point) => any;
19
- positionChangeEnd: (details: import("@zag-js/floating-panel").PositionChangeDetails) => any;
20
- sizeChange: (details: import("@zag-js/floating-panel").SizeChangeDetails) => any;
20
+ positionChangeEnd: (details: FloatingPanel.PositionChangeDetails) => any;
21
+ sizeChange: (details: FloatingPanel.SizeChangeDetails) => any;
21
22
  "update:size": (details: import("@zag-js/floating-panel").Size) => any;
22
- sizeChangeEnd: (details: import("@zag-js/floating-panel").SizeChangeDetails) => any;
23
- stageChange: (details: import("@zag-js/floating-panel").StageChangeDetails) => any;
23
+ sizeChangeEnd: (details: FloatingPanel.SizeChangeDetails) => any;
24
+ stageChange: (details: FloatingPanel.StageChangeDetails) => any;
24
25
  }, string, import("vue").PublicProps, Readonly<FloatingPanelProps> & Readonly<{
25
- onOpenChange?: ((details: import("@zag-js/floating-panel").OpenChangeDetails) => any) | undefined;
26
+ onOpenChange?: ((details: FloatingPanel.OpenChangeDetails) => any) | undefined;
26
27
  onExitComplete?: (() => any) | undefined;
27
28
  "onUpdate:open"?: ((open: boolean) => any) | undefined;
28
- onPositionChange?: ((details: import("@zag-js/floating-panel").PositionChangeDetails) => any) | undefined;
29
+ onPositionChange?: ((details: FloatingPanel.PositionChangeDetails) => any) | undefined;
29
30
  "onUpdate:position"?: ((details: import("@zag-js/floating-panel").Point) => any) | undefined;
30
- onPositionChangeEnd?: ((details: import("@zag-js/floating-panel").PositionChangeDetails) => any) | undefined;
31
- onSizeChange?: ((details: import("@zag-js/floating-panel").SizeChangeDetails) => any) | undefined;
31
+ onPositionChangeEnd?: ((details: FloatingPanel.PositionChangeDetails) => any) | undefined;
32
+ onSizeChange?: ((details: FloatingPanel.SizeChangeDetails) => any) | undefined;
32
33
  "onUpdate:size"?: ((details: import("@zag-js/floating-panel").Size) => any) | undefined;
33
- onSizeChangeEnd?: ((details: import("@zag-js/floating-panel").SizeChangeDetails) => any) | undefined;
34
- onStageChange?: ((details: import("@zag-js/floating-panel").StageChangeDetails) => any) | undefined;
34
+ onSizeChangeEnd?: ((details: FloatingPanel.SizeChangeDetails) => any) | undefined;
35
+ onStageChange?: ((details: FloatingPanel.StageChangeDetails) => any) | undefined;
35
36
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
36
37
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
37
38
  declare const _default: typeof __VLS_export;
@@ -35,6 +35,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
35
35
  type: Boolean
36
36
  },
37
37
  positioning: {},
38
+ translations: {},
38
39
  lazyMount: {
39
40
  type: Boolean,
40
41
  default: ()=>void 0
@@ -64,6 +64,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
64
64
  scrollToIndexFn: {
65
65
  type: Function
66
66
  },
67
+ translations: {},
67
68
  lazyMount: {
68
69
  type: Boolean,
69
70
  default: ()=>void 0
@@ -1,16 +1,17 @@
1
1
  import type { CollectionItem } from '@ark-ui/vue/select';
2
2
  import type { SelectProps } from '.';
3
+ import { Select } from '@ark-ui/vue/select';
3
4
  declare const __VLS_export: <T extends CollectionItem>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
5
  props: import("vue").PublicProps & __VLS_PrettifyLocal<SelectProps<T> & {
5
6
  onSelect?: ((details: import("@zag-js/select").SelectionDetails) => any) | undefined;
6
- onOpenChange?: ((details: import("@zag-js/select").OpenChangeDetails) => any) | undefined;
7
- onValueChange?: ((details: import("@zag-js/select").ValueChangeDetails<T>) => any) | undefined;
7
+ onOpenChange?: ((details: Select.OpenChangeDetails) => any) | undefined;
8
+ onValueChange?: ((details: Select.ValueChangeDetails<T>) => any) | undefined;
8
9
  "onUpdate:modelValue"?: ((value: import("./props").SelectValueType[]) => any) | undefined;
9
10
  "onUpdate:open"?: ((open: boolean) => any) | undefined;
10
- onFocusOutside?: ((event: import("@zag-js/date-picker").FocusOutsideEvent) => any) | undefined;
11
- onInteractOutside?: ((event: import("@zag-js/date-picker").InteractOutsideEvent) => any) | undefined;
12
- onPointerDownOutside?: ((event: import("@zag-js/date-picker").PointerDownOutsideEvent) => any) | undefined;
13
- onHighlightChange?: ((details: import("@zag-js/select").HighlightChangeDetails<T>) => any) | undefined;
11
+ onFocusOutside?: ((event: Select.FocusOutsideEvent) => any) | undefined;
12
+ onInteractOutside?: ((event: Select.InteractOutsideEvent) => any) | undefined;
13
+ onPointerDownOutside?: ((event: Select.PointerDownOutsideEvent) => any) | undefined;
14
+ onHighlightChange?: ((details: Select.HighlightChangeDetails<T>) => any) | undefined;
14
15
  "onUpdate:highlightedValue"?: ((value: import("./props").SelectValueType) => any) | undefined;
15
16
  }> & (typeof globalThis extends {
16
17
  __VLS_PROPS_FALLBACK: infer P;
@@ -22,7 +23,7 @@ declare const __VLS_export: <T extends CollectionItem>(__VLS_props: NonNullable<
22
23
  slots: {
23
24
  default?: (props: {}) => any;
24
25
  };
25
- emit: ((evt: "select", details: import("@zag-js/select").SelectionDetails) => void) & ((evt: "openChange", details: import("@zag-js/select").OpenChangeDetails) => void) & ((evt: "valueChange", details: import("@zag-js/select").ValueChangeDetails<T>) => void) & ((evt: "update:modelValue", value: import("./props").SelectValueType[]) => void) & ((evt: "update:open", open: boolean) => void) & ((evt: "focusOutside", event: import("@zag-js/date-picker").FocusOutsideEvent) => void) & ((evt: "interactOutside", event: import("@zag-js/date-picker").InteractOutsideEvent) => void) & ((evt: "pointerDownOutside", event: import("@zag-js/date-picker").PointerDownOutsideEvent) => void) & ((evt: "highlightChange", details: import("@zag-js/select").HighlightChangeDetails<T>) => void) & ((evt: "update:highlightedValue", value: import("./props").SelectValueType) => void);
26
+ emit: ((evt: "select", details: import("@zag-js/select").SelectionDetails) => void) & ((evt: "openChange", details: Select.OpenChangeDetails) => void) & ((evt: "valueChange", details: Select.ValueChangeDetails<T>) => void) & ((evt: "update:modelValue", value: import("./props").SelectValueType[]) => void) & ((evt: "update:open", open: boolean) => void) & ((evt: "focusOutside", event: Select.FocusOutsideEvent) => void) & ((evt: "interactOutside", event: Select.InteractOutsideEvent) => void) & ((evt: "pointerDownOutside", event: Select.PointerDownOutsideEvent) => void) & ((evt: "highlightChange", details: Select.HighlightChangeDetails<T>) => void) & ((evt: "update:highlightedValue", value: import("./props").SelectValueType) => void);
26
27
  }>) => import("vue").VNode & {
27
28
  __ctx?: Awaited<typeof __VLS_setup>;
28
29
  };
@@ -1,7 +1,7 @@
1
1
  import type { SlotsType, VNode } from 'vue';
2
2
  import type { SpinRenderProps } from '.';
3
3
  /**
4
- * TODO: rslib无法解析<script setup lang="tsx">的组件, 会解析为虚拟请求(?vue), 导致解析链断掉
4
+ * rslib无法解析<script setup lang="tsx">的组件, 会解析为虚拟请求(?vue), 导致解析链断掉
5
5
  * 继续使用bundle:false, 需要直接解析tsx文件
6
6
  */
7
7
  type Slots = {
@@ -1,6 +1,7 @@
1
1
  import { computed, createVNode, defineComponent, isVNode, provide } from "vue";
2
2
  import { ark } from "@ark-ui/vue/factory";
3
3
  import { clsx } from "@raxium/themes/utils";
4
+ import { isEmptyVNode } from "../../utils/index.js";
4
5
  import { LoaderCircle } from "lucide-vue-next";
5
6
  function _isSlot(s) {
6
7
  return 'function' == typeof s || '[object Object]' === Object.prototype.toString.call(s) && !isVNode(s);
@@ -12,7 +13,7 @@ const SpinProvider = defineComponent({
12
13
  function renderIcon(props) {
13
14
  const icon = slots?.icon?.(props);
14
15
  const crafts = computed(()=>props.theme?.crafts?.tvSpin?.());
15
- if (icon) return createVNode(ark.span, {
16
+ if (!isEmptyVNode(icon)) return createVNode(ark.span, {
16
17
  class: crafts.value?.icon({
17
18
  class: clsx(props.class),
18
19
  ...props.theme
@@ -25,6 +25,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
25
25
  addOnPaste: {
26
26
  type: Boolean
27
27
  },
28
+ allowDuplicates: {
29
+ type: Boolean
30
+ },
28
31
  allowOverflow: {
29
32
  type: Boolean
30
33
  },
@@ -51,6 +51,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
51
51
  id: {},
52
52
  ids: {},
53
53
  selectionMode: {},
54
+ translations: {},
54
55
  typeahead: {
55
56
  type: Boolean
56
57
  },
@@ -1,20 +1,21 @@
1
1
  import type { TreeNode } from '@ark-ui/vue/tree-view';
2
2
  import type { TreeProps } from '.';
3
+ import { TreeView } from '@ark-ui/vue/tree-view';
3
4
  declare const __VLS_export: <T = TreeNode>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
5
  props: import("vue").PublicProps & __VLS_PrettifyLocal<TreeProps<T> & {
5
- onFocusChange?: ((details: import("@zag-js/tree-view").FocusChangeDetails<any>) => any) | undefined;
6
- onCheckedChange?: ((details: import("@zag-js/tree-view").CheckedChangeDetails) => any) | undefined;
6
+ onFocusChange?: ((details: TreeView.FocusChangeDetails<any>) => any) | undefined;
7
+ onCheckedChange?: ((details: TreeView.CheckedChangeDetails) => any) | undefined;
7
8
  "onUpdate:focusedValue"?: ((value: import("./props").TreeValueType) => any) | undefined;
8
9
  "onUpdate:expandedValue"?: ((value: import("./props").TreeValueType[]) => any) | undefined;
9
10
  "onUpdate:selectedValue"?: ((value: import("./props").TreeValueType[]) => any) | undefined;
10
11
  "onUpdate:checkedValue"?: ((value: import("./props").TreeValueType[]) => any) | undefined;
11
- onExpandedChange?: ((details: import("@zag-js/tree-view").ExpandedChangeDetails<any>) => any) | undefined;
12
- onSelectionChange?: ((details: import("@zag-js/tree-view").SelectionChangeDetails<any>) => any) | undefined;
13
- onLoadChildrenComplete?: ((details: import("@zag-js/tree-view").LoadChildrenCompleteDetails<T>) => any) | undefined;
14
- onLoadChildrenError?: ((details: import("@zag-js/tree-view").LoadChildrenErrorDetails<T>) => any) | undefined;
15
- onRenameStart?: ((details: import("@zag-js/tree-view").RenameStartDetails<T>) => any) | undefined;
16
- onBeforeRename?: ((details: import("@zag-js/tree-view").RenameCompleteDetails) => any) | undefined;
17
- onRenameComplete?: ((details: import("@zag-js/tree-view").RenameCompleteDetails) => any) | undefined;
12
+ onExpandedChange?: ((details: TreeView.ExpandedChangeDetails<any>) => any) | undefined;
13
+ onSelectionChange?: ((details: TreeView.SelectionChangeDetails<any>) => any) | undefined;
14
+ onLoadChildrenComplete?: ((details: TreeView.LoadChildrenCompleteDetails<T>) => any) | undefined;
15
+ onLoadChildrenError?: ((details: TreeView.LoadChildrenErrorDetails<T>) => any) | undefined;
16
+ onRenameStart?: ((details: TreeView.RenameStartDetails<T>) => any) | undefined;
17
+ onBeforeRename?: ((details: TreeView.RenameCompleteDetails) => any) | undefined;
18
+ onRenameComplete?: ((details: TreeView.RenameCompleteDetails) => any) | undefined;
18
19
  }> & (typeof globalThis extends {
19
20
  __VLS_PROPS_FALLBACK: infer P;
20
21
  } ? P : {});
@@ -27,7 +28,7 @@ declare const __VLS_export: <T = TreeNode>(__VLS_props: NonNullable<Awaited<type
27
28
  } & {
28
29
  suffix?: (props: {}) => any;
29
30
  };
30
- emit: ((evt: "focusChange", details: import("@zag-js/tree-view").FocusChangeDetails<any>) => void) & ((evt: "checkedChange", details: import("@zag-js/tree-view").CheckedChangeDetails) => void) & ((evt: "update:focusedValue", value: import("./props").TreeValueType) => void) & ((evt: "update:expandedValue", value: import("./props").TreeValueType[]) => void) & ((evt: "update:selectedValue", value: import("./props").TreeValueType[]) => void) & ((evt: "update:checkedValue", value: import("./props").TreeValueType[]) => void) & ((evt: "expandedChange", details: import("@zag-js/tree-view").ExpandedChangeDetails<any>) => void) & ((evt: "selectionChange", details: import("@zag-js/tree-view").SelectionChangeDetails<any>) => void) & ((evt: "loadChildrenComplete", details: import("@zag-js/tree-view").LoadChildrenCompleteDetails<T>) => void) & ((evt: "loadChildrenError", details: import("@zag-js/tree-view").LoadChildrenErrorDetails<T>) => void) & ((evt: "renameStart", details: import("@zag-js/tree-view").RenameStartDetails<T>) => void) & ((evt: "beforeRename", details: import("@zag-js/tree-view").RenameCompleteDetails) => void) & ((evt: "renameComplete", details: import("@zag-js/tree-view").RenameCompleteDetails) => void);
31
+ emit: ((evt: "focusChange", details: TreeView.FocusChangeDetails<any>) => void) & ((evt: "checkedChange", details: TreeView.CheckedChangeDetails) => void) & ((evt: "update:focusedValue", value: import("./props").TreeValueType) => void) & ((evt: "update:expandedValue", value: import("./props").TreeValueType[]) => void) & ((evt: "update:selectedValue", value: import("./props").TreeValueType[]) => void) & ((evt: "update:checkedValue", value: import("./props").TreeValueType[]) => void) & ((evt: "expandedChange", details: TreeView.ExpandedChangeDetails<any>) => void) & ((evt: "selectionChange", details: TreeView.SelectionChangeDetails<any>) => void) & ((evt: "loadChildrenComplete", details: TreeView.LoadChildrenCompleteDetails<T>) => void) & ((evt: "loadChildrenError", details: TreeView.LoadChildrenErrorDetails<T>) => void) & ((evt: "renameStart", details: TreeView.RenameStartDetails<T>) => void) & ((evt: "beforeRename", details: TreeView.RenameCompleteDetails) => void) & ((evt: "renameComplete", details: TreeView.RenameCompleteDetails) => void);
31
32
  }>) => import("vue").VNode & {
32
33
  __ctx?: Awaited<typeof __VLS_setup>;
33
34
  };
@@ -0,0 +1,191 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { Comment, Fragment, Text, createCommentVNode, createTextVNode, defineComponent, h } from "vue";
3
+ import { checkContextVNodePosition, excludeVNodesByName, excludeVNodesByNames, findVNodeByName, findVNodesByName, hasChildVNodeByName, isEmptyVNode, someVNode } from "../vnode.js";
4
+ function cmp(name) {
5
+ return defineComponent({
6
+ name,
7
+ setup: ()=>()=>null
8
+ });
9
+ }
10
+ describe('someVNode', ()=>{
11
+ it('returns false for undefined / empty', ()=>{
12
+ expect(someVNode(void 0, ()=>true)).toBe(false);
13
+ expect(someVNode([], ()=>true)).toBe(false);
14
+ });
15
+ it('matches direct vnode', ()=>{
16
+ const n = h('div');
17
+ expect(someVNode(n, (v)=>'div' === v.type)).toBe(true);
18
+ expect(someVNode(n, (v)=>'span' === v.type)).toBe(false);
19
+ });
20
+ it('recurses into array children (e.g. Fragment)', ()=>{
21
+ const inner = h('span');
22
+ const frag = h(Fragment, null, [
23
+ inner
24
+ ]);
25
+ expect(someVNode(frag, (v)=>'span' === v.type)).toBe(true);
26
+ });
27
+ });
28
+ describe('findVNodeByName', ()=>{
29
+ it('finds component by name with camelCase normalization', ()=>{
30
+ const C = cmp('MyWidget');
31
+ const nodes = [
32
+ h('div'),
33
+ h(C)
34
+ ];
35
+ expect(findVNodeByName(nodes, 'my-widget')).toBeDefined();
36
+ expect(findVNodeByName(nodes, 'MyWidget')).toBeDefined();
37
+ expect(findVNodeByName(nodes, 'my-widget').type.name).toBe('MyWidget');
38
+ });
39
+ it('returns undefined when missing or nodes empty', ()=>{
40
+ expect(findVNodeByName(void 0, 'x')).toBeUndefined();
41
+ expect(findVNodeByName([], 'x')).toBeUndefined();
42
+ expect(findVNodeByName([
43
+ h('div')
44
+ ], 'Missing')).toBeUndefined();
45
+ });
46
+ it('walks Fragment children', ()=>{
47
+ const Inner = cmp('InnerNode');
48
+ const frag = h(Fragment, null, [
49
+ h(Inner)
50
+ ]);
51
+ expect(findVNodeByName([
52
+ frag
53
+ ], 'InnerNode')).toBeDefined();
54
+ });
55
+ });
56
+ describe('findVNodesByName', ()=>{
57
+ it('collects all matches', ()=>{
58
+ const A = cmp('Dup');
59
+ const nodes = [
60
+ h(A),
61
+ h('p'),
62
+ h(A)
63
+ ];
64
+ const found = findVNodesByName(nodes, 'Dup');
65
+ expect(found).toHaveLength(2);
66
+ });
67
+ });
68
+ describe('excludeVNodesByName / excludeVNodesByNames', ()=>{
69
+ it('excludes one name', ()=>{
70
+ const A = cmp('Keep');
71
+ const B = cmp('Drop');
72
+ const out = excludeVNodesByName([
73
+ h(A),
74
+ h(B),
75
+ h('i')
76
+ ], 'Drop');
77
+ expect(out).toHaveLength(2);
78
+ expect(out.some((v)=>v.type?.name === 'Drop')).toBe(false);
79
+ });
80
+ it('excludes multiple names', ()=>{
81
+ const A = cmp('A1');
82
+ const B = cmp('A2');
83
+ const out = excludeVNodesByNames([
84
+ h(A),
85
+ h(B),
86
+ h('span')
87
+ ], [
88
+ 'A1',
89
+ 'A2'
90
+ ]);
91
+ expect(out).toHaveLength(1);
92
+ expect(out[0].type).toBe('span');
93
+ });
94
+ it('returns [] for empty input', ()=>{
95
+ expect(excludeVNodesByName(void 0, 'x')).toEqual([]);
96
+ });
97
+ });
98
+ describe('hasChildVNodeByName', ()=>{
99
+ it('matches root component name', ()=>{
100
+ const C = cmp('RootX');
101
+ expect(hasChildVNodeByName(h(C), 'root-x')).toBe(true);
102
+ });
103
+ it('matches nested component in children array', ()=>{
104
+ const Inner = cmp('Nested');
105
+ const root = h('div', [
106
+ h(Inner)
107
+ ]);
108
+ expect(hasChildVNodeByName(root, 'Nested')).toBe(true);
109
+ });
110
+ it('returns false when absent', ()=>{
111
+ expect(hasChildVNodeByName(void 0, 'x')).toBe(false);
112
+ expect(hasChildVNodeByName(h('div'), 'None')).toBe(false);
113
+ });
114
+ it('handles vnode array at root', ()=>{
115
+ const Inner = cmp('InArray');
116
+ expect(hasChildVNodeByName([
117
+ h('div'),
118
+ h(Inner)
119
+ ], 'InArray')).toBe(true);
120
+ });
121
+ });
122
+ describe('checkContextVNodePosition', ()=>{
123
+ it('warns when single child name equals context', ()=>{
124
+ const warn = vi.spyOn(console, 'warn').mockImplementation(()=>{});
125
+ const C = cmp('ContextHost');
126
+ checkContextVNodePosition([
127
+ h(C)
128
+ ], 'ContextHost', 'Parent');
129
+ expect(warn).toHaveBeenCalledTimes(1);
130
+ warn.mockRestore();
131
+ });
132
+ it('does not warn when multiple nodes', ()=>{
133
+ const warn = vi.spyOn(console, 'warn').mockImplementation(()=>{});
134
+ const C = cmp('ContextHost');
135
+ checkContextVNodePosition([
136
+ h(C),
137
+ h('div')
138
+ ], 'ContextHost', 'Parent');
139
+ expect(warn).not.toHaveBeenCalled();
140
+ warn.mockRestore();
141
+ });
142
+ });
143
+ describe('isEmptyVNode', ()=>{
144
+ it('treats null / undefined as empty', ()=>{
145
+ expect(isEmptyVNode(null)).toBe(true);
146
+ expect(isEmptyVNode(void 0)).toBe(true);
147
+ });
148
+ it('treats Comment as empty', ()=>{
149
+ const v = createCommentVNode('x');
150
+ expect(v.type).toBe(Comment);
151
+ expect(isEmptyVNode(v)).toBe(true);
152
+ });
153
+ it('treats blank Text as empty', ()=>{
154
+ expect(isEmptyVNode(createTextVNode(''))).toBe(true);
155
+ expect(isEmptyVNode(createTextVNode(' '))).toBe(true);
156
+ });
157
+ it('treats non-blank Text as non-empty', ()=>{
158
+ expect(isEmptyVNode(createTextVNode('a'))).toBe(false);
159
+ });
160
+ it('treats empty Fragment as empty', ()=>{
161
+ expect(isEmptyVNode(h(Fragment, null, []))).toBe(true);
162
+ expect(isEmptyVNode(h(Fragment, null, null))).toBe(true);
163
+ });
164
+ it('treats Fragment with only empty children as empty', ()=>{
165
+ expect(isEmptyVNode(h(Fragment, null, [
166
+ createCommentVNode(),
167
+ createTextVNode('')
168
+ ]))).toBe(true);
169
+ });
170
+ it('treats element / component as non-empty', ()=>{
171
+ expect(isEmptyVNode(h('div'))).toBe(false);
172
+ expect(isEmptyVNode(h(cmp('X')))).toBe(false);
173
+ });
174
+ it('requires every item in array to be empty', ()=>{
175
+ expect(isEmptyVNode([
176
+ createCommentVNode(),
177
+ createTextVNode('')
178
+ ])).toBe(true);
179
+ expect(isEmptyVNode([
180
+ createCommentVNode(),
181
+ h('span')
182
+ ])).toBe(false);
183
+ });
184
+ it('treats non-VNode object as empty (compat)', ()=>{
185
+ expect(isEmptyVNode({})).toBe(true);
186
+ });
187
+ it('compares Text type symbol', ()=>{
188
+ const tv = createTextVNode('hi');
189
+ expect(tv.type).toBe(Text);
190
+ });
191
+ });
@@ -6,3 +6,4 @@ export declare function excludeVNodesByName(node: VNode | VNode[] | undefined, n
6
6
  export declare function excludeVNodesByNames(nodes: VNode[] | undefined, name: string[]): VNode[];
7
7
  export declare function hasChildVNodeByName(node: VNode | VNode[] | undefined, name: string): boolean;
8
8
  export declare function checkContextVNodePosition(nodes: VNode[] | undefined, contextName: string, componentName?: string): void;
9
+ export declare function isEmptyVNode(node: VNode | VNode[] | null | undefined): boolean;
@@ -1,5 +1,5 @@
1
1
  import { camelCase, isEmpty } from "es-toolkit/compat";
2
- import { isVNode } from "vue";
2
+ import { Comment, Fragment, Text, isVNode } from "vue";
3
3
  function someVNode(children, pred) {
4
4
  const arr = Array.isArray(children) ? children : null != children ? [
5
5
  children
@@ -83,4 +83,23 @@ function checkContextVNodePosition(nodes, contextName, componentName) {
83
83
  _srcName === _targetName && console.warn(`\<${contextName}\> can not be a direct child of \<${componentName}\>, it may cause unexpected style behavior, consider lift it up or use it closer to where you want to use it `);
84
84
  }
85
85
  }
86
- export { checkContextVNodePosition, excludeVNodesByName, excludeVNodesByNames, findVNodeByName, findVNodesByName, hasChildVNodeByName, someVNode };
86
+ function isEmptyVNode(node) {
87
+ if (!node) return true;
88
+ const nodes = Array.isArray(node) ? node : [
89
+ node
90
+ ];
91
+ if (0 === nodes.length) return true;
92
+ return nodes.every((n)=>{
93
+ if (!n) return true;
94
+ if (!isVNode(n)) return true;
95
+ if (n.type === Comment) return true;
96
+ if (n.type === Text) return '' === String(n.children ?? '').trim();
97
+ if (n.type === Fragment) {
98
+ const ch = n.children;
99
+ if (null == ch || '' === ch) return true;
100
+ if (Array.isArray(ch)) return ch.every((c)=>isEmptyVNode(c));
101
+ }
102
+ return false;
103
+ });
104
+ }
105
+ export { checkContextVNodePosition, excludeVNodesByName, excludeVNodesByNames, findVNodeByName, findVNodesByName, hasChildVNodeByName, isEmptyVNode, someVNode };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@raxium/vue",
3
3
  "type": "module",
4
- "version": "0.1.2",
4
+ "version": "0.2.0",
5
5
  "description": "Vue core components for Raxium, based on Ark UI",
6
6
  "author": {
7
7
  "name": "Hwacc",
@@ -58,7 +58,7 @@
58
58
  "dist"
59
59
  ],
60
60
  "peerDependencies": {
61
- "@ark-ui/vue": "^5.34.1",
61
+ "@ark-ui/vue": "^5.35.0",
62
62
  "vue": "^3.5.0"
63
63
  },
64
64
  "dependencies": {
@@ -68,33 +68,34 @@
68
68
  "lucide-vue-next": "^0.577.0",
69
69
  "vue-component-type-helpers": "^3.2.1",
70
70
  "@raxium/shared": "0.1.1",
71
- "@raxium/themes": "0.1.2"
71
+ "@raxium/themes": "0.1.3"
72
72
  },
73
73
  "devDependencies": {
74
- "@ark-ui/vue": "^5.34.1",
74
+ "@ark-ui/vue": "5.35.0",
75
75
  "@iconify/vue": "^5.0.0",
76
76
  "@internationalized/date": "^3.10.1",
77
77
  "@rsbuild/plugin-babel": "^1.0.6",
78
78
  "@rsbuild/plugin-vue-jsx": "^1.1.2",
79
79
  "@rslib/core": "0.20.0",
80
- "@zag-js/checkbox": "^1.35.3",
81
- "@zag-js/date-picker": "^1.35.3",
82
- "@zag-js/floating-panel": "^1.35.3",
83
- "@zag-js/select": "^1.35.3",
84
- "@zag-js/toast": "^1.35.3",
85
- "@zag-js/tree-view": "^1.33.1",
80
+ "@zag-js/checkbox": "1.38.2",
81
+ "@zag-js/date-picker": "1.38.2",
82
+ "@zag-js/floating-panel": "1.38.2",
83
+ "@zag-js/select": "1.38.2",
84
+ "@zag-js/toast": "1.38.2",
85
+ "@zag-js/tree-view": "1.38.2",
86
86
  "rsbuild-plugin-unplugin-vue": "^0.2.0",
87
87
  "tailwind-merge": "^3.5.0",
88
88
  "tsc-alias": "^1.8.16",
89
+ "vitest": "^4.1.1",
89
90
  "vue-tsc": "^3.2.4",
90
91
  "@raxium/shared": "0.1.1",
91
- "@raxium/themes": "0.1.2"
92
+ "@raxium/themes": "0.1.3"
92
93
  },
93
94
  "publishConfig": {
94
95
  "access": "public"
95
96
  },
96
97
  "scripts": {
97
98
  "build": "rslib build --tsconfig ./tsconfig.build.json && vue-tsc --project tsconfig.build.json && tsc-alias --project tsconfig.build.json",
98
- "test": "echo \"Error: no test specified\" && exit 1"
99
+ "test": "vitest run"
99
100
  }
100
101
  }