@teammodlr/ui-kit 2.1.5 → 2.1.6

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.
Files changed (55) hide show
  1. package/lib/call.d.ts +7 -0
  2. package/lib/components/confirm/Confirm.vue.d.ts +46 -0
  3. package/lib/components/{dialog/DialogProvider.vue.d.ts → confirm/ConfirmProvider.vue.d.ts} +5 -5
  4. package/lib/components/{dialog → confirm}/props.d.ts +2 -2
  5. package/lib/components/confirm/types.d.ts +27 -0
  6. package/lib/components/confirm/useConfirm.d.ts +2 -0
  7. package/lib/components/dialog/Dialog.vue.d.ts +90 -41
  8. package/lib/components/dialog/style/Dialog.css.d.ts +11 -0
  9. package/lib/components/dialog/style/index.d.ts +1 -0
  10. package/lib/components/dialog/types.d.ts +0 -27
  11. package/lib/components/index.d.ts +3 -1
  12. package/lib/components/tree/Tree.vue.d.ts +103 -0
  13. package/lib/components/tree/TreeNode.vue.d.ts +18 -0
  14. package/lib/components/tree/props.d.ts +70 -0
  15. package/lib/components/tree/types.d.ts +53 -0
  16. package/lib/composables/index.d.ts +1 -1
  17. package/lib/composables/useMergedState.d.ts +2 -0
  18. package/lib/index.cjs.js +18 -2
  19. package/lib/index.es.js +4688 -2817
  20. package/lib/style.css +1 -1
  21. package/lib/utils/injection.d.ts +2 -0
  22. package/package.json +6 -4
  23. package/src/call.ts +34 -0
  24. package/src/components/confirm/Confirm.vue +60 -0
  25. package/src/components/{dialog/DialogProvider.vue → confirm/ConfirmProvider.vue} +18 -18
  26. package/src/components/confirm/examples/basic.vue +48 -0
  27. package/src/components/confirm/examples/index.stories.ts +29 -0
  28. package/src/components/confirm/examples/index.ts +1 -0
  29. package/src/components/{dialog → confirm}/props.ts +2 -2
  30. package/src/components/confirm/types.ts +34 -0
  31. package/src/components/confirm/useConfirm.ts +12 -0
  32. package/src/components/dialog/Dialog.vue +102 -44
  33. package/src/components/dialog/examples/basic.vue +8 -40
  34. package/src/components/dialog/examples/index.stories.ts +11 -22
  35. package/src/components/dialog/examples/index.ts +1 -1
  36. package/src/components/dialog/style/Dialog.css.ts +99 -0
  37. package/src/components/dialog/style/index.ts +1 -0
  38. package/src/components/dialog/types.ts +0 -34
  39. package/src/components/index.ts +3 -1
  40. package/src/components/select/Select.vue +4 -0
  41. package/src/components/tree/Tree.vue +126 -0
  42. package/src/components/tree/TreeNode.vue +71 -0
  43. package/src/components/tree/examples/basic.vue +33 -0
  44. package/src/components/tree/examples/index.stories.ts +16 -0
  45. package/src/components/tree/examples/index.ts +1 -0
  46. package/src/components/tree/props.ts +87 -0
  47. package/src/components/tree/types.ts +96 -0
  48. package/src/composables/index.ts +1 -1
  49. package/src/composables/useMergedState.ts +18 -0
  50. package/src/utils/injection.ts +5 -0
  51. package/lib/components/dialog/useDialog.d.ts +0 -2
  52. package/src/components/dialog/useDialog.ts +0 -12
  53. /package/lib/components/{dialog → confirm}/providerProps.d.ts +0 -0
  54. /package/src/components/{dialog → confirm}/examples/wrapper.vue +0 -0
  55. /package/src/components/{dialog → confirm}/providerProps.ts +0 -0
@@ -1,60 +1,118 @@
1
1
  <template>
2
- <div>
3
- <MModal ref="modal" :title="title" :canClickOutside="false" :onClose="onClose">
4
- <template #body>
5
- {{ content }}
6
- </template>
7
-
8
- <template #footer>
9
- <div style="display: flex; flex-grow: 1; justify-content: end;">
10
- <MButton :variant="okVariant" @click="handleOk">
11
- {{ okText ?? 'Okay' }}
12
- </MButton>
13
- <MButton style="margin-left: 8px;" @click="handleCancel">
14
- {{ cancelText ?? 'Cancel' }}
15
- </MButton>
2
+ <Teleport to="body">
3
+ <div :class="style.root">
4
+ <div :class="backdropClasses">
16
5
  </div>
