@tamagui/focus-scope 2.0.0-rc.26 → 2.0.0-rc.26-1773452370596

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/focus-scope",
3
- "version": "2.0.0-rc.26",
3
+ "version": "2.0.0-rc.26-1773452370596",
4
4
  "source": "src/index.ts",
5
5
  "files": [
6
6
  "src",
@@ -34,15 +34,15 @@
34
34
  "clean:build": "tamagui-build clean:build"
35
35
  },
36
36
  "dependencies": {
37
- "@tamagui/compose-refs": "2.0.0-rc.26",
38
- "@tamagui/constants": "2.0.0-rc.26",
39
- "@tamagui/create-context": "2.0.0-rc.26",
40
- "@tamagui/start-transition": "2.0.0-rc.26",
41
- "@tamagui/use-async": "2.0.0-rc.26",
42
- "@tamagui/use-event": "2.0.0-rc.26"
37
+ "@tamagui/compose-refs": "2.0.0-rc.26-1773452370596",
38
+ "@tamagui/constants": "2.0.0-rc.26-1773452370596",
39
+ "@tamagui/create-context": "2.0.0-rc.26-1773452370596",
40
+ "@tamagui/start-transition": "2.0.0-rc.26-1773452370596",
41
+ "@tamagui/use-async": "2.0.0-rc.26-1773452370596",
42
+ "@tamagui/use-event": "2.0.0-rc.26-1773452370596"
43
43
  },
44
44
  "devDependencies": {
45
- "@tamagui/build": "2.0.0-rc.26",
45
+ "@tamagui/build": "2.0.0-rc.26-1773452370596",
46
46
  "react": ">=19"
47
47
  },
