@brytdesigns/web-component-drawer 1.1.11 → 3.0.0

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.
@@ -1,33 +1,29 @@
1
- import { customShadowlessElement, correctElementType } from '@brytdesigns/web-component-core/utils';
2
- import { DrawerContext, DrawerTrigger, DrawerBackdrop, DrawerContent } from './components/index.js';
3
- export { getDrawerContext, useDrawer, withDrawerElementContext } from './hooks/index.js';
1
+ import { getDrawerContext, useDrawer, useDrawerAt } from "./hooks/useDrawer.js";
2
+ import "./hooks/index.js";
3
+ import { Component, Name } from "./components/drawer-backdrop.js";
4
+ import { Component as Component$1, Name as Name$1 } from "./components/drawer-content.js";
5
+ import { Component as Component$2, Name as Name$2 } from "./components/drawer-context.js";
6
+ import { Component as Component$3, Name as Name$3 } from "./components/drawer-trigger.js";
7
+ import "./components/index.js";
8
+ import { customShadowlessElement } from "@brytdesigns/web-component-core/utils";
9
+ //#region src/index.ts
10
+ customShadowlessElement(Name$2, {
11
+ isOpen: false,
12
+ id: crypto.randomUUID(),
13
+ closeOnEscape: true,
14
+ shouldTrapFocus: true,
15
+ isAnimating: false,
16
+ debug: false
17
+ }, Component$2);
18
+ customShadowlessElement(Name$3, {
19
+ target: "",
20
+ action: "",
21
+ on: "click",
22
+ preventDefault: true
23
+ }, Component$3);
24
+ customShadowlessElement(Name, {}, Component);
25
+ customShadowlessElement(Name$1, {}, Component$1);
26
+ //#endregion
27
+ export { getDrawerContext, useDrawer, useDrawerAt };
4
28
 