17
- </template>
18
- </MModal>
19
- </div>
20
- </template>
6
+ <div ref="wrapper" :class="style.wrapper">
7
+ <div ref="dialog" :class="style.dialog" :style="{
8
+ // top: y + 'px',
9
+ // left: x + 'px',
10
+ zIndex: zIndex,
11
+ width: width
12
+ }">
13
+ <div tabindex="0" aria-hidden="true" style="width: 0px; height: 0px; overflow: hidden; outline: none;"></div>
14
+ <div :class="style.content">
15
+ <button role="button" :class="style.close">x</button>
16
+ <div :class="style.header" ref="handle">
17
+ <div :class="style.title">
18
+ <slot name="title">
19
+ Title
20
+ </slot>
21
+ </div>
22
+ </div>
23
+ <div>
24
+ <slot></slot>
25
+ </div>
26
+ <div :class="style.footer">
27
+ <slot name="footer"></slot>
28
+ </div>
29
+ </div>
30
+ <div tabindex="0" aria-hidden="true" style="width: 0px; height: 0px; overflow: hidden; outline: none;"></div>
31
+ </div>
32
+ </div>
33
+ </div>
21
34
 
35
+ </Teleport>
36
+ </template>
22
37
  <script lang="ts">
23
- import { defineComponent, onMounted, ref } from 'vue';
24
- import { useZIndex } from '../../composables/useZIndex';
25
- import { dialogProps } from './props';
26
- import MModal from '../modal/Modal.vue';
38
+ import {computed, defineComponent, type PropType, ref} from "vue";
39
+ import {useZIndex} from "../../composables/useZIndex";
40
+ import {useDraggable} from "@vueuse/core";
41
+ import * as style from "./style";
27
42
 