48
48
  "peerDependencies": {
@@ -1,249 +0,0 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: !0 });
9
- }, __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from == "object" || typeof from == "function")
11
- for (let key of __getOwnPropNames(from))
12
- !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
- return to;
14
- };
15
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
16
- // If the importer is in node compatibility mode or this is not an ESM
17
- // file that has been converted to a CommonJS file using a Babel-
18
- // compatible transform (i.e. "__esModule" has not been set), then set
19
- // "default" to the CommonJS "module.exports" for node compatibility.
20
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
21
- mod
22
- )), __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
23
- var FocusScope_exports = {};
24
- __export(FocusScope_exports, {
25
- FocusScope: () => FocusScope,
26
- useFocusScope: () => useFocusScope
27
- });
28
- module.exports = __toCommonJS(FocusScope_exports);
29
- var import_compose_refs = require("@tamagui/compose-refs"), import_constants = require("@tamagui/constants"), import_use_async = require("@tamagui/use-async"), import_use_event = require("@tamagui/use-event"), React = __toESM(require("react"), 1), import_FocusScopeController = require("./FocusScopeController"), import_jsx_runtime = require("react/jsx-runtime");
30
- const AUTOFOCUS_ON_MOUNT = "focusScope.autoFocusOnMount", AUTOFOCUS_ON_UNMOUNT = "focusScope.autoFocusOnUnmount", EVENT_OPTIONS = { bubbles: !1, cancelable: !0 }, FocusScope = React.forwardRef(
31
- function({ __scopeFocusScope, ...props }, forwardedRef) {
32
- const context = (0, import_FocusScopeController.useFocusScopeControllerContext)("FocusScope", __scopeFocusScope, {
33
- warn: !1,
34
- fallback: {}
35
- }), mergedProps = {
36
- ...props,
37
- enabled: context.enabled ?? props.enabled,
38
- loop: context.loop ?? props.loop,
39
- trapped: context.trapped ?? props.trapped,
40
- onMountAutoFocus: context.onMountAutoFocus ?? props.onMountAutoFocus,
41
- onUnmountAutoFocus: context.onUnmountAutoFocus ?? props.onUnmountAutoFocus,
42
- forceUnmount: context.forceUnmount ?? props.forceUnmount,
43
- focusOnIdle: context.focusOnIdle ?? props.focusOnIdle
44
- }, childProps = useFocusScope(mergedProps, forwardedRef);
45
- return typeof mergedProps.children == "function" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: mergedProps.children(childProps) }) : React.cloneElement(
46
- React.Children.only(mergedProps.children),
47
- childProps
48
- );
49
- }
50
- );
51
- function setupFocusTrap(container, lastFocusedElementRef, focusScope) {
52
- const controller = new AbortController();
53
- let rafId = null;
54
- function scheduleRefocus() {
55
- if (rafId) return;
56
- const elementToFocus = lastFocusedElementRef.current;
57
- rafId = requestAnimationFrame(() => {
58
- rafId = null, !focusScope.paused && (focusScope.stopped || container.isConnected && (container.contains(document.activeElement) || focus(elementToFocus)));
59
- });
60
- }
61
- function handleFocusIn(event) {
62
- if (focusScope.paused) return;
63
- const target = event.target;
64
- container.contains(target) ? (target?.addEventListener("blur", handleBlur, { signal: controller.signal }), lastFocusedElementRef.current = target) : scheduleRefocus();
65
- }
66
- function handleFocusOut(event) {
67
- controller.abort(), !focusScope.paused && (container.contains(event.relatedTarget) || scheduleRefocus());
68
- }
69
- function handleBlur() {
70
- }
71
- return document.addEventListener("focusin", handleFocusIn), document.addEventListener("focusout", handleFocusOut), () => {
72
- rafId && (cancelAnimationFrame(rafId), rafId = null), controller.abort(), document.removeEventListener("focusin", handleFocusIn), document.removeEventListener("focusout", handleFocusOut);
73
- };
74
- }
75
- function useFocusScope(props, forwardedRef) {
76
- const {
77
- loop = !1,
78
- enabled = !0,
79
- trapped = !1,
80
- onMountAutoFocus: onMountAutoFocusProp,
81
- onUnmountAutoFocus: onUnmountAutoFocusProp,
82
- forceUnmount,
83
- focusOnIdle = !0,
84
- children,
85
- ...scopeProps
86
- } = props, [container, setContainer] = React.useState(null), containerRef = React.useRef(null), onMountAutoFocus = (0, import_use_event.useEvent)(onMountAutoFocusProp), onUnmountAutoFocus = (0, import_use_event.useEvent)(onUnmountAutoFocusProp), lastFocusedElementRef = React.useRef(null), focusScopeRef = React.useRef({
87
- paused: !1,
88
- stopped: !1,
89
- // set to true when cleanup starts, signals trap to stop
90
- pause() {
91
- this.paused = !0;
92
- },
93
- resume() {
94
- this.paused = !1;
95
- },
96
- stop() {
97
- this.stopped = !0;
98
- }
99
- }), focusScope = focusScopeRef.current, trapCleanupRef = React.useRef(null), setContainerRef = React.useCallback(
100
- (node) => {
101
- trapCleanupRef.current && (trapCleanupRef.current(), trapCleanupRef.current = null), containerRef.current = node, import_constants.isWeb && node && enabled && trapped && (trapCleanupRef.current = setupFocusTrap(
102
- node,
103
- lastFocusedElementRef,
104
- focusScopeRef.current
105
- )), setContainer(node);
106
- },
107
- [enabled, trapped]
108
- ), composedRefs = (0, import_compose_refs.useComposedRefs)(forwardedRef, setContainerRef);
109
- (0, import_constants.useIsomorphicLayoutEffect)(() => (trapped || (focusScope.stopped = !0, trapCleanupRef.current && (trapCleanupRef.current(), trapCleanupRef.current = null)), () => {
110
- trapCleanupRef.current && (trapCleanupRef.current(), trapCleanupRef.current = null);
111
- }), [trapped, focusScope]), (0, import_use_async.useAsyncEffect)(
112
- async (signal) => {
113
- if (!enabled || !container || forceUnmount) return;
114
- trapped && (focusScope.stopped = !1), focusScopesStack.add(focusScope);
115
- const previouslyFocusedElement = document.activeElement;
116
- if (!(container.contains(previouslyFocusedElement) && previouslyFocusedElement !== null && !isHidden(previouslyFocusedElement, { upTo: container }))) {
117
- const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);
118
- if (container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus), container.dispatchEvent(mountEvent), !mountEvent.defaultPrevented) {
119
- focusOnIdle && await (0, import_use_async.idle)(
120
- signal,
121
- typeof focusOnIdle == "object" ? focusOnIdle : {
122
- // we can't wait too long or else user can take an action and then we focus
123
- max: 200,
124
- min: typeof focusOnIdle == "number" ? focusOnIdle : 16
125
- }
126
- );
127
- const allCandidates = getTabbableCandidates(container), visibleCandidates = removeLinks(allCandidates).filter(
128
- (candidate) => !isHidden(candidate, { upTo: container })
129
- );
130
- focusFirst(visibleCandidates, { select: !0 }), visibleCandidates.length > 0 ? lastFocusedElementRef.current = visibleCandidates[0] : lastFocusedElementRef.current = container, document.activeElement === previouslyFocusedElement && visibleCandidates.length === 0 && focus(container);
131
- }
132
- }
133
- return () => {
134
- focusScope.stop(), container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);
135
- const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);
136
- if (container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus), container.dispatchEvent(unmountEvent), !unmountEvent.defaultPrevented) {
137
- const currentFocus = document.activeElement;
138
- currentFocus && currentFocus !== document.body && currentFocus !== container && !container.contains(currentFocus) || focus(previouslyFocusedElement ?? document.body, { select: !0 });
139
- }
140
- container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus), focusScopesStack.remove(focusScope);
141
- };
142
- },
143
- [
144
- enabled,
145
- container,
146
- forceUnmount,
147
- onMountAutoFocus,
148
- onUnmountAutoFocus,
149
- focusScope,
150
- focusOnIdle
151
- ]
152
- );
153
- const handleKeyDown = React.useCallback(
154
- (event) => {
155
- if (!trapped || !loop || focusScope.paused || !enabled || !container) return;
156
- const isTabKey = event.key === "Tab" && !event.altKey && !event.ctrlKey && !event.metaKey, focusedElement = document.activeElement;
157
- if (isTabKey && focusedElement) {
158
- const [first, last] = getTabbableEdges(container);
159
- first && last ? !event.shiftKey && focusedElement === last ? (event.preventDefault(), loop && focus(first, { select: !0 })) : event.shiftKey && focusedElement === first && (event.preventDefault(), loop && focus(last, { select: !0 })) : focusedElement === container && event.preventDefault();
160
- }
161
- },
162
- [loop, trapped, focusScope.paused, enabled, container]
163
- );
164
- React.useEffect(() => {
165
- if (!container || !trapped || !loop || !enabled) return;
166
- const handleKeyDownCapture = (event) => {
167
- event.key === "Tab" && handleKeyDown(event);
168
- };
169
- return container.addEventListener("keydown", handleKeyDownCapture, !0), () => {
170
- container.removeEventListener("keydown", handleKeyDownCapture, !0);
171
- };
172
- }, [container, trapped, loop, enabled, handleKeyDown]);
173
- const existingOnKeyDown = scopeProps.onKeyDown, composedOnKeyDown = React.useCallback(
174
- (event) => {
175
- existingOnKeyDown?.(event);
176
- },
177
- [existingOnKeyDown]
178
- );
179
- return {
180
- ...scopeProps,
181
- ref: composedRefs,
182
- onKeyDown: composedOnKeyDown
183
- };
184
- }
185
- function focusFirst(candidates, { select = !1 } = {}) {
186
- const previouslyFocusedElement = document.activeElement;
187
- for (const candidate of candidates)
188
- if (focus(candidate, { select }), document.activeElement !== previouslyFocusedElement) return;
189
- }
190
- function getTabbableEdges(container) {
191
- const candidates = getTabbableCandidates(container), first = findVisible(candidates, container), last = findVisible(candidates.reverse(), container);
192
- return [first, last];
193
- }
194
- function getTabbableCandidates(container) {
195
- const nodes = [], walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {
196
- acceptNode: (node) => {
197
- const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden";
198
- return node.disabled || node.hidden || isHiddenInput ? NodeFilter.FILTER_SKIP : node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
199
- }
200
- });
201
- for (; walker.nextNode(); ) nodes.push(walker.currentNode);
202
- return nodes;
203
- }
204
- function findVisible(elements, container) {
205
- for (const element of elements)
206
- if (!isHidden(element, { upTo: container })) return element;
207
- }
208
- function isHidden(node, { upTo }) {
209
- if (getComputedStyle(node).visibility === "hidden") return !0;
210
- for (; node; ) {
211
- if (upTo !== void 0 && node === upTo) return !1;
212
- if (getComputedStyle(node).display === "none") return !0;
213
- node = node.parentElement;
214
- }
215
- return !1;
216
- }
217
- function isSelectableInput(element) {
218
- return element instanceof HTMLInputElement && "select" in element;
219
- }
220
- function focus(element, { select = !1 } = {}) {
221
- if (element?.focus) {
222
- const previouslyFocusedElement = document.activeElement;
223
- try {
224
- element.focus({ preventScroll: !0 }), element !== previouslyFocusedElement && isSelectableInput(element) && select && element.select();
225
- } catch {
226
- }
227
- }
228
- }
229
- const focusScopesStack = createFocusScopesStack();
230
- function createFocusScopesStack() {
231
- let stack = [];
232
- return {
233
- add(focusScope) {
234
- const activeFocusScope = stack[0];
235
- focusScope !== activeFocusScope && activeFocusScope?.pause(), stack = arrayRemove(stack, focusScope), stack.unshift(focusScope);
236
- },
237
- remove(focusScope) {
238
- stack = arrayRemove(stack, focusScope), stack[0]?.resume();
239
- }
240
- };
241
- }
242
- function arrayRemove(array, item) {
243
- const updatedArray = [...array], index = updatedArray.indexOf(item);
244
- return index !== -1 && updatedArray.splice(index, 1), updatedArray;
245
- }
246
- function removeLinks(items) {
247
- return items.filter((item) => item.tagName !== "A");
248
- }
249
- //# sourceMappingURL=FocusScope.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/FocusScope.tsx"],
4
- "mappings": "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",
5
- "names": []
6
- }
@@ -1,69 +0,0 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: !0 });
9
- }, __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from == "object" || typeof from == "function")
11
- for (let key of __getOwnPropNames(from))
12
- !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
- return to;
14
- };
15
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
16
- // If the importer is in node compatibility mode or this is not an ESM
17
- // file that has been converted to a CommonJS file using a Babel-
18
- // compatible transform (i.e. "__esModule" has not been set), then set
19
- // "default" to the CommonJS "module.exports" for node compatibility.
20
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
21
- mod
22
- )), __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
23
- var FocusScopeController_exports = {};
24
- __export(FocusScopeController_exports, {
25
- FocusScopeController: () => FocusScopeControllerComponent,
26
- FocusScopeControllerProvider: () => FocusScopeControllerProvider,
27
- createFocusScopeControllerScope: () => createFocusScopeControllerScope,
28
- useFocusScopeControllerContext: () => useFocusScopeControllerContext
29
- });
30
- module.exports = __toCommonJS(FocusScopeController_exports);
31
- var import_create_context = require("@tamagui/create-context"), import_use_event = require("@tamagui/use-event"), React = __toESM(require("react"), 1), import_jsx_runtime = require("react/jsx-runtime");
32
- const FOCUS_SCOPE_CONTROLLER_NAME = "FocusScopeController", [createFocusScopeControllerContext, createFocusScopeControllerScope] = (0, import_create_context.createContextScope)(FOCUS_SCOPE_CONTROLLER_NAME), [FocusScopeControllerProvider, useFocusScopeControllerContext] = createFocusScopeControllerContext(
33
- FOCUS_SCOPE_CONTROLLER_NAME
34
- );
35
- function FocusScopeController(props) {
36
- const {
37
- __scopeFocusScope,
38
- children,
39
- enabled,
40
- loop,
41
- trapped,
42
- onMountAutoFocus,
43
- onUnmountAutoFocus,
44
- forceUnmount,
45
- focusOnIdle
46
- } = props, stableOnMountAutoFocus = (0, import_use_event.useEvent)(onMountAutoFocus), stableOnUnmountAutoFocus = (0, import_use_event.useEvent)(onUnmountAutoFocus), contextValue = React.useMemo(
47
- () => ({
48
- enabled,
49
- loop,
50
- trapped,
51
- onMountAutoFocus: stableOnMountAutoFocus,
52
- onUnmountAutoFocus: stableOnUnmountAutoFocus,
53
- forceUnmount,
54
- focusOnIdle
55
- }),
56
- [
57
- enabled,
58
- loop,
59
- trapped,
60
- stableOnMountAutoFocus,
61
- stableOnUnmountAutoFocus,
62
- forceUnmount,
63
- focusOnIdle
64
- ]
65
- );
66
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FocusScopeControllerProvider, { scope: __scopeFocusScope, ...contextValue, children });
67
- }
68
- const FocusScopeControllerComponent = FocusScopeController;
69
- //# sourceMappingURL=FocusScopeController.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/FocusScopeController.tsx"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAmC,oCACnC,mBAAyB,+BACzB,QAAuB,8BA8DnB;AA1DJ,MAAM,8BAA8B,wBAE9B,CAAC,mCAAmC,+BAA+B,QACvE,0CAAmB,2BAA2B,GAI1C,CAAC,8BAA8B,8BAA8B,IACjE;AAAA,EACE;AACF;AAUF,SAAS,qBAAqB,OAA+C;AAC3E,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,OAEE,6BAAyB,2BAAS,gBAAgB,GAClD,+BAA2B,2BAAS,kBAAkB,GAEtD,eAAe,MAAM;AAAA,IACzB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAkB;AAAA,MAClB,oBAAoB;AAAA,MACpB;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SACE,4CAAC,gCAA6B,OAAO,mBAAoB,GAAG,cACzD,UACH;AAEJ;AAEA,MAAM,gCAAgC;",
5
- "names": []
6
- }
package/dist/cjs/types.js DELETED
@@ -1,14 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __copyProps = (to, from, except, desc) => {
6
- if (from && typeof from == "object" || typeof from == "function")
7
- for (let key of __getOwnPropNames(from))
8
- !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
9
- return to;
10
- };
11
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
12
- var types_exports = {};
13
- module.exports = __toCommonJS(types_exports);
14
- //# sourceMappingURL=types.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/types.tsx"],
4
- "mappings": ";;;;;;;;;;;AAAA;AAAA;",
5
- "names": []
6
- }
@@ -1,231 +0,0 @@
1
- import { useComposedRefs } from "@tamagui/compose-refs";
2
- import { isWeb, useIsomorphicLayoutEffect } from "@tamagui/constants";
3
- import { idle, useAsyncEffect } from "@tamagui/use-async";
4
- import { useEvent } from "@tamagui/use-event";
5
- import * as React from "react";
6
- import { useFocusScopeControllerContext } from "./FocusScopeController";
7
- import { Fragment, jsx } from "react/jsx-runtime";
8
- const AUTOFOCUS_ON_MOUNT = "focusScope.autoFocusOnMount", AUTOFOCUS_ON_UNMOUNT = "focusScope.autoFocusOnUnmount", EVENT_OPTIONS = { bubbles: !1, cancelable: !0 }, FocusScope = React.forwardRef(
9
- function({ __scopeFocusScope, ...props }, forwardedRef) {
10
- const context = useFocusScopeControllerContext("FocusScope", __scopeFocusScope, {
11
- warn: !1,
12
- fallback: {}
13
- }), mergedProps = {
14
- ...props,
15
- enabled: context.enabled ?? props.enabled,
16
- loop: context.loop ?? props.loop,
17
- trapped: context.trapped ?? props.trapped,
18
- onMountAutoFocus: context.onMountAutoFocus ?? props.onMountAutoFocus,
19
- onUnmountAutoFocus: context.onUnmountAutoFocus ?? props.onUnmountAutoFocus,
20
- forceUnmount: context.forceUnmount ?? props.forceUnmount,
21
- focusOnIdle: context.focusOnIdle ?? props.focusOnIdle
22
- }, childProps = useFocusScope(mergedProps, forwardedRef);
23
- return typeof mergedProps.children == "function" ? /* @__PURE__ */ jsx(Fragment, { children: mergedProps.children(childProps) }) : React.cloneElement(
24
- React.Children.only(mergedProps.children),
25
- childProps
26
- );
27
- }
28
- );
29
- function setupFocusTrap(container, lastFocusedElementRef, focusScope) {
30
- const controller = new AbortController();
31
- let rafId = null;
32
- function scheduleRefocus() {
33
- if (rafId) return;
34
- const elementToFocus = lastFocusedElementRef.current;
35
- rafId = requestAnimationFrame(() => {
36
- rafId = null, !focusScope.paused && (focusScope.stopped || container.isConnected && (container.contains(document.activeElement) || focus(elementToFocus)));
37
- });
38
- }
39
- function handleFocusIn(event) {
40
- if (focusScope.paused) return;
41
- const target = event.target;
42
- container.contains(target) ? (target?.addEventListener("blur", handleBlur, { signal: controller.signal }), lastFocusedElementRef.current = target) : scheduleRefocus();
43
- }
44
- function handleFocusOut(event) {
45
- controller.abort(), !focusScope.paused && (container.contains(event.relatedTarget) || scheduleRefocus());
46
- }
47
- function handleBlur() {
48
- }
49
- return document.addEventListener("focusin", handleFocusIn), document.addEventListener("focusout", handleFocusOut), () => {
50
- rafId && (cancelAnimationFrame(rafId), rafId = null), controller.abort(), document.removeEventListener("focusin", handleFocusIn), document.removeEventListener("focusout", handleFocusOut);
51
- };
52
- }
53
- function useFocusScope(props, forwardedRef) {
54
- const {
55
- loop = !1,
56
- enabled = !0,
57
- trapped = !1,
58
- onMountAutoFocus: onMountAutoFocusProp,
59
- onUnmountAutoFocus: onUnmountAutoFocusProp,
60
- forceUnmount,
61
- focusOnIdle = !0,
62
- children,
63
- ...scopeProps
64
- } = props, [container, setContainer] = React.useState(null), containerRef = React.useRef(null), onMountAutoFocus = useEvent(onMountAutoFocusProp), onUnmountAutoFocus = useEvent(onUnmountAutoFocusProp), lastFocusedElementRef = React.useRef(null), focusScopeRef = React.useRef({
65
- paused: !1,
66
- stopped: !1,
67
- // set to true when cleanup starts, signals trap to stop
68
- pause() {
69
- this.paused = !0;
70
- },
71
- resume() {
72
- this.paused = !1;
73
- },
74
- stop() {
75
- this.stopped = !0;
76
- }
77
- }), focusScope = focusScopeRef.current, trapCleanupRef = React.useRef(null), setContainerRef = React.useCallback(
78
- (node) => {
79
- trapCleanupRef.current && (trapCleanupRef.current(), trapCleanupRef.current = null), containerRef.current = node, isWeb && node && enabled && trapped && (trapCleanupRef.current = setupFocusTrap(
80
- node,
81
- lastFocusedElementRef,
82
- focusScopeRef.current
83
- )), setContainer(node);
84
- },
85
- [enabled, trapped]
86
- ), composedRefs = useComposedRefs(forwardedRef, setContainerRef);
87
- useIsomorphicLayoutEffect(() => (trapped || (focusScope.stopped = !0, trapCleanupRef.current && (trapCleanupRef.current(), trapCleanupRef.current = null)), () => {
88
- trapCleanupRef.current && (trapCleanupRef.current(), trapCleanupRef.current = null);
89
- }), [trapped, focusScope]), useAsyncEffect(
90
- async (signal) => {
91
- if (!enabled || !container || forceUnmount) return;
92
- trapped && (focusScope.stopped = !1), focusScopesStack.add(focusScope);
93
- const previouslyFocusedElement = document.activeElement;
94
- if (!(container.contains(previouslyFocusedElement) && previouslyFocusedElement !== null && !isHidden(previouslyFocusedElement, { upTo: container }))) {
95
- const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);
96
- if (container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus), container.dispatchEvent(mountEvent), !mountEvent.defaultPrevented) {
97
- focusOnIdle && await idle(
98
- signal,
99
- typeof focusOnIdle == "object" ? focusOnIdle : {
100
- // we can't wait too long or else user can take an action and then we focus
101
- max: 200,
102
- min: typeof focusOnIdle == "number" ? focusOnIdle : 16
103
- }
104
- );
105
- const allCandidates = getTabbableCandidates(container), visibleCandidates = removeLinks(allCandidates).filter(
106
- (candidate) => !isHidden(candidate, { upTo: container })
107
- );
108
- focusFirst(visibleCandidates, { select: !0 }), visibleCandidates.length > 0 ? lastFocusedElementRef.current = visibleCandidates[0] : lastFocusedElementRef.current = container, document.activeElement === previouslyFocusedElement && visibleCandidates.length === 0 && focus(container);
109
- }
110
- }
111
- return () => {
112
- focusScope.stop(), container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);
113
- const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);
114
- if (container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus), container.dispatchEvent(unmountEvent), !unmountEvent.defaultPrevented) {
115
- const currentFocus = document.activeElement;
116
- currentFocus && currentFocus !== document.body && currentFocus !== container && !container.contains(currentFocus) || focus(previouslyFocusedElement ?? document.body, { select: !0 });
117
- }
118
- container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus), focusScopesStack.remove(focusScope);
119
- };
120
- },
121
- [
122
- enabled,
123
- container,
124
- forceUnmount,
125
- onMountAutoFocus,
126
- onUnmountAutoFocus,
127
- focusScope,
128
- focusOnIdle
129
- ]
130
- );
131
- const handleKeyDown = React.useCallback(
132
- (event) => {
133
- if (!trapped || !loop || focusScope.paused || !enabled || !container) return;
134
- const isTabKey = event.key === "Tab" && !event.altKey && !event.ctrlKey && !event.metaKey, focusedElement = document.activeElement;
135
- if (isTabKey && focusedElement) {
136
- const [first, last] = getTabbableEdges(container);
137
- first && last ? !event.shiftKey && focusedElement === last ? (event.preventDefault(), loop && focus(first, { select: !0 })) : event.shiftKey && focusedElement === first && (event.preventDefault(), loop && focus(last, { select: !0 })) : focusedElement === container && event.preventDefault();
138
- }
139
- },
140
- [loop, trapped, focusScope.paused, enabled, container]
141
- );
142
- React.useEffect(() => {
143
- if (!container || !trapped || !loop || !enabled) return;
144
- const handleKeyDownCapture = (event) => {
145
- event.key === "Tab" && handleKeyDown(event);
146
- };
147
- return container.addEventListener("keydown", handleKeyDownCapture, !0), () => {
148
- container.removeEventListener("keydown", handleKeyDownCapture, !0);
149
- };
150
- }, [container, trapped, loop, enabled, handleKeyDown]);
151
- const existingOnKeyDown = scopeProps.onKeyDown, composedOnKeyDown = React.useCallback(
152
- (event) => {
153
- existingOnKeyDown?.(event);
154
- },
155
- [existingOnKeyDown]
156
- );
157
- return {
158
- ...scopeProps,
159
- ref: composedRefs,
160
- onKeyDown: composedOnKeyDown
161
- };
162
- }
163
- function focusFirst(candidates, { select = !1 } = {}) {
164
- const previouslyFocusedElement = document.activeElement;
165
- for (const candidate of candidates)
166
- if (focus(candidate, { select }), document.activeElement !== previouslyFocusedElement) return;
167
- }
168
- function getTabbableEdges(container) {
169
- const candidates = getTabbableCandidates(container), first = findVisible(candidates, container), last = findVisible(candidates.reverse(), container);
170
- return [first, last];
171
- }
172
- function getTabbableCandidates(container) {
173
- const nodes = [], walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {
174
- acceptNode: (node) => {
175
- const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden";
176
- return node.disabled || node.hidden || isHiddenInput ? NodeFilter.FILTER_SKIP : node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
177
- }
178
- });
179
- for (; walker.nextNode(); ) nodes.push(walker.currentNode);
180
- return nodes;
181
- }
182
- function findVisible(elements, container) {
183
- for (const element of elements)
184
- if (!isHidden(element, { upTo: container })) return element;
185
- }
186
- function isHidden(node, { upTo }) {
187
- if (getComputedStyle(node).visibility === "hidden") return !0;
188
- for (; node; ) {
189
- if (upTo !== void 0 && node === upTo) return !1;
190
- if (getComputedStyle(node).display === "none") return !0;
191
- node = node.parentElement;
192
- }
193
- return !1;
194
- }
195
- function isSelectableInput(element) {
196
- return element instanceof HTMLInputElement && "select" in element;
197
- }
198
- function focus(element, { select = !1 } = {}) {
199
- if (element?.focus) {
200
- const previouslyFocusedElement = document.activeElement;
201
- try {
202
- element.focus({ preventScroll: !0 }), element !== previouslyFocusedElement && isSelectableInput(element) && select && element.select();
203
- } catch {
204
- }
205
- }
206
- }
207
- const focusScopesStack = createFocusScopesStack();
208
- function createFocusScopesStack() {
209
- let stack = [];
210
- return {
211
- add(focusScope) {
212
- const activeFocusScope = stack[0];
213
- focusScope !== activeFocusScope && activeFocusScope?.pause(), stack = arrayRemove(stack, focusScope), stack.unshift(focusScope);
214
- },
215
- remove(focusScope) {
216
- stack = arrayRemove(stack, focusScope), stack[0]?.resume();
217
- }
218
- };
219
- }
220
- function arrayRemove(array, item) {
221
- const updatedArray = [...array], index = updatedArray.indexOf(item);
222
- return index !== -1 && updatedArray.splice(index, 1), updatedArray;
223
- }
224
- function removeLinks(items) {
225
- return items.filter((item) => item.tagName !== "A");
226
- }
227
- export {
228
- FocusScope,
229
- useFocusScope
230
- };
231
- //# sourceMappingURL=FocusScope.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/FocusScope.tsx"],
4
- "mappings": "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",
5
- "names": []
6
- }
@@ -1,48 +0,0 @@
1
- import { createContextScope } from "@tamagui/create-context";
2
- import { useEvent } from "@tamagui/use-event";
3
- import * as React from "react";
4
- import { jsx } from "react/jsx-runtime";
5
- const FOCUS_SCOPE_CONTROLLER_NAME = "FocusScopeController", [createFocusScopeControllerContext, createFocusScopeControllerScope] = createContextScope(FOCUS_SCOPE_CONTROLLER_NAME), [FocusScopeControllerProvider, useFocusScopeControllerContext] = createFocusScopeControllerContext(
6
- FOCUS_SCOPE_CONTROLLER_NAME
7
- );
8
- function FocusScopeController(props) {
9
- const {
10
- __scopeFocusScope,
11
- children,
12
- enabled,
13
- loop,
14
- trapped,
15
- onMountAutoFocus,
16
- onUnmountAutoFocus,
17
- forceUnmount,
18
- focusOnIdle
19
- } = props, stableOnMountAutoFocus = useEvent(onMountAutoFocus), stableOnUnmountAutoFocus = useEvent(onUnmountAutoFocus), contextValue = React.useMemo(
20
- () => ({
21
- enabled,
22
- loop,
23
- trapped,
24
- onMountAutoFocus: stableOnMountAutoFocus,
25
- onUnmountAutoFocus: stableOnUnmountAutoFocus,
26
- forceUnmount,
27
- focusOnIdle
28
- }),
29
- [
30
- enabled,
31
- loop,
32
- trapped,
33
- stableOnMountAutoFocus,
34
- stableOnUnmountAutoFocus,
35
- forceUnmount,
36
- focusOnIdle
37
- ]
38
- );
39
- return /* @__PURE__ */ jsx(FocusScopeControllerProvider, { scope: __scopeFocusScope, ...contextValue, children });
40
- }
41
- const FocusScopeControllerComponent = FocusScopeController;
42
- export {
43
- FocusScopeControllerComponent as FocusScopeController,
44
- FocusScopeControllerProvider,
45
- createFocusScopeControllerScope,
46
- useFocusScopeControllerContext
47
- };
48
- //# sourceMappingURL=FocusScopeController.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/FocusScopeController.tsx"],
4
- "mappings": "AAAA,SAAS,0BAA0B;AACnC,SAAS,gBAAgB;AACzB,YAAY,WAAW;AA8DnB;AA1DJ,MAAM,8BAA8B,wBAE9B,CAAC,mCAAmC,+BAA+B,IACvE,mBAAmB,2BAA2B,GAI1C,CAAC,8BAA8B,8BAA8B,IACjE;AAAA,EACE;AACF;AAUF,SAAS,qBAAqB,OAA+C;AAC3E,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,OAEE,yBAAyB,SAAS,gBAAgB,GAClD,2BAA2B,SAAS,kBAAkB,GAEtD,eAAe,MAAM;AAAA,IACzB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAkB;AAAA,MAClB,oBAAoB;AAAA,MACpB;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SACE,oBAAC,gCAA6B,OAAO,mBAAoB,GAAG,cACzD,UACH;AAEJ;AAEA,MAAM,gCAAgC;",
5
- "names": []
6
- }
package/dist/esm/types.js DELETED
@@ -1 +0,0 @@
1
- //# sourceMappingURL=types.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "mappings": "",
5
- "names": []
6
- }
@@ -1,231 +0,0 @@
1
- import { useComposedRefs } from "@tamagui/compose-refs";
2
- import { isWeb, useIsomorphicLayoutEffect } from "@tamagui/constants";
3
- import { idle, useAsyncEffect } from "@tamagui/use-async";
4
- import { useEvent } from "@tamagui/use-event";
5
- import * as React from "react";
6
- import { useFocusScopeControllerContext } from "./FocusScopeController";
7
- import { Fragment, jsx } from "react/jsx-runtime";
8
- const AUTOFOCUS_ON_MOUNT = "focusScope.autoFocusOnMount", AUTOFOCUS_ON_UNMOUNT = "focusScope.autoFocusOnUnmount", EVENT_OPTIONS = { bubbles: !1, cancelable: !0 }, FocusScope = React.forwardRef(
9
- function({ __scopeFocusScope, ...props }, forwardedRef) {
10
- const context = useFocusScopeControllerContext("FocusScope", __scopeFocusScope, {
11
- warn: !1,
12
- fallback: {}
13
- }), mergedProps = {
14
- ...props,
15
- enabled: context.enabled ?? props.enabled,
16
- loop: context.loop ?? props.loop,
17
- trapped: context.trapped ?? props.trapped,
18
- onMountAutoFocus: context.onMountAutoFocus ?? props.onMountAutoFocus,
19
- onUnmountAutoFocus: context.onUnmountAutoFocus ?? props.onUnmountAutoFocus,
20
- forceUnmount: context.forceUnmount ?? props.forceUnmount,
21
- focusOnIdle: context.focusOnIdle ?? props.focusOnIdle
22
- }, childProps = useFocusScope(mergedProps, forwardedRef);
23
- return typeof mergedProps.children == "function" ? /* @__PURE__ */ jsx(Fragment, { children: mergedProps.children(childProps) }) : React.cloneElement(
24
- React.Children.only(mergedProps.children),
25
- childProps
26
- );
27
- }
28
- );
29
- function setupFocusTrap(container, lastFocusedElementRef, focusScope) {
30
- const controller = new AbortController();
31
- let rafId = null;
32
- function scheduleRefocus() {
33
- if (rafId) return;
34
- const elementToFocus = lastFocusedElementRef.current;
35
- rafId = requestAnimationFrame(() => {
36
- rafId = null, !focusScope.paused && (focusScope.stopped || container.isConnected && (container.contains(document.activeElement) || focus(elementToFocus)));
37
- });
38
- }
39
- function handleFocusIn(event) {
40
- if (focusScope.paused) return;
41
- const target = event.target;
42
- container.contains(target) ? (target?.addEventListener("blur", handleBlur, { signal: controller.signal }), lastFocusedElementRef.current = target) : scheduleRefocus();
43
- }
44
- function handleFocusOut(event) {
45
- controller.abort(), !focusScope.paused && (container.contains(event.relatedTarget) || scheduleRefocus());
46
- }
47
- function handleBlur() {
48
- }
49
- return document.addEventListener("focusin", handleFocusIn), document.addEventListener("focusout", handleFocusOut), () => {
50
- rafId && (cancelAnimationFrame(rafId), rafId = null), controller.abort(), document.removeEventListener("focusin", handleFocusIn), document.removeEventListener("focusout", handleFocusOut);
51
- };
52
- }
53
- function useFocusScope(props, forwardedRef) {
54
- const {
55
- loop = !1,
56
- enabled = !0,
57
- trapped = !1,
58
- onMountAutoFocus: onMountAutoFocusProp,
59
- onUnmountAutoFocus: onUnmountAutoFocusProp,
60
- forceUnmount,
61
- focusOnIdle = !0,
62
- children,
63
- ...scopeProps
64
- } = props, [container, setContainer] = React.useState(null), containerRef = React.useRef(null), onMountAutoFocus = useEvent(onMountAutoFocusProp), onUnmountAutoFocus = useEvent(onUnmountAutoFocusProp), lastFocusedElementRef = React.useRef(null), focusScopeRef = React.useRef({
65
- paused: !1,
66
- stopped: !1,
67
- // set to true when cleanup starts, signals trap to stop
68
- pause() {
69
- this.paused = !0;
70
- },
71
- resume() {
72
- this.paused = !1;
73
- },
74
- stop() {
75
- this.stopped = !0;
76
- }
77
- }), focusScope = focusScopeRef.current, trapCleanupRef = React.useRef(null), setContainerRef = React.useCallback(
78
- (node) => {
79
- trapCleanupRef.current && (trapCleanupRef.current(), trapCleanupRef.current = null), containerRef.current = node, isWeb && node && enabled && trapped && (trapCleanupRef.current = setupFocusTrap(
80
- node,
81
- lastFocusedElementRef,
82
- focusScopeRef.current
83
- )), setContainer(node);
84
- },
85
- [enabled, trapped]
86
- ), composedRefs = useComposedRefs(forwardedRef, setContainerRef);
87
- useIsomorphicLayoutEffect(() => (trapped || (focusScope.stopped = !0, trapCleanupRef.current && (trapCleanupRef.current(), trapCleanupRef.current = null)), () => {
88
- trapCleanupRef.current && (trapCleanupRef.current(), trapCleanupRef.current = null);
89
- }), [trapped, focusScope]), useAsyncEffect(
90
- async (signal) => {
91
- if (!enabled || !container || forceUnmount) return;
92
- trapped && (focusScope.stopped = !1), focusScopesStack.add(focusScope);
93
- const previouslyFocusedElement = document.activeElement;
94
- if (!(container.contains(previouslyFocusedElement) && previouslyFocusedElement !== null && !isHidden(previouslyFocusedElement, { upTo: container }))) {
95
- const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);
96
- if (container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus), container.dispatchEvent(mountEvent), !mountEvent.defaultPrevented) {
97
- focusOnIdle && await idle(
98
- signal,
99
- typeof focusOnIdle == "object" ? focusOnIdle : {
100
- // we can't wait too long or else user can take an action and then we focus
101
- max: 200,
102
- min: typeof focusOnIdle == "number" ? focusOnIdle : 16
103
- }
104
- );
105
- const allCandidates = getTabbableCandidates(container), visibleCandidates = removeLinks(allCandidates).filter(
106
- (candidate) => !isHidden(candidate, { upTo: container })
107
- );
108
- focusFirst(visibleCandidates, { select: !0 }), visibleCandidates.length > 0 ? lastFocusedElementRef.current = visibleCandidates[0] : lastFocusedElementRef.current = container, document.activeElement === previouslyFocusedElement && visibleCandidates.length === 0 && focus(container);
109
- }
110
- }
111
- return () => {
112
- focusScope.stop(), container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);
113
- const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);
114
- if (container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus), container.dispatchEvent(unmountEvent), !unmountEvent.defaultPrevented) {
115
- const currentFocus = document.activeElement;
116
- currentFocus && currentFocus !== document.body && currentFocus !== container && !container.contains(currentFocus) || focus(previouslyFocusedElement ?? document.body, { select: !0 });
117
- }
118
- container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus), focusScopesStack.remove(focusScope);
119
- };
120
- },
121
- [
122
- enabled,
123
- container,
124
- forceUnmount,
125
- onMountAutoFocus,
126
- onUnmountAutoFocus,
127
- focusScope,
128
- focusOnIdle
129
- ]
130
- );
131
- const handleKeyDown = React.useCallback(
132
- (event) => {
133
- if (!trapped || !loop || focusScope.paused || !enabled || !container) return;
134
- const isTabKey = event.key === "Tab" && !event.altKey && !event.ctrlKey && !event.metaKey, focusedElement = document.activeElement;
135
- if (isTabKey && focusedElement) {
136
- const [first, last] = getTabbableEdges(container);
137
- first && last ? !event.shiftKey && focusedElement === last ? (event.preventDefault(), loop && focus(first, { select: !0 })) : event.shiftKey && focusedElement === first && (event.preventDefault(), loop && focus(last, { select: !0 })) : focusedElement === container && event.preventDefault();
138
- }
139
- },
140
- [loop, trapped, focusScope.paused, enabled, container]
141
- );
142
- React.useEffect(() => {
143
- if (!container || !trapped || !loop || !enabled) return;
144
- const handleKeyDownCapture = (event) => {
145
- event.key === "Tab" && handleKeyDown(event);
146
- };
147
- return container.addEventListener("keydown", handleKeyDownCapture, !0), () => {
148
- container.removeEventListener("keydown", handleKeyDownCapture, !0);
149
- };
150
- }, [container, trapped, loop, enabled, handleKeyDown]);
151
- const existingOnKeyDown = scopeProps.onKeyDown, composedOnKeyDown = React.useCallback(
152
- (event) => {
153
- existingOnKeyDown?.(event);
154
- },
155
- [existingOnKeyDown]
156
- );
157
- return {
158
- ...scopeProps,
159
- ref: composedRefs,
160
- onKeyDown: composedOnKeyDown
161
- };
162
- }
163
- function focusFirst(candidates, { select = !1 } = {}) {
164
- const previouslyFocusedElement = document.activeElement;
165
- for (const candidate of candidates)
166
- if (focus(candidate, { select }), document.activeElement !== previouslyFocusedElement) return;
167
- }
168
- function getTabbableEdges(container) {
169
- const candidates = getTabbableCandidates(container), first = findVisible(candidates, container), last = findVisible(candidates.reverse(), container);
170
- return [first, last];
171
- }
172
- function getTabbableCandidates(container) {
173
- const nodes = [], walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {
174
- acceptNode: (node) => {
175
- const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden";
176
- return node.disabled || node.hidden || isHiddenInput ? NodeFilter.FILTER_SKIP : node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
177
- }
178
- });
179
- for (; walker.nextNode(); ) nodes.push(walker.currentNode);
180
- return nodes;
181
- }
182
- function findVisible(elements, container) {
183
- for (const element of elements)
184
- if (!isHidden(element, { upTo: container })) return element;
185
- }
186
- function isHidden(node, { upTo }) {
187
- if (getComputedStyle(node).visibility === "hidden") return !0;
188
- for (; node; ) {
189
- if (upTo !== void 0 && node === upTo) return !1;
190
- if (getComputedStyle(node).display === "none") return !0;
191
- node = node.parentElement;
192
- }
193
- return !1;
194
- }
195
- function isSelectableInput(element) {
196
- return element instanceof HTMLInputElement && "select" in element;
197
- }
198
- function focus(element, { select = !1 } = {}) {
199
- if (element?.focus) {
200
- const previouslyFocusedElement = document.activeElement;
201
- try {
202
- element.focus({ preventScroll: !0 }), element !== previouslyFocusedElement && isSelectableInput(element) && select && element.select();
203
- } catch {
204
- }
205
- }
206
- }
207
- const focusScopesStack = createFocusScopesStack();
208
- function createFocusScopesStack() {
209
- let stack = [];
210
- return {
211
- add(focusScope) {
212
- const activeFocusScope = stack[0];
213
- focusScope !== activeFocusScope && activeFocusScope?.pause(), stack = arrayRemove(stack, focusScope), stack.unshift(focusScope);
214
- },
215
- remove(focusScope) {
216
- stack = arrayRemove(stack, focusScope), stack[0]?.resume();
217
- }
218
- };
219
- }
220
- function arrayRemove(array, item) {
221
- const updatedArray = [...array], index = updatedArray.indexOf(item);
222
- return index !== -1 && updatedArray.splice(index, 1), updatedArray;
223
- }
224
- function removeLinks(items) {
225
- return items.filter((item) => item.tagName !== "A");
226
- }
227
- export {
228
- FocusScope,
229
- useFocusScope
230
- };
231
- //# sourceMappingURL=FocusScope.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/FocusScope.tsx"],
4
- "mappings": "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",
5
- "names": []
6
- }
@@ -1,48 +0,0 @@
1
- import { createContextScope } from "@tamagui/create-context";
2
- import { useEvent } from "@tamagui/use-event";
3
- import * as React from "react";
4
- import { jsx } from "react/jsx-runtime";
5
- const FOCUS_SCOPE_CONTROLLER_NAME = "FocusScopeController", [createFocusScopeControllerContext, createFocusScopeControllerScope] = createContextScope(FOCUS_SCOPE_CONTROLLER_NAME), [FocusScopeControllerProvider, useFocusScopeControllerContext] = createFocusScopeControllerContext(
6
- FOCUS_SCOPE_CONTROLLER_NAME
7
- );
8
- function FocusScopeController(props) {
9
- const {
10
- __scopeFocusScope,
11
- children,
12
- enabled,
13
- loop,
14
- trapped,
15
- onMountAutoFocus,
16
- onUnmountAutoFocus,
17
- forceUnmount,
18
- focusOnIdle
19
- } = props, stableOnMountAutoFocus = useEvent(onMountAutoFocus), stableOnUnmountAutoFocus = useEvent(onUnmountAutoFocus), contextValue = React.useMemo(
20
- () => ({
21
- enabled,
22
- loop,
23
- trapped,
24
- onMountAutoFocus: stableOnMountAutoFocus,
25
- onUnmountAutoFocus: stableOnUnmountAutoFocus,
26
- forceUnmount,
27
- focusOnIdle
28
- }),
29
- [
30
- enabled,
31
- loop,
32
- trapped,
33
- stableOnMountAutoFocus,
34
- stableOnUnmountAutoFocus,
35
- forceUnmount,
36
- focusOnIdle
37
- ]
38
- );
39
- return /* @__PURE__ */ jsx(FocusScopeControllerProvider, { scope: __scopeFocusScope, ...contextValue, children });
40
- }
41
- const FocusScopeControllerComponent = FocusScopeController;
42
- export {
43
- FocusScopeControllerComponent as FocusScopeController,
44
- FocusScopeControllerProvider,
45
- createFocusScopeControllerScope,
46
- useFocusScopeControllerContext
47
- };
48
- //# sourceMappingURL=FocusScopeController.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/FocusScopeController.tsx"],
4
- "mappings": "AAAA,SAAS,0BAA0B;AACnC,SAAS,gBAAgB;AACzB,YAAY,WAAW;AA8DnB;AA1DJ,MAAM,8BAA8B,wBAE9B,CAAC,mCAAmC,+BAA+B,IACvE,mBAAmB,2BAA2B,GAI1C,CAAC,8BAA8B,8BAA8B,IACjE;AAAA,EACE;AACF;AAUF,SAAS,qBAAqB,OAA+C;AAC3E,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,OAEE,yBAAyB,SAAS,gBAAgB,GAClD,2BAA2B,SAAS,kBAAkB,GAEtD,eAAe,MAAM;AAAA,IACzB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAkB;AAAA,MAClB,oBAAoB;AAAA,MACpB;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SACE,oBAAC,gCAA6B,OAAO,mBAAoB,GAAG,cACzD,UACH;AAEJ;AAEA,MAAM,gCAAgC;",
5
- "names": []
6
- }
package/dist/jsx/types.js DELETED
@@ -1 +0,0 @@
1
- //# sourceMappingURL=types.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "mappings": "",
5
- "names": []
6
- }