Skip to content

Commit

Permalink
[Collapsible]feat: 2/3 (#185)
Browse files Browse the repository at this point in the history
* init

* finish
  • Loading branch information
k11q authored Jul 14, 2023
1 parent 4fa6fce commit a129dca
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 28 deletions.
8 changes: 6 additions & 2 deletions packages/radix-vue/src/Collapsible/CollapsibleContent.vue
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<script lang="ts">
export interface CollapsibleContentProps {
asChild?: boolean;
forceMount?: boolean;
}
</script>

Expand Down Expand Up @@ -81,13 +80,18 @@ onMounted(() => {
isMountAnimationPrevented.value = false;
});
});
const props = withDefaults(defineProps<CollapsibleContentProps>(), {
asChild: false,
});
</script>

<template>
<PrimitiveDiv
ref="primitiveElement"
:asChild="props.asChild"
:data-state="injectedValue?.open.value ? 'open' : 'closed'"
:data-disabled="injectedValue?.disabled?.value ? 'true' : undefined"
:data-disabled="injectedValue?.disabled?.value ? '' : undefined"
:id="injectedValue?.contentId"
:hidden="!isPresent"
:style="{
Expand Down
8 changes: 5 additions & 3 deletions packages/radix-vue/src/Collapsible/CollapsibleRoot.vue
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<script lang="ts">
import type { InjectionKey, Ref } from "vue";
import { useId } from "@/shared";
export interface CollapsibleRootProps {
asChild?: boolean;
defaultOpen?: boolean;
open?: boolean;
onOpenChange?: void;
disabled?: boolean;
}
Expand Down Expand Up @@ -39,10 +39,11 @@ const open = useVModel(props, "open", emit, {
defaultValue: props.defaultOpen,
passive: true,
});
const disabled = useVModel(props, "disabled");
provide<CollapsibleProvideValue>(COLLAPSIBLE_INJECTION_KEY, {
contentId: "1",
contentId: useId(),
disabled,
open,
onOpenToggle: () => {
Expand All @@ -53,8 +54,9 @@ provide<CollapsibleProvideValue>(COLLAPSIBLE_INJECTION_KEY, {

<template>
<PrimitiveDiv
:asChild="props.asChild"
:data-state="props.open ? 'open' : 'closed'"
:data-disabled="props.disabled ? 'true' : undefined"
:data-disabled="props.disabled ? '' : undefined"
>
<slot :open="open" />
</PrimitiveDiv>
Expand Down
7 changes: 6 additions & 1 deletion packages/radix-vue/src/Collapsible/CollapsibleTrigger.vue
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,20 @@ import {
const injectedValue = inject<CollapsibleProvideValue>(
COLLAPSIBLE_INJECTION_KEY
);
const props = withDefaults(defineProps<CollapsibleTriggerProps>(), {
asChild: false,
});
</script>

<template>
<PrimitiveButton
type="button"
:asChild="props.asChild"
:aria-controls="injectedValue?.contentId"
:aria-expanded="injectedValue?.open.value || false"
:data-state="injectedValue?.open.value ? 'open' : 'closed'"
:data-disabled="injectedValue?.disabled?.value ? 'true' : undefined"
:data-disabled="injectedValue?.disabled?.value ? '' : undefined"
:disabled="injectedValue?.disabled?.value"
@click="injectedValue?.onOpenToggle"
>
Expand Down
31 changes: 12 additions & 19 deletions playground/vue3/src/components/Demo/CollapsibleDemo.vue
Original file line number Diff line number Diff line change
@@ -1,34 +1,27 @@
<script setup lang="ts">
import { ref } from 'vue'
import { CollapsibleContent, CollapsibleRoot, CollapsibleTrigger } from 'radix-vue'
import { Icon } from '@iconify/vue'
import {
CollapsibleContent,
CollapsibleRoot,
CollapsibleTrigger,
} from '../../../../../packages/radix-vue/src'
const rootOpen = ref(false)
const rootDisabled = ref(false)
const open = ref(false)
</script>

<template>
<div class="absolute left-4 top-3 text-sm">
<p>Value: {{ rootOpen ? "checked" : "unchecked" }}</p>
<button
class="bg-white/20 px-2 py-1 rounded-md active:scale-90 duration-100 transform hover:bg-white/40 active:bg-white/20"
@click="rootOpen = !rootOpen"
>
{{ rootOpen ? "Close" : "Open" }}
</button>
</div>
<CollapsibleRoot v-model:open="rootOpen" class="w-[300px]" :disabled="rootDisabled">
<div style="display: flex; align-items: center; justify-content: space-between">
<span class="text-violet11 text-[15px] leading-[25px]" style="color: white"> @mujahidfa starred 3 repos </span>
<span class="text-white text-[15px] leading-[25px]">
@peduarte starred 3 repos
</span>
<CollapsibleTrigger
as-child
class="rounded-full h-[25px] w-[25px] inline-flex items-center justify-center text-violet11 shadow-[0_2px_10px] shadow-blackA7 outline-none data-[state=closed]:bg-white data-[state=open]:bg-violet3 hover:bg-violet3 focus:shadow-[0_0_0_2px] focus:shadow-black"
class="cursor-default rounded-full h-[25px] w-[25px] inline-flex items-center justify-center text-violet11 shadow-[0_2px_10px] shadow-blackA7 outline-none data-[state=closed]:bg-white data-[state=open]:bg-violet3 hover:bg-violet3 focus:shadow-[0_0_0_2px] focus:shadow-black"
>
<button>
<Icon v-if="rootOpen" icon="radix-icons:cross-2" class="h-3 w-3 text-black" />
<Icon v-else icon="radix-icons:row-spacing" class="h-3 w-3 text-black" />
</button>
<Icon v-if="rootOpen" icon="radix-icons:cross-2" class="h-3.5 w-3.5" />
<Icon v-else icon="radix-icons:row-spacing" class="h-3.5 w-3.5" />
</CollapsibleTrigger>
</div>

Expand All @@ -41,7 +34,7 @@ const open = ref(false)
<span class="text-violet11 text-[15px] leading-[25px]">vuejs/core</span>
</div>
<div class="bg-white rounded my-[10px] p-[10px] shadow-[0_2px_10px] shadow-blackA7">
<span class="text-violet11 text-[15px] leading-[25px]">nuxt/nuxt</span>
<span class="text-violet11 text-[15px] leading-[25px]">@radix-ui/primitives</span>
</div>
</CollapsibleContent>
</CollapsibleRoot>
Expand Down
4 changes: 2 additions & 2 deletions playground/vue3/src/components/Demo/ContextMenuDemo.vue
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ import {
ContextMenuRadioItem,
ContextMenuRoot,
ContextMenuSeparator,
ContextMenuTrigger,
ContextMenuSub,
ContextMenuSubContent,
ContextMenuSubTrigger
ContextMenuSubTrigger,
ContextMenuTrigger,
} from '../../../../../packages/radix-vue/src'
const toggleState = ref(false)
Expand Down
2 changes: 1 addition & 1 deletion playground/vue3/src/components/Demo/TabsDemo.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<script setup lang="ts">
import { TabsContent, TabsList, TabsRoot, TabsTrigger } from '../../../../../packages/radix-vue/src'
import { ref } from 'vue'
import { TabsContent, TabsList, TabsRoot, TabsTrigger } from '../../../../../packages/radix-vue/src'
const toggleStateSingle = ref('tab1')
</script>
Expand Down

0 comments on commit a129dca

Please sign in to comment.