Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo-mod-jslibs-dist.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'alpinejs/packages/trap/src/index.js')
-rw-r--r--alpinejs/packages/trap/src/index.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/alpinejs/packages/trap/src/index.js b/alpinejs/packages/trap/src/index.js
new file mode 100644
index 0000000..2586f88
--- /dev/null
+++ b/alpinejs/packages/trap/src/index.js
@@ -0,0 +1,32 @@
+import { createFocusTrap } from 'focus-trap';
+
+export default function (Alpine) {
+ Alpine.directive('trap', (el, { expression }, { effect, evaluateLater }) => {
+ let evaluator = evaluateLater(expression)
+
+ let oldValue = false
+
+ let trap = createFocusTrap(el, {
+ escapeDeactivates: false,
+ allowOutsideClick: true
+ })
+
+ effect(() => evaluator(value => {
+ if (oldValue === value) return
+
+ // Start trapping.
+ if (value && ! oldValue) {
+ setTimeout(() => {
+ trap.activate()
+ });
+ }
+
+ // Stop trapping.
+ if (! value && oldValue) {
+ trap.deactivate()
+ }
+
+ oldValue = !! value
+ }))
+ })
+}