5
- customShadowlessElement(
6
- DrawerContext.Name,
7
- {
8
- isOpen: false,
9
- id: crypto.randomUUID(),
10
- closeOnEscape: false,
11
- shouldTrapFocus: false,
12
- isAnimating: false,
13
- debug: false
14
- },
15
- correctElementType(DrawerContext.Component)
16
- );
17
- customShadowlessElement(
18
- DrawerTrigger.Name,
19
- { target: "", action: "", on: "click", preventDefault: true },
20
- correctElementType(DrawerTrigger.Component)
21
- );
22
- customShadowlessElement(
23
- DrawerBackdrop.Name,
24
- {},
25
- correctElementType(DrawerBackdrop.Component)
26
- );
27
- customShadowlessElement(
28
- DrawerContent.Name,
29
- {},
30
- correctElementType(DrawerContent.Component)
31
- );
32
- //# sourceMappingURL=index.js.map
33
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAiBA,uBAAA;AAAA,EACC,aAAc,CAAA,IAAA;AAAA,EACd;AAAA,IACC,MAAQ,EAAA,KAAA;AAAA,IACR,EAAA,EAAI,OAAO,UAAW,EAAA;AAAA,IACtB,aAAe,EAAA,KAAA;AAAA,IACf,eAAiB,EAAA,KAAA;AAAA,IACjB,WAAa,EAAA,KAAA;AAAA,IACb,KAAO,EAAA;AAAA,GACR;AAAA,EACA,kBAAA,CAAmB,cAAc,SAAS;AAC3C,CAAA;AAEA,uBAAA;AAAA,EACC,aAAc,CAAA,IAAA;AAAA,EACd,EAAE,QAAQ,EAAI,EAAA,MAAA,EAAQ,IAAI,EAAI,EAAA,OAAA,EAAS,gBAAgB,IAAK,EAAA;AAAA,EAC5D,kBAAA,CAAmB,cAAc,SAAS;AAC3C,CAAA;AAEA,uBAAA;AAAA,EACC,cAAe,CAAA,IAAA;AAAA,EACf,EAAC;AAAA,EACD,kBAAA,CAAmB,eAAe,SAAS;AAC5C,CAAA;AAEA,uBAAA;AAAA,EACC,aAAc,CAAA,IAAA;AAAA,EACd,EAAC;AAAA,EACD,kBAAA,CAAmB,cAAc,SAAS;AAC3C,CAAA","file":"index.js","sourcesContent":["import {\n\tcustomShadowlessElement,\n\tcorrectElementType,\n} from \"@brytdesigns/web-component-core/utils\";\n\nimport {\n\tDrawerContent,\n\tDrawerContext,\n\tDrawerTrigger,\n\tDrawerBackdrop,\n} from \"./components/index.js\";\n\nexport type DrawerContentProps = DrawerContent.Props;\nexport type DrawerContextProps = DrawerContext.Props;\nexport type DrawerTriggerProps = DrawerTrigger.Props;\nexport type DrawerBackdropProps = DrawerBackdrop.Props;\n\ncustomShadowlessElement(\n\tDrawerContext.Name,\n\t{\n\t\tisOpen: false,\n\t\tid: crypto.randomUUID(),\n\t\tcloseOnEscape: false,\n\t\tshouldTrapFocus: false,\n\t\tisAnimating: false,\n\t\tdebug: false,\n\t},\n\tcorrectElementType(DrawerContext.Component),\n);\n\ncustomShadowlessElement(\n\tDrawerTrigger.Name,\n\t{ target: \"\", action: \"\", on: \"click\", preventDefault: true },\n\tcorrectElementType(DrawerTrigger.Component),\n);\n\ncustomShadowlessElement(\n\tDrawerBackdrop.Name,\n\t{},\n\tcorrectElementType(DrawerBackdrop.Component),\n);\n\ncustomShadowlessElement(\n\tDrawerContent.Name,\n\t{},\n\tcorrectElementType(DrawerContent.Component),\n);\n\nexport {\n\tuseDrawer,\n\twithDrawerElementContext,\n\tgetDrawerContext,\n} from \"./hooks/index.js\";\n"]}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["import { customShadowlessElement } from \"@brytdesigns/web-component-core/utils\";\n\nimport {\n\tDrawerBackdrop,\n\tDrawerContent,\n\tDrawerContext,\n\tDrawerTrigger,\n} from \"./components/index.js\";\n\nexport type DrawerContentProps = DrawerContent.Props;\nexport type DrawerContextProps = DrawerContext.Props;\nexport type DrawerTriggerProps = DrawerTrigger.Props;\nexport type DrawerBackdropProps = DrawerBackdrop.Props;\n\ncustomShadowlessElement(\n\tDrawerContext.Name,\n\t{\n\t\tisOpen: false,\n\t\tid: crypto.randomUUID(),\n\t\t// On by default: an overlay that traps nothing and closes on no key is\n\t\t// not a dialog. Set close-on-escape=\"false\" / should-trap-focus=\"false\"\n\t\t// in markup to opt out.\n\t\tcloseOnEscape: true,\n\t\tshouldTrapFocus: true,\n\t\tisAnimating: false,\n\t\tdebug: false,\n\t},\n\tDrawerContext.Component,\n);\n\ncustomShadowlessElement(\n\tDrawerTrigger.Name,\n\t{ target: \"\", action: \"\", on: \"click\", preventDefault: true },\n\tDrawerTrigger.Component,\n);\n\ncustomShadowlessElement(DrawerBackdrop.Name, {}, DrawerBackdrop.Component);\n\ncustomShadowlessElement(DrawerContent.Name, {}, DrawerContent.Component);\n\nexport {\n\tgetDrawerContext,\n\tuseDrawer,\n\tuseDrawerAt,\n} from \"./hooks/index.js\";\n"],"mappings":";;;;;;;;;AAcA,wBACC,QACA;CACC,QAAQ;CACR,IAAI,OAAO,WAAW;CAItB,eAAe;CACf,iBAAiB;CACjB,aAAa;CACb,OAAO;AACR,GACA,WACD;AAEA,wBACC,QACA;CAAE,QAAQ;CAAI,QAAQ;CAAI,IAAI;CAAS,gBAAgB;AAAK,GAC5D,WACD;AAEA,wBAAwB,MAAqB,CAAC,GAAG,SAAwB;AAEzE,wBAAwB,QAAoB,CAAC,GAAG,WAAuB"}
@@ -1,10 +1,11 @@
1
+ //#region src/utils.ts
1
2
  function hideElement(element) {
2
- element.style.display = "none";
3
+ element.style.display = "none";
3
4
  }
