Skip to content

Commit

Permalink
feat: add directive
Browse files Browse the repository at this point in the history
  • Loading branch information
StevenJPx2 committed Sep 24, 2023
1 parent 01dd1be commit 1fdbbe2
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 4 deletions.
5 changes: 5 additions & 0 deletions playground/app.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<script setup lang="ts">
import SplitText from "../src/runtime/component.vue";
import { vSplitText } from "../src/runtime/plugin.client";
import { ref, useSplitText, useTimeoutFn } from "#imports";
import { promiseTimeout } from "@vueuse/core";
Expand Down Expand Up @@ -33,6 +34,10 @@ useTimeoutFn(async () => {
Hello! brudda
</split-text>

<p v-split-text="{ splitBy: 'lines, words' }">
Yo yo yooooooo nuxt module playground
</p>

<pre>
{{ compRef?.el?.innerText }}
</pre>
Expand Down
2 changes: 1 addition & 1 deletion src/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export default defineNuxtModule<ModuleOptions>({
const resolver = createResolver(import.meta.url);

// Do not add the extension since the `.ts` will be transpiled to `.mjs` after `npm run prepack`
addPlugin(resolver.resolve("./runtime/plugin"));
addPlugin(resolver.resolve("./runtime/plugin.client"));
addImports({
name: "useSplitText",
as: "useSplitText",
Expand Down
16 changes: 16 additions & 0 deletions src/runtime/directive.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { ObjectDirective } from "nuxt/dist/app/compat/capi";
import { UseSplitTextOptions, useSplitText } from "./composable";
import { directiveHooks } from "@vueuse/core";
import SplitType from "split-type";

type VSplitTextOptions = UseSplitTextOptions & {
onComplete?: (instance: SplitType) => void;
};

export const vSplitText: ObjectDirective<HTMLElement, VSplitTextOptions> = {
[directiveHooks.mounted]: (el, binding) => {
const { value } = binding;
const { onComplete } = useSplitText(el, value);
if (!!value.onComplete) onComplete(value.onComplete);
},
};
7 changes: 7 additions & 0 deletions src/runtime/plugin.client.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { defineNuxtPlugin } from "#app";
import { vSplitText } from "./directive";
export { vSplitText };

export default defineNuxtPlugin((nuxt) => {
nuxt.vueApp.directive("split-text", vSplitText);
});
3 changes: 0 additions & 3 deletions src/runtime/plugin.ts

This file was deleted.

0 comments on commit 1fdbbe2

Please sign in to comment.