28
43
  export default defineComponent({
29
44
  name: "Dialog",
30
- props: dialogProps,
31
- setup(props, { slots }) {
32
- const modal = ref();
33
-
34
- const { nextZIndex } = useZIndex();
35
-
36
- async function handleCancel(event: MouseEvent) {
37
- modal.value?.close();
38
- if (props.onCancel) {
39
- await props.onCancel(event)
45
+ props: {
46
+ title: {
47
+ type: String,
48
+ default: ""
49
+ },
50
+ draggable: {
51
+ type: Boolean,
52
+ default: false
53
+ },
54
+ backdrop: {
55
+ type: Boolean,
56
+ default: false,
57
+ },
58
+ onClose: {
59
+ type: Function as PropType<() => void>,
60
+ default: () => {
40
61
  }
62
+ },
63
+ zIndex: {
64
+ type: Number
65
+ },
66
+ width: {
67
+ type: [Number, String],
68
+ default: "500px"
69
+ },
70
+ transformOrigin: {
71
+ type: String as PropType<'center' | 'mouse'>,
72
+ default: 'mouse'
73
+ },
74
+ focusTrap: {
75
+ type: Boolean,
76
+ default: true
41
77
  }
78
+ },
79
+ emits: ['onOpen', 'onClose'],
80
+ setup(props, {slots}) {
81
+ const wrapper = ref<HTMLElement | null>(null);
82
+ const dialog = ref<HTMLElement | null>(null);
83
+ const handle = ref<HTMLElement | null>(null);
84
+ const {x, y} = useDraggable(dialog, {
85
+ handle: handle,
86
+ preventDefault: true,
87
+ // containerElement: wrapper,
88
+ });
89
+ const {nextZIndex} = useZIndex();
42
90
 
43
- async function handleOk(event: MouseEvent) {
44
- modal.value?.close();
45
- if (props.onOk) {
46
- props.onOk(event)
91
+ const backdropClasses = computed(() => {
92
+ return {
93
+ [style.backdrop]: true,
94
+ [style.backdropColor]: props.backdrop === true
47
95
  }
48
- }
49
- onMounted(() => {
50
- modal.value?.open(null);
51
96
  });
97
+
98
+ const width = computed(() => {
99
+ return typeof props.width === "number" ? props.width + "px" : props.width;
100
+ });
101
+
102
+ const zIndex = ref(props.zIndex ?? nextZIndex());
52
103
  return {
53
- modal,
54
- handleOk,
55
- handleCancel
104
+ slots,
105
+ wrapper,
106
+ dialog,
107
+ handle,
108
+ zIndex,
109
+ width,
110
+ x,
111
+ y,
112
+ style,
113
+ backdropClasses,
114
+ nextZIndex
56
115
  };
57
- },
58
- components: { MModal }
116
+ }
59
117
  });
60
118
  </script>
@@ -1,48 +1,16 @@
1
1
  <template>
2
2
  <div>
3
- <button @click="showBasicDialog">
4
- Show Basic</button>
5
-
6
- <button @click="showDangerDialog">
7
- Show Danger
8
- </button>
3
+ <MDialog>
4
+ <input type="text" />
5
+ <input type="text" />
6
+ <template #footer>
7
+ Bootom
8
+ </template>
9
+ </MDialog>
9
10
  </div>
10
11
  </template>
11
12
 
12
13
  <script lang="ts" setup>
13
- import { ref } from 'vue';
14
- import { useDialog } from '../useDialog';
15
-
16
- const dialog = useDialog();
17
-
18
- async function showBasicDialog() {
19
- const result = dialog.create({
20
- title: 'Hello World',
21
- content: 'This is a dialog',
22
- okText: 'OK',
23
- cancelText: 'Cancel',
24
- onOk: () => {
25
- console.log('OK');
26
- },
27
- onCancel: () => {
28
- console.log('Cancel');
29
- }
30
- });
31
- }
14
+ import { ref } from 'vue'
32
15
 
33
- async function showDangerDialog() {
34
- const result = dialog.create({
35
- title: 'Hello World',
36
- content: 'This is a dialog',
37
- okText: 'Continue',
38
- okVariant: 'error',
39
- cancelText: 'Cancel',
40
- onOk: () => {
41
- showBasicDialog()
42
- },
43
- onCancel: () => {
44
- console.log('Cancel');
45
- }
46
- });
47
- }
48
16
  </script>
@@ -1,29 +1,18 @@
1
- import MDialogProvider from "../DialogProvider.vue";
1
+ import MDialog from "../Dialog.vue";
2
2
  import {
3
- MDialogProviderBasic,
3
+ MDialogBasic
4
4
  } from "./index";
5
5
 
6
- const Template = (args: any) => ({
7
- components: {
8
- MDialogProvider,
9
- MDialogProviderBasic
10
- },
11
- setup() {
12
-
13
- return {
14
- args,
15
- };
16
- },
17
- template: `
18
- <m-dialog-provider v-bind="args">
19
- <MDialogProviderBasic />
20
- </m-dialog-provider>
21
- `
22
- })
6
+ import {
7
+ createStory, sizeArgType
8
+ } from "../../../__storybook__";
23
9
 
24
10
  export default {
25
- component: MDialogProvider,
26
- title: 'Components/Dialog'
11
+ component: MDialog,
12
+ title: 'Components/Dialog',
13
+ argTypes: {
14
+ ...sizeArgType(),
15
+ }
27
16
  }
28
17
 
29
- export const Primary = Template.bind({});
18
+ export const Basic = createStory(MDialogBasic);
@@ -1 +1 @@
1
- export { default as MDialogProviderBasic } from './basic.vue';
1
+ export { default as MDialogBasic } from './basic.vue';
@@ -0,0 +1,99 @@
1
+ import {createVar, globalKeyframes, style, styleVariants} from "@vanilla-extract/css";
2
+ import {themeVars} from "../../../styles/theme.css";
3
+
4
+ export const vars = {
5
+
6
+ }
7
+
8
+ export const root = style({
9
+
10
+ });
11
+ export const backdrop = style({
12
+ position: "fixed",
13
+ inset: 0,
14
+ top: 0,
15
+ bottom: 0,
16
+ left: 0,
17
+ right: 0,
18
+ display: "flex",
19
+ justifyContent: "center",
20
+ alignItems: "center",
21
+ pointerEvents: "none",
22
+ });
23
+
24
+ export const backdropColor = style({
25
+ backgroundColor: 'rgba(0,0,0,.45)',
26
+ });
27
+
28
+ export const wrapper = style({
29
+ position: "fixed",
30
+ inset: 0,
31
+ top: 0,
32
+ left: 0,
33
+ right: 0,
34
+ bottom: 0,
35
+ outline: 0,
36
+ overflow: "auto",
37
+ boxSizing: "border-box",
38
+ });
39
+
40
+ export const dialog = style({
41
+ boxSizing: "border-box",
42
+ margin: "0 auto",
43
+ padding: 0,
44
+ position: "relative",
45
+ top: "100px",
46
+ width: "auto",
47
+ maxWidth: `calc(100vw - 32px)`,
48
+ paddingBottom: "24px",
49
+ });
50
+
51
+ export const content = style({
52
+ position: "relative",
53
+ backgroundColor: "#FFF",
54
+ backgroundClip: "padding-box",
55
+ border: 0,
56
+ borderRadius: themeVars.rounded.default,
57
+ pointerEvents: "auto",
58
+ padding: `20px 24px`,
59
+ boxShadow: `0 6px 16px 0 rgba(0,0,0,.08), 0 3px 6px -4px rgba(0,0,0,.12), 0 9px 28px 8px rgba(0,0,0,.05)`
60
+ })
61
+
62
+ export const header = style({
63
+ color: themeVars.color.font.default,
64
+ backgroundColor: "#FFF",
65
+ marginBottom: themeVars.space[2],
66
+ });
67
+
68
+ export const footer = style({
69
+ textAlign: "end",
70
+ background: `0 0`,
71
+ marginTop: themeVars.space[2],
72
+ })
73
+
74
+ export const title = style({
75
+ margin: 0,
76
+ color: themeVars.color.font.default,
77
+ fontWeight: 600,
78
+ lineHeight: 1.5,
79
+ wordWrap: "break-word",
80
+ });
81
+
82
+ export const close = style({
83
+ position: "absolute",
84
+ top: `17px`,
85
+ insetInlineEnd: `17px`,
86
+ padding: 0,
87
+ background: `0 0`,
88
+ borderRadius: themeVars.rounded.small,
89
+ width: `22px`,
90
+ height: `22px`,
91
+ border: 0,
92
+ outline: 0,
93
+ cursor: `pointer`,
94
+ selectors: {
95
+ '&:hover': {
96
+ backgroundColor: `hsla(0,0%,45.1%,0.1)`,
97
+ }
98
+ }
99
+ })
@@ -0,0 +1 @@
1
+ export * from './Dialog.css';
@@ -1,34 +0,0 @@
1
- import type { Variant } from '../../types/props';
2
- import type { VNodeChild } from 'vue';
3
-
4
- export type DialogContentType = string;
5
-
6
- export type DialogContentRender = (props: any) => VNodeChild;
7
-
8
- export interface DialogOptions {
9
- title?: string,
10
- render?: DialogContentRender,
11
- content: DialogContentType,
12
- onClose?: () => void,
13
- onOpen?: () => void,
14
- onOk?: () => void,
15
- onCancel?: () => void,
16
- okVariant?: Variant,
17
- okText?: DialogContentType,
18
- cancelText?: DialogContentType,
19
- }
20
-
21
- export interface DialogResponse {
22
- result: boolean,
23
- data: any
24
- }
25
-
26
- export interface DialogApiInjection {
27
- create: (options: DialogOptions) => Dialog
28
- destroyAll: () => void
29
- }
30
-
31
-
32
- export interface Dialog extends DialogOptions {
33
- destroy: () => void
34
- }
@@ -40,5 +40,7 @@ export { default as MTextarea } from './textarea/Textarea.vue';
40
40
  export { default as MTooltip } from './tooltip/Tooltip.vue';
41
41
  export { default as MTransfer } from './transfer/Transfer.vue';
42
42
  export { default as MVirtualScroll } from './virtualscroll/VirtualScroll.vue';
43
+ export { default as MConfirm } from './confirm/Confirm.vue';
44
+ export { default as MConfirmProvider } from './confirm/ConfirmProvider.vue';
43
45
  export { default as MDialog } from './dialog/Dialog.vue';
44
- export { default as MDialogProvider } from './dialog/DialogProvider.vue';
46
+ export { default as MTree } from './tree/Tree.vue';
@@ -596,6 +596,10 @@ export default defineComponent({
596
596
 
597
597
  watch(open, (value: boolean) => {
598
598
  nextTick(() => {
599
+ if (!value) {
600
+ search.value = "";
601
+ }
602
+
599
603
  if (props.searchable && searchRef.value) {
600
604
  searchRef.value.focus();
601
605
  }
@@ -0,0 +1,126 @@
1
+ <template>
2
+ <div style="height: 200px;" ref="selfElRef">
3
+ <VVirtualList
4
+ ref="virtualListInstRef"
5
+ :items="nodesRef"
6
+ itemResizable
7
+ :itemSize="20"
8
+ >
9
+ <template v-slot:default="{ item }">
10
+ <TreeNode :node="item"/>
11
+ </template>
12
+ </VVirtualList>
13
+ </div>
14
+ </template>
15
+
16
+ <script lang="ts">
17
+ import {type VirtualListInst, VVirtualList} from 'vueuc'
18
+ import {computed, defineComponent, provide, ref, toRef} from 'vue'
19
+ import {createTreeMateOptions, treeProps} from "./props";
20
+ import type {Key, TmNode, TreeOption} from "./types";
21
+ import {
22
+ createTreeMate,
23
+ } from 'treemate'
24
+ import TreeNode from "./TreeNode.vue";
25
+ import {treeInjectionKey} from "./types";
26
+ import {call} from "../../call";
27
+ import useMergedState from "../../composables/useMergedState";
28
+
29
+ export default defineComponent({
30
+ components: {TreeNode, VVirtualList},
31
+ name: 'Tree',
32
+ props: treeProps,
33
+ setup: function (props) {
34
+ const selfElRef = ref<HTMLDivElement | null>(null);
35
+ const virtualListInstRef = ref<VirtualListInst | null>(null)
36
+ function getScrollContainer (): HTMLElement | null | undefined {
37
+ return virtualListInstRef.value?.listElRef
38
+ }
39
+ function getScrollContent (): HTMLElement | null | undefined {
40
+ return virtualListInstRef.value?.itemsElRef
41
+ }
42
+
43
+ const displayTreeMateRef = computed(() => {
44
+ return createTreeMate<TreeOption>(
45
+ props.data,
46
+ createTreeMateOptions(
47
+ props.keyField,
48
+ props.childrenField,
49
+ 'disabled',
50
+ props.getChildren
51
+ )
52
+ )
53
+ });
54
+
55
+ const dataTreeMateRef = displayTreeMateRef;
56
+ const controlledExpandedKeysRef = toRef(props, 'expandedKeys')
57
+ const uncontrolledExpandedKeysRef = ref<Key[]>([])
58
+ const mergedExpandedKeysRef = useMergedState(
59
+ controlledExpandedKeysRef,
60
+ uncontrolledExpandedKeysRef
61
+ )
62
+ const nodesRef = computed(() => {
63
+ return displayTreeMateRef.value.getFlattenedNodes(mergedExpandedKeysRef.value);
64
+ });
65
+
66
+ provide(treeInjectionKey, {
67
+ indentRef: toRef(props, 'indent'),
68
+ expandOnClickRef: toRef(props, 'expandOnClick'),
69
+ nodePropsRef: toRef(props, 'nodeProps'),
70
+ handleSwitcherClick
71
+ });
72
+
73
+ // const { watchProps } = props;
74
+ //
75
+ // watchEffect(() => {
76
+ // initUncontrolledExpandedKeys(undefined);
77
+ // })
78
+
79
+ function handleSwitcherClick(node: TmNode): void {
80
+ console.log('i')
81
+ toggleExpand(node);
82
+ }
83
+
84
+ function toggleExpand(node: TmNode): void {
85
+ const {key} = node;
86
+ const {value: mergedExpandedKeys} = mergedExpandedKeysRef
87
+ const index = mergedExpandedKeys.findIndex(
88
+ (expandedNodeId) => expandedNodeId === key
89
+ )
90
+
91
+ if (~index) {
92
+ const expandedKeysAfterChange = Array.from(mergedExpandedKeys);
93
+ expandedKeysAfterChange.splice(index, 1);
94
+ doUpdateExpandedKeys(expandedKeysAfterChange);
95
+ } else {
96
+ const nodeToBeExpanded = displayTreeMateRef.value.getNode(key);
97
+ if (!nodeToBeExpanded || nodeToBeExpanded.isLeaf) {
98
+ return;
99
+ }
100
+
101
+ let nextKeys: Key[] = mergedExpandedKeys.concat(key);
102
+
103
+ doUpdateExpandedKeys(nextKeys)
104
+ }
105
+ }
106
+
107
+ function getOptionsByKeys(keys: Key[]): Array<TreeOption | null> {
108
+ const {getNode} = dataTreeMateRef.value;
109
+ return keys.map((key) => getNode(key)?.rawNode || null);
110
+ }
111
+
112
+ function doUpdateExpandedKeys(
113
+ value: Key[],
114
+ ): void {
115
+ uncontrolledExpandedKeysRef.value = value;
116
+ }
117
+
118
+ return {
119
+ nodesRef,
120
+ displayTreeMateRef,
121
+ selfElRef
122
+ }
123
+ }
124
+ })
125
+
126
+ </script>
@@ -0,0 +1,71 @@
1
+ <template>
2
+ <div
3
+ @click="handleLineClick"
4
+ style="display: flex;"
5
+ >
6
+ <template v-if="indentCount > 0">
7
+ <div v-for="i in indentCount" style="flex-grow: 0; flex-shrink: 0; height: 0;">
8
+ <div :key="i" style="width: 16px;"></div>
9
+ </div>
10
+ </template>
11
+ {{node.rawNode.label}}
12
+ </div>
13
+ </template>
14
+
15
+ <script lang="ts">
16
+ import {ref, defineComponent, type PropType, inject, computed} from "vue";
17
+ import type {TmNode} from "./types";
18
+ import {treeInjectionKey} from "./types";
19
+
20
+ export default defineComponent({
21
+ name: 'TreeNode',
22
+ props: {
23
+ node: {
24
+ type: Object as PropType<TmNode>,
25
+ required: true
26
+ }
27
+ },
28
+ setup(props) {
29
+ const NTree = inject(treeInjectionKey)!;
30
+ const {
31
+ nodePropsRef,
32
+ indentRef,
33
+ handleSwitcherClick: handleSwitcherClickTree
34
+ } = NTree;
35
+
36
+ const selfElRef = ref<HTMLDivElement | null>(null);
37
+
38
+ function _handleClick (e: MouseEvent): void {
39
+ const { value: expandOnClick } = NTree.expandOnClickRef;
40
+ const { node } = props
41
+ if (!expandOnClick && !node.isLeaf) {
42
+ handleSwitcherClick();
43
+ }
44
+ }
45
+
46
+ function handleSwitcherClick(): void {
47
+ const { node } = props;
48
+
49
+ if (!node.isLastChild && !node.shallowLoaded) {
50
+ return;
51
+ }
52
+
53
+ handleSwitcherClickTree(node)
54
+ }
55
+
56
+ const indentCount = computed(() => {
57
+ return props.node.level;
58
+ })
59
+
60
+ function handleLineClick (e: MouseEvent) {
61
+ _handleClick(e);
62
+ }
63
+
64
+ return {
65
+ selfElRef,
66
+ handleLineClick,
67
+ indentCount
68
+ }
69
+ }
70
+ });
71
+ </script>
@@ -0,0 +1,33 @@
1
+ <template>
2
+ <MTree :data="data"/>
3
+ </template>
4
+ <script lang="ts" setup>
5
+ import {ref} from 'vue'
6
+ import type {TreeOption} from "../types";
7
+
8
+ function createData (level = 4, baseKey = ''): TreeOption[] | undefined {
9
+ if (!level) return undefined
10
+
11
+ const result: TreeOption[] = [];
12
+ for (let index = 0; index < (20 - level); index++) {
13
+ const key = '' + baseKey + level + index;
14
+ result.push({
15
+ label: createLabel(level),
16
+ key,
17
+ children: createData(level - 1, key)
18
+ });
19
+ }
20
+
21
+ return result;
22
+ }
23
+
24
+ function createLabel (level: number): string {
25
+ if (level === 4) return 'Out of Tao, One is born'
26
+ if (level === 3) return 'Out of One, Two'
27
+ if (level === 2) return 'Out of Two, Three'
28
+ if (level === 1) return 'Out of Three, the created universe'
29
+ return ''
30
+ }
31
+
32
+ const data = ref(createData());
33
+ </script>
@@ -0,0 +1,16 @@
1
+ import MTree from "../Tree.vue";
2
+
3
+ import {
4
+ MTreeBasic
5
+ } from "./index";
6
+
7
+ import {
8
+ createStory,
9
+ } from "../../../__storybook__";
10
+
11
+ export default {
12
+ component: MTree,
13
+ title: "Components/Tree"
14
+ }
15
+
16
+ export const Basic = createStory(MTreeBasic)
@@ -0,0 +1 @@
1
+ export { default as MTreeBasic } from './basic.vue';