4
5
  function showElement(element) {
5
- element.style.display = "block";
6
+ element.style.display = "block";
6
7
  }
7
-
8
+ //#endregion
8
9
  export { hideElement, showElement };
9
- //# sourceMappingURL=utils.js.map
10
+
10
11
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils.ts"],"names":[],"mappings":"AAAO,SAAS,YAAmC,OAAY,EAAA;AAC7D,EAAA,OAAA,CAAQ,MAAM,OAAU,GAAA,MAAA;AAC1B;AAEO,SAAS,YAAmC,OAAY,EAAA;AAC7D,EAAA,OAAA,CAAQ,MAAM,OAAU,GAAA,OAAA;AAC1B","file":"utils.js","sourcesContent":["export function hideElement<T extends HTMLElement>(element: T) {\n element.style.display = \"none\";\n}\n\nexport function showElement<T extends HTMLElement>(element: T) {\n element.style.display = \"block\";\n}\n"]}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../src/utils.ts"],"sourcesContent":["export function hideElement<T extends HTMLElement>(element: T) {\n\telement.style.display = \"none\";\n}\n\nexport function showElement<T extends HTMLElement>(element: T) {\n\telement.style.display = \"block\";\n}\n"],"mappings":";AAAA,SAAgB,YAAmC,SAAY;CAC9D,QAAQ,MAAM,UAAU;AACzB;AAEA,SAAgB,YAAmC,SAAY;CAC9D,QAAQ,MAAM,UAAU;AACzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brytdesigns/web-component-drawer",
3
- "version": "1.1.11",
3
+ "version": "3.0.0",
4
4
  "description": "Headless drawer web component",
5
5
  "main": "./dist/main/index.js",
6
6
  "module": "./dist/main/index.js",
@@ -9,7 +9,7 @@
9
9
  "exports": {
10
10
  ".": {
11
11
  "types": "./dist/main/index.d.ts",
12
- "module": "./dist/main/index.js"
12
+ "default": "./dist/main/index.js"
13
13
  }
14
14
  },
15
15
  "files": [
@@ -20,20 +20,19 @@
20
20
  "license": "ISC",
21
21
  "peer-dependencies": {},
22
22
  "dependencies": {
23
+ "@brytdesigns/web-component-core": "3.0.0",
23
24
  "body-scroll-lock-upgrade": "^1.1.0",
24
25
  "component-register": "0.8.7",
25
- "motion": "^12.18.1",
26
+ "motion": "^12.43.0",
26
27
  "observe-element-in-viewport": "^0.0.15",
27
- "solid-element": "^1.9.1",
28
- "solid-js": "^1.9.9",
29
- "@brytdesigns/web-component-core": "1.1.6"
28
+ "solid-js": "2.0.0-rc.14"
30
29
  },
31
30
  "devDependencies": {
32
- "dts-bundle-generator": "^9.5.1",
33
- "tsup": "^8.4.0"
31
+ "@repo/vite-config": "0.0.0",
32
+ "vite": "^8.2.2"
34
33
  },
35
34
  "scripts": {
36
- "build": "tsup --clean",
35
+ "build": "vite build",
37
36
  "typecheck": "tsc --noEmit"
38
37
  }
39
38
  }
