From 560562e5edf6deeaab638c8cc888b49be3db8dd4 Mon Sep 17 00:00:00 2001 From: zernonia Date: Wed, 1 May 2024 19:23:46 +0800 Subject: [PATCH 01/27] chore: wip --- packages/radix-vue/src/Tree/TreeGroup.vue | 43 +++++++++ packages/radix-vue/src/Tree/TreeGroupList.vue | 28 ++++++ packages/radix-vue/src/Tree/TreeItem.vue | 36 ++++++++ packages/radix-vue/src/Tree/TreeRoot.vue | 57 ++++++++++++ packages/radix-vue/src/Tree/index.ts | 4 + .../src/Tree/story/TreeBasic.story.vue | 87 +++++++++++++++++++ 6 files changed, 255 insertions(+) create mode 100644 packages/radix-vue/src/Tree/TreeGroup.vue create mode 100644 packages/radix-vue/src/Tree/TreeGroupList.vue create mode 100644 packages/radix-vue/src/Tree/TreeItem.vue create mode 100644 packages/radix-vue/src/Tree/TreeRoot.vue create mode 100644 packages/radix-vue/src/Tree/index.ts create mode 100644 packages/radix-vue/src/Tree/story/TreeBasic.story.vue diff --git a/packages/radix-vue/src/Tree/TreeGroup.vue b/packages/radix-vue/src/Tree/TreeGroup.vue new file mode 100644 index 000000000..18cc55ca0 --- /dev/null +++ b/packages/radix-vue/src/Tree/TreeGroup.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/packages/radix-vue/src/Tree/TreeGroupList.vue b/packages/radix-vue/src/Tree/TreeGroupList.vue new file mode 100644 index 000000000..fbcb63eaa --- /dev/null +++ b/packages/radix-vue/src/Tree/TreeGroupList.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/packages/radix-vue/src/Tree/TreeItem.vue b/packages/radix-vue/src/Tree/TreeItem.vue new file mode 100644 index 000000000..72e0261ec --- /dev/null +++ b/packages/radix-vue/src/Tree/TreeItem.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/packages/radix-vue/src/Tree/TreeRoot.vue b/packages/radix-vue/src/Tree/TreeRoot.vue new file mode 100644 index 000000000..8bd402404 --- /dev/null +++ b/packages/radix-vue/src/Tree/TreeRoot.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/packages/radix-vue/src/Tree/index.ts b/packages/radix-vue/src/Tree/index.ts new file mode 100644 index 000000000..d58ee1434 --- /dev/null +++ b/packages/radix-vue/src/Tree/index.ts @@ -0,0 +1,4 @@ +export { default as TreeRoot } from './TreeRoot.vue' +export { default as TreeGroup } from './TreeGroup.vue' +export { default as TreeGroupList } from './TreeGroupList.vue' +export { default as TreeItem } from './TreeItem.vue' diff --git a/packages/radix-vue/src/Tree/story/TreeBasic.story.vue b/packages/radix-vue/src/Tree/story/TreeBasic.story.vue new file mode 100644 index 000000000..d1d20fbbb --- /dev/null +++ b/packages/radix-vue/src/Tree/story/TreeBasic.story.vue @@ -0,0 +1,87 @@ + + + From 674d00277817d320f240f4c224c54c888c56af82 Mon Sep 17 00:00:00 2001 From: zernonia Date: Tue, 28 May 2024 23:53:45 +0800 Subject: [PATCH 02/27] chore: wip (very crude impl) --- packages/radix-vue/src/Tree/TreeGroup.vue | 43 ---------- packages/radix-vue/src/Tree/TreeGroupList.vue | 28 ------ packages/radix-vue/src/Tree/TreeItem.vue | 4 +- packages/radix-vue/src/Tree/TreeRoot.vue | 85 +++++++++++++++++-- packages/radix-vue/src/Tree/index.ts | 2 - .../src/Tree/story/TreeBasic.story.vue | 31 +++---- 6 files changed, 92 insertions(+), 101 deletions(-) delete mode 100644 packages/radix-vue/src/Tree/TreeGroup.vue delete mode 100644 packages/radix-vue/src/Tree/TreeGroupList.vue diff --git a/packages/radix-vue/src/Tree/TreeGroup.vue b/packages/radix-vue/src/Tree/TreeGroup.vue deleted file mode 100644 index 18cc55ca0..000000000 --- a/packages/radix-vue/src/Tree/TreeGroup.vue +++ /dev/null @@ -1,43 +0,0 @@ - - - - - diff --git a/packages/radix-vue/src/Tree/TreeGroupList.vue b/packages/radix-vue/src/Tree/TreeGroupList.vue deleted file mode 100644 index fbcb63eaa..000000000 --- a/packages/radix-vue/src/Tree/TreeGroupList.vue +++ /dev/null @@ -1,28 +0,0 @@ - - - - - diff --git a/packages/radix-vue/src/Tree/TreeItem.vue b/packages/radix-vue/src/Tree/TreeItem.vue index 72e0261ec..ab9489baa 100644 --- a/packages/radix-vue/src/Tree/TreeItem.vue +++ b/packages/radix-vue/src/Tree/TreeItem.vue @@ -1,6 +1,6 @@ @@ -28,7 +28,7 @@ const isSelected = computed(() => isEqual(rootContext.modelValue.value, props.va :as="as" :as-child="asChild" :aria-selected="isSelected" - @click.stop="rootContext.onSelect(value)" + @click.stop="rootContext.onToggle(value)" > diff --git a/packages/radix-vue/src/Tree/TreeRoot.vue b/packages/radix-vue/src/Tree/TreeRoot.vue index 8bd402404..56f85981d 100644 --- a/packages/radix-vue/src/Tree/TreeRoot.vue +++ b/packages/radix-vue/src/Tree/TreeRoot.vue @@ -5,53 +5,126 @@ export interface TreeRootProps extends PrimitiveProps { items?: T[] expanded?: string[] defaultExpanded?: string[] + getKey?: (val: T) => string } export type TreeRootEmits = { 'update:expanded': [val: string[]] } -interface TreeRootContext { +interface TreeRootContext { modelValue: Ref onSelect: (val: any) => void + expanded: Ref + onToggle: (val: T) => void + getKey?: (val: T) => string } -export const [injectTreeRootContext, provideTreeRootContext] = createContext('TreeRoot') +interface TreeItem { + children?: T[] +} +type FlattenedItem = Omit & { + hasChildren: boolean + level: number +} + +export const [injectTreeRootContext, provideTreeRootContext] = createContext>('TreeRoot') - diff --git a/packages/radix-vue/src/Tree/index.ts b/packages/radix-vue/src/Tree/index.ts index d58ee1434..f7c5fa5ff 100644 --- a/packages/radix-vue/src/Tree/index.ts +++ b/packages/radix-vue/src/Tree/index.ts @@ -1,4 +1,2 @@ export { default as TreeRoot } from './TreeRoot.vue' -export { default as TreeGroup } from './TreeGroup.vue' -export { default as TreeGroupList } from './TreeGroupList.vue' export { default as TreeItem } from './TreeItem.vue' diff --git a/packages/radix-vue/src/Tree/story/TreeBasic.story.vue b/packages/radix-vue/src/Tree/story/TreeBasic.story.vue index d1d20fbbb..1f4b53b57 100644 --- a/packages/radix-vue/src/Tree/story/TreeBasic.story.vue +++ b/packages/radix-vue/src/Tree/story/TreeBasic.story.vue @@ -1,10 +1,5 @@ -