package/dist/esm/index.js DELETED
@@ -1,491 +0,0 @@
1
- import { createWithElementContext, customShadowlessElement, correctElementType, toHyphenated, getContextFromProvider, disableBodyScroll, enableBodyScroll } from '@brytdesigns/web-component-core/utils';
2
- import { splitProps, createEffect, on, batch, onCleanup, untrack, mergeProps, onMount } from 'solid-js';
3
- import { animate } from 'motion';
4
- import { awaitAllAnimations, getTransitionConfig } from '@brytdesigns/web-component-core/animation';
5
- import { createContext, consume, provide } from 'component-register';
6
- import { createStore } from 'solid-js/store';
7
- import { abortablePromise } from '@brytdesigns/web-component-core/promise';
8
- import { observeElementInViewport } from 'observe-element-in-viewport';
9
- import { createFocusTrap } from '@brytdesigns/web-component-core/focusTrap';
10
-
11
- var __defProp = Object.defineProperty;
12
- var __export = (target, all) => {
13
- for (var name in all)
14
- __defProp(target, name, { get: all[name], enumerable: true });
15
- };
16
-
17
- // src/components/drawer-content.ts
18
- var drawer_content_exports = {};
19
- __export(drawer_content_exports, {
20
- Component: () => Component,
21
- Name: () => Name
22
- });
23
- function initializeDrawerContext(props) {
24
- const [_internal, _state] = splitProps(props, ["root"]);
25
- const [store, setStore] = createStore({ animationQueue: [] });
26
- createEffect(
27
- on(
28
- () => store.animationQueue,
29
- (animationQueue) => {
30
- if (!animationQueue.length) return;
31
- const controller = new AbortController();
32
- const animations = awaitAllAnimations(animationQueue);
33
- const abortableAnimations = abortablePromise(
34
- animations,
35
- controller.signal
36
- );
37
- setElementState("isAnimating", true);
38
- abortableAnimations.finally(() => {
39
- batch(() => {
40
- setElementState("isAnimating", false);
41
- setStore("animationQueue", []);
42
- });
43
- });
44
- return onCleanup(() => {
45
- controller.abort("Aborting drawer animations");
46
- });
47
- }
48
- )
49
- );
50
- function setElementState(key, value) {
51
- const currentValue = untrack(() => props[key]);
52
- if (typeof value === "function") {
53
- const result = value(currentValue || false);
54
- if (`${currentValue}` === `${result}`) return;
55
- _internal.root.setAttribute(toHyphenated(key), `${result}`);
56
- return;
57
- }
58
- if (`${currentValue}` === `${value}`) return;
59
- return _internal.root.setAttribute(toHyphenated(key), `${value}`);
60
- }
61
- return [mergeProps(_state, store), { setElementState, setStore }];
62
- }
63
- var DrawerContextState = createContext(initializeDrawerContext);
64
- var provideDrawerContext = (initialState, element) => {
65
- const props = mergeProps(initialState, { root: element });
66
- return provide(DrawerContextState, props, element);
67
- };
68
- var useDrawerContext = (context) => {
69
- const [state, { setElementState, setStore: setState }] = context;
70
- function updateAnimationQueue(animation) {
71
- setState("animationQueue", (state2) => [...state2, animation]);
72
- }
73
- function close() {
74
- setElementState("isOpen", false);
75
- }
76
- function open() {
77
- setElementState("isOpen", true);
78
- }
79
- function toggle() {
80
- setElementState("isOpen", (open2) => !open2);
81
- }
82
- return [state, { updateAnimationQueue, close, open, toggle }];
83
- };
84
- var useDrawer = (element) => {
85
- const context = consume(DrawerContextState, element);
86
- if (!context) {
87
- throw console.error(
88
- "DrawerContext not found! Please ensure to wrap your custom element with drawer-context element."
89
- );
90
- }
91
- return useDrawerContext(context);
92
- };
93
- var withDrawerElementContext = createWithElementContext(DrawerContextState);
94
- var getDrawerContext = (element) => {
95
- const context = getContextFromProvider(
96
- DrawerContextState,
97
- element
98
- );
99
- return useDrawerContext(context);
100
- };
101
-
102
- // src/consts.ts
103
- var POSITION = {
104
- TOP: "top",
105
- BOTTOM: "bottom",
106
- LEFT: "left"};
107
-
108
- // src/components/drawer-content.ts
109
- var Name = `drawer-content`;
110
- var Component = (_, { element }) => {
111
- const [state, { updateAnimationQueue }] = useDrawer(element);
112
- let isFirstRender = true;
113
- createEffect(
114
- on(
115
- () => state.isOpen,
116
- (isOpen) => {
117
- if (!isOpen || isFirstRender) return;
118
- const animation = enter(element);
119
- updateAnimationQueue(animation);
120
- return onCleanup(() => {
121
- if (animation.state !== "finished") animation.complete();
122
- });
123
- }
124
- )
125
- );
126
- createEffect(
127
- on(
128
- () => state.isOpen,
129
- (isOpen) => {
130
- if (isOpen || isFirstRender) return;
131
- const animation = exit(element);
132
- updateAnimationQueue(animation);
133
- return onCleanup(() => {
134
- if (animation.state !== "finished") animation.complete();
135
- });
136
- }
137
- )
138
- );
139
- onMount(() => {
140
- isFirstRender = false;
141
- });
142
- function enter(element2) {
143
- const style = window.getComputedStyle(element2);
144
- const transition = getTransitionConfig(style);
145
- let position = style.getPropertyValue(`--drawer--position`);
146
- if (!position) position = POSITION.LEFT;
147
- let transform = {
148
- x: [`var(--drawer--slide-from)`, `var(--drawer--slide-to)`]
149
- };
150
- if (position === POSITION.TOP || position === POSITION.BOTTOM) {
151
- transform = {
152
- y: [`var(--drawer--slide-from)`, `var(--drawer--slide-to)`]
153
- };
154
- }
155
- return animate(
156
- element2,
157
- {
158
- ...transform
159
- },
160
- transition
161
- );
162
- }
163
- function exit(element2) {
164
- const style = window.getComputedStyle(element2);
165
- const transition = getTransitionConfig(style);
166
- let position = style.getPropertyValue(`--drawer--position`);
167
- if (!position) position = POSITION.LEFT;
168
- let transform = {
169
- x: [`var(--drawer--slide-to)`, `var(--drawer--slide-from)`]
170
- };
171
- if (position === POSITION.TOP || position === POSITION.BOTTOM) {
172
- transform = {
173
- y: [`var(--drawer--slide-to)`, `var(--drawer--slide-from)`]
174
- };
175
- }
176
- return animate(
177
- element2,
178
- {
179
- ...transform
180
- },
181
- transition
182
- );
183
- }
184
- };
185
-
186
- // src/components/drawer-trigger.ts
187
- var drawer_trigger_exports = {};
188
- __export(drawer_trigger_exports, {
189
- Component: () => Component2,
190
- Name: () => Name2
191
- });
192
- var Name2 = "drawer-trigger";
193
- var Component2 = (props, { element }) => {
194
- withDrawerElementContext(
195
- () => props.target || "",
196
- () => {
197
- return {
198
- action: props.action,
199
- on: props.on,
200
- preventDefault: props.preventDefault
201
- };
202
- },
203
- (context, props2) => {
204
- const controller = new AbortController();
205
- const { action, on: on5, preventDefault } = props2;
206
- const [state, { open, close, toggle }] = useDrawerContext(context);
207
- switch (on5) {
208
- case "enter": {
209
- let unsubscribe = null;
210
- if (action === "toggle") {
211
- unsubscribe = observeElementInViewport(element, open, close);
212
- }
213
- if (unsubscribe) onCleanup(unsubscribe);
214
- break;
215
- }
216
- case "exit": {
217
- let unsubscribe = null;
218
- if (action === "toggle") {
219
- unsubscribe = observeElementInViewport(element, close, open);
220
- }
221
- if (unsubscribe) onCleanup(unsubscribe);
222
- break;
223
- }
224
- default: {
225
- element.addEventListener(
226
- //@ts-ignore
227
- on5,
228
- (event) => {
229
- if (preventDefault) event.preventDefault();
230
- if (state.isAnimating) return;
231
- switch (action) {
232
- case "close":
233
- close();
234
- break;
235
- case "open":
236
- open();
237
- break;
238
- case "toggle":
239
- toggle();
240
- break;
241
- }
242
- },
243
- { signal: controller.signal }
244
- );
245
- break;
246
- }
247
- }
248
- createEffect(() => {
249
- element.setAttribute("is-open", `${state.isOpen}`);
250
- element.setAttribute("is-animating", `${state.isAnimating}`);
251
- });
252
- onCleanup(() => {
253
- controller.abort();
254
- });
255
- }
256
- );
257
- };
258
-
259
- // src/components/drawer-backdrop.ts
260
- var drawer_backdrop_exports = {};
261
- __export(drawer_backdrop_exports, {
262
- Component: () => Component3,
263
- Name: () => Name3
264
- });
265
- var Name3 = `drawer-backdrop`;
266
- var Component3 = (_, { element }) => {
267
- const [state, { updateAnimationQueue, close }] = useDrawer(element);
268
- const controller = new AbortController();
269
- let isFirstRender = true;
270
- createEffect(
271
- on(
272
- () => state.isOpen,
273
- (isOpen) => {
274
- if (!isOpen || isFirstRender) return;
275
- const animation = enter(element);
276
- updateAnimationQueue(animation);
277
- return onCleanup(() => {
278
- if (animation.state !== "finished") animation.complete();
279
- });
280
- }
281
- )
282
- );
283
- createEffect(
284
- on(
285
- () => state.isOpen,
286
- (isOpen) => {
287
- if (isOpen || isFirstRender) return;
288
- const animation = exit(element);
289
- updateAnimationQueue(animation);
290
- return onCleanup(() => {
291
- if (animation.state !== "finished") animation.complete();
292
- });
293
- }
294
- )
295
- );
296
- onMount(() => {
297
- isFirstRender = false;
298
- });
299
- function enter(element2) {
300
- const style = window.getComputedStyle(element2);
301
- const options = getTransitionConfig(style);
302
- return animate(
303
- element2,
304
- {
305
- opacity: [`var(--drawer--opacity-from)`, `var(--drawer--opacity-to)`]
306
- },
307
- options
308
- );
309
- }
310
- function exit(element2) {
311
- const style = window.getComputedStyle(element2);
312
- const options = getTransitionConfig(style);
313
- return animate(
314
- element2,
315
- {
316
- opacity: [`var(--drawer--opacity-to)`, `var(--drawer--opacity-from)`]
317
- },
318
- options
319
- );
320
- }
321
- element.addEventListener(
322
- "click",
323
- () => {
324
- if (state.isAnimating) return;
325
- close();
326
- },
327
- {
328
- signal: controller.signal
329
- }
330
- );
331
- onCleanup(() => {
332
- controller.abort();
333
- });
334
- isFirstRender = false;
335
- };
336
-
337
- // src/components/drawer-context.ts
338
- var drawer_context_exports = {};
339
- __export(drawer_context_exports, {
340
- Component: () => Component4,
341
- Name: () => Name4
342
- });
343
-
344
- // src/utils.ts
345
- function hideElement(element) {
346
- element.style.display = "none";
347
- }
348
- function showElement(element) {
349
- element.style.display = "block";
350
- }
351
-
352
- // src/components/drawer-context.ts
353
- var Name4 = `drawer-context`;
354
- var Component4 = (props, { element }) => {
355
- const [contextProps, restProps] = splitProps(props, [
356
- "isOpen",
357
- "isAnimating"
358
- ]);
359
- const context = provideDrawerContext(contextProps, element);
360
- const [state, { setElementState }] = context;
361
- const [_, { updateAnimationQueue, ...events }] = useDrawerContext(context);
362
- element.actions = events;
363
- const focusTrap = createFocusTrap(element, () => ({
364
- allowOutsideClick: true,
365
- escapeDeactivates: restProps.closeOnEscape,
366
- onDeactivate: () => {
367
- setElementState("isOpen", false);
368
- }
369
- }));
370
- createEffect(() => {
371
- if (!props.debug) return;
372
- console.table({
373
- ...state
374
- });
375
- });
376
- createEffect(
377
- on(
378
- () => state.isOpen,
379
- (isOpen) => {
380
- const eventName = isOpen ? "drawer:open" : "drawer:close";
381
- element.dispatchEvent(
382
- new CustomEvent(eventName, {
383
- bubbles: true,
384
- detail: { isOpen, relatedTarget: element }
385
- })
386
- );
387
- element.dispatchEvent(
388
- new CustomEvent("drawer:toggle", {
389
- bubbles: true,
390
- detail: { isOpen, relatedTarget: element }
391
- })
392
- );
393
- }
394
- )
395
- );
396
- createEffect(
397
- on(
398
- () => ({
399
- isOpen: state.isOpen,
400
- focusTrap: focusTrap(),
401
- shouldTrapFocus: restProps.shouldTrapFocus
402
- }),
403
- ({ isOpen, focusTrap: focusTrap2, shouldTrapFocus }) => {
404
- if (!isOpen) return;
405
- if (props.debug) console.log("Showing element", element);
406
- showElement(element);
407
- if (!shouldTrapFocus) return;
408
- focusTrap2.activate();
409
- onCleanup(focusTrap2.deactivate);
410
- }
411
- )
412
- );
413
- createEffect(
414
- on(
415
- () => ({
416
- isOpen: state.isOpen,
417
- isAnimating: state.isAnimating,
418
- shouldTrapFocus: props.shouldTrapFocus
419
- }),
420
- ({ isOpen, isAnimating, shouldTrapFocus }) => {
421
- if (isOpen && !isAnimating && shouldTrapFocus)
422
- return disableBodyScroll(element, {
423
- allowTouchMove: (el) => {
424
- if (el instanceof HTMLElement) {
425
- let element2 = el;
426
- while (element2 && element2 !== document.body) {
427
- if (element2.tagName === "DRAWER-CONTENT") {
428
- return true;
429
- }
430
- element2 = element2.parentElement;
431
- }
432
- }
433
- return false;
434
- }
435
- });
436
- onCleanup(() => {
437
- enableBodyScroll(element);
438
- });
439
- }
440
- )
441
- );
442
- createEffect(
443
- on(
444
- () => ({ isOpen: state.isOpen, animationQueue: state.animationQueue }),
445
- ({ isOpen, animationQueue }) => {
446
- if (isOpen) return;
447
- if (props.debug)
448
- console.log("Waiting for animations to complete...", animationQueue);
449
- return Promise.all(animationQueue).then(() => hideElement(element)).then(() => {
450
- if (props.debug) console.log("Hiding element", element);
451
- });
452
- }
453
- )
454
- );
455
- onCleanup(() => {
456
- enableBodyScroll(element);
457
- });
458
- };
459
-
460
- // src/index.ts
461
- customShadowlessElement(
462
- drawer_context_exports.Name,
463
- {
464
- isOpen: false,
465
- id: crypto.randomUUID(),
466
- closeOnEscape: false,
467
- shouldTrapFocus: false,
468
- isAnimating: false,
469
- debug: false
470
- },
471
- correctElementType(drawer_context_exports.Component)
472
- );
473
- customShadowlessElement(
474
- drawer_trigger_exports.Name,
475
- { target: "", action: "", on: "click", preventDefault: true },
476
- correctElementType(drawer_trigger_exports.Component)
477
- );
478
- customShadowlessElement(
479
- drawer_backdrop_exports.Name,
480
- {},
481
- correctElementType(drawer_backdrop_exports.Component)
482
- );
483
- customShadowlessElement(
484
- drawer_content_exports.Name,
485
- {},
486
- correctElementType(drawer_content_exports.Component)
487
- );
488
-
489
- export { getDrawerContext, useDrawer, withDrawerElementContext };
490
- //# sourceMappingURL=index.js.map
491
- //# sourceMappingURL=index.js.map