@os-design/core 1.0.272 → 1.0.273

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 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Drawer/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,QAAQ,EAId,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAA8C,MAAM,OAAO,CAAC;AAInE,KAAK,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7D,MAAM,WAAW,WAAY,SAAQ,WAAW,EAAE,QAAQ;IACxD;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAmGD,eAAO,MAAM,cAAc,cAF0B,IAEa,CAAC;AAEnE;;GAEG;AACH,QAAA,MAAM,MAAM,oFAmEX,CAAC;AAIF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Drawer/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,QAAQ,EAId,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAsD,MAAM,OAAO,CAAC;AAI3E,KAAK,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7D,MAAM,WAAW,WAAY,SAAQ,WAAW,EAAE,QAAQ;IACxD;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAmGD,eAAO,MAAM,cAAc,cAF0B,IAEa,CAAC;AAEnE;;GAEG;AACH,QAAA,MAAM,MAAM,oFAuFX,CAAC;AAIF,eAAe,MAAM,CAAC"}
@@ -4,7 +4,7 @@ import Portal from '@os-design/portal';
4
4
  import { enableScrollingStyles, resetFocusStyles, sizeStyles } from '@os-design/styles';
5
5
  import { clr, useTheme } from '@os-design/theming';
6
6
  import { omitEmotionProps, useBodyScroll, useClosable } from '@os-design/utils';
7
- import React, { forwardRef, useCallback, useContext } from 'react';
7
+ import React, { forwardRef, useCallback, useContext, useRef } from 'react';
8
8
  import FocusLock from 'react-focus-lock';
9
9
  import { ModalMask } from '../Modal/index.js';
10
10
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -93,8 +93,21 @@ const Drawer = /*#__PURE__*/forwardRef(({
93
93
  } = useTheme();
94
94
  const mounted = useClosable(visible, theme.transitionDelay);
95
95
  useBodyScroll(!visible);
96
+ const closeRef = useRef(false);
96
97
  const pointerDownHandler = useCallback(e => {
97
98
  e.stopPropagation();
99
+ closeRef.current = true;
100
+ }, []);
101
+ const pointerUpHandler = useCallback(e => {
102
+ e.stopPropagation();
103
+ if (closeRef.current) {
104
+ closeRef.current = false;
105
+ onClose();
106
+ }
107
+ }, [onClose]);
108
+ const stopPointerHandler = useCallback(e => {
109
+ e.stopPropagation();
110
+ closeRef.current = false;
98
111
  onPointerDown(e);
99
112
  }, [onPointerDown]);
100
113
  const keyDownHandler = useCallback(e => {
@@ -108,7 +121,8 @@ const Drawer = /*#__PURE__*/forwardRef(({
108
121
  children: [/*#__PURE__*/_jsx(DrawerMask, {
109
122
  visible: visible
110
123
  }), /*#__PURE__*/_jsx(Container, {
111
- onPointerDown: onClose,
124
+ onPointerDown: pointerDownHandler,
125
+ onPointerUp: pointerUpHandler,
112
126
  children: /*#__PURE__*/_jsx(FocusLock, {
113
127
  autoFocus: false,
114
128
  children: /*#__PURE__*/_jsx(CloseDrawerContext.Provider, {
@@ -120,7 +134,8 @@ const Drawer = /*#__PURE__*/forwardRef(({
120
134
  size: size,
121
135
  tabIndex: -1,
122
136
  onKeyDown: keyDownHandler,
123
- onPointerDown: pointerDownHandler,
137
+ onPointerDown: stopPointerHandler,
138
+ onPointerUp: stopPointerHandler,
124
139
  role: "dialog",
125
140
  "aria-modal": true,
126
141
  ...rest,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Modal/index.tsx"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,QAAQ,EAId,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAQN,MAAM,OAAO,CAAC;AAGf,OAAsB,EAAE,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE3E,KAAK,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7D,MAAM,WAAW,UAAW,SAAQ,WAAW,EAAE,QAAQ;IACvD;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;CACnB;AA2BD,KAAK,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAC7C,eAAO,MAAM,SAAS;;SAiFW,MAAO,WAEhC;iGAzEP,CAAC;AAsJF,eAAO,MAAM,aAAa,cAF0B,IAEY,CAAC;AAEjE;;GAEG;AACH,QAAA,MAAM,KAAK,mFAyIV,CAAC;AAIF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Modal/index.tsx"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,QAAQ,EAId,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAQN,MAAM,OAAO,CAAC;AAGf,OAAsB,EAAE,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE3E,KAAK,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7D,MAAM,WAAW,UAAW,SAAQ,WAAW,EAAE,QAAQ;IACvD;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;CACnB;AA2BD,KAAK,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAC7C,eAAO,MAAM,SAAS;;SAiFW,MAAO,WAEhC;iGAzEP,CAAC;AAsJF,eAAO,MAAM,aAAa,cAF0B,IAEY,CAAC;AAEjE;;GAEG;AACH,QAAA,MAAM,KAAK,mFAwJV,CAAC;AAIF,eAAe,KAAK,CAAC"}
@@ -188,11 +188,20 @@ const Modal = /*#__PURE__*/forwardRef(({
188
188
  useBodyScroll(!visible);
189
189
  const titleId = useMemo(() => `modal-title-${Math.random().toString(36).slice(2, 11)}`, []);
190
190
  const bodyId = useMemo(() => id || `modal-body-${Math.random().toString(36).slice(2, 11)}`, [id]);
191
- const containerPointerDownHandler = useCallback(e => {
191
+ const closeRef = useRef(false);
192
+ const pointerDownHandler = useCallback(e => {
192
193
  e.stopPropagation();
193
- onClose();
194
+ closeRef.current = true;
195
+ }, []);
196
+ const pointerUpHandler = useCallback(e => {
197
+ e.stopPropagation();
198
+ if (closeRef.current) {
199
+ closeRef.current = false;
200
+ onClose();
201
+ }
194
202
  }, [onClose]);
195
- const contentPointerDownHandler = useCallback(e => {
203
+ const stopPointerHandler = useCallback(e => {
204
+ closeRef.current = false;
196
205
  e.stopPropagation();
197
206
  onPointerDown(e);
198
207
  }, [onPointerDown]);
@@ -208,7 +217,8 @@ const Modal = /*#__PURE__*/forwardRef(({
208
217
  children: [/*#__PURE__*/_jsx(ModalMask, {
209
218
  visible: visible
210
219
  }), /*#__PURE__*/_jsx(Container, {
211
- onPointerDown: containerPointerDownHandler,
220
+ onPointerDown: pointerDownHandler,
221
+ onPointerUp: pointerUpHandler,
212
222
  children: /*#__PURE__*/_jsx(FocusLock, {
213
223
  autoFocus: false,
214
224
  children: /*#__PURE__*/_jsx(CloseModalContext.Provider, {
@@ -218,7 +228,8 @@ const Modal = /*#__PURE__*/forwardRef(({
218
228
  size: size,
219
229
  tabIndex: -1,
220
230
  onKeyDown: contentKeyDownHandler,
221
- onPointerDown: contentPointerDownHandler,
231
+ onPointerDown: stopPointerHandler,
232
+ onPointerUp: stopPointerHandler,
222
233
  role: "dialog",
223
234
  "aria-modal": true,
224
235
  "aria-labelledby": ariaLabelledBy,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@os-design/core",
3
- "version": "1.0.272",
3
+ "version": "1.0.273",
4
4
  "license": "UNLICENSED",
5
5
  "repository": "git@gitlab.com:os-team/libs/os-design.git",
6
6
  "type": "module",
@@ -58,5 +58,5 @@
58
58
  "react": "18",
59
59
  "react-dom": "18"
60
60
  },
61
- "gitHead": "76fcd7ad4defc5b75f17760fefd87d5cd2ba9799"
61
+ "gitHead": "6fc788389f38666fc7b71fb8ffed6171a70c8e50"
62
62
  }
@@ -9,7 +9,7 @@ import {
9
9
  } from '@os-design/styles';
10
10
  import { clr, useTheme } from '@os-design/theming';
11
11
  import { omitEmotionProps, useBodyScroll, useClosable } from '@os-design/utils';
12
- import React, { forwardRef, useCallback, useContext } from 'react';
12
+ import React, { forwardRef, useCallback, useContext, useRef } from 'react';
13
13
  import FocusLock from 'react-focus-lock';
14
14
  import { ModalMask } from '../Modal/index.js';
15
15
 
@@ -159,9 +159,25 @@ const Drawer = forwardRef<HTMLDivElement, DrawerProps>(
159
159
 
160
160
  useBodyScroll(!visible);
161
161
 
162
- const pointerDownHandler = useCallback(
162
+ const closeRef = useRef(false);
163
+ const pointerDownHandler = useCallback((e) => {
164
+ e.stopPropagation();
165
+ closeRef.current = true;
166
+ }, []);
167
+ const pointerUpHandler = useCallback(
163
168
  (e) => {
164
169
  e.stopPropagation();
170
+ if (closeRef.current) {
171
+ closeRef.current = false;
172
+ onClose();
173
+ }
174
+ },
175
+ [onClose]
176
+ );
177
+ const stopPointerHandler = useCallback(
178
+ (e) => {
179
+ e.stopPropagation();
180
+ closeRef.current = false;
165
181
  onPointerDown(e);
166
182
  },
167
183
  [onPointerDown]
@@ -182,7 +198,10 @@ const Drawer = forwardRef<HTMLDivElement, DrawerProps>(
182
198
  return (
183
199
  <Portal>
184
200
  <DrawerMask visible={visible} />
185
- <Container onPointerDown={onClose}>
201
+ <Container
202
+ onPointerDown={pointerDownHandler}
203
+ onPointerUp={pointerUpHandler}
204
+ >
186
205
  {/* @ts-expect-error FocusLock has problems with types */}
187
206
  <FocusLock autoFocus={false}>
188
207
  <CloseDrawerContext.Provider value={onClose}>
@@ -193,7 +212,8 @@ const Drawer = forwardRef<HTMLDivElement, DrawerProps>(
193
212
  size={size}
194
213
  tabIndex={-1}
195
214
  onKeyDown={keyDownHandler}
196
- onPointerDown={pointerDownHandler}
215
+ onPointerDown={stopPointerHandler}
216
+ onPointerUp={stopPointerHandler}
197
217
  role='dialog'
198
218
  aria-modal
199
219
  {...rest}
@@ -314,16 +314,27 @@ const Modal = forwardRef<HTMLDivElement, ModalProps>(
314
314
  [id]
315
315
  );
316
316
 
317
- const containerPointerDownHandler = useCallback(
317
+ const closeRef = useRef(false);
318
+ const pointerDownHandler = useCallback(
318
319
  (e: PointerEvent<HTMLDivElement>) => {
319
320
  e.stopPropagation();
320
- onClose();
321
+ closeRef.current = true;
322
+ },
323
+ []
324
+ );
325
+ const pointerUpHandler = useCallback(
326
+ (e: PointerEvent<HTMLDivElement>) => {
327
+ e.stopPropagation();
328
+ if (closeRef.current) {
329
+ closeRef.current = false;
330
+ onClose();
331
+ }
321
332
  },
322
333
  [onClose]
323
334
  );
324
-
325
- const contentPointerDownHandler = useCallback(
335
+ const stopPointerHandler = useCallback(
326
336
  (e: PointerEvent<HTMLDivElement>) => {
337
+ closeRef.current = false;
327
338
  e.stopPropagation();
328
339
  onPointerDown(e);
329
340
  },
@@ -350,7 +361,10 @@ const Modal = forwardRef<HTMLDivElement, ModalProps>(
350
361
  return (
351
362
  <Portal>
352
363
  <ModalMask visible={visible} />
353
- <Container onPointerDown={containerPointerDownHandler}>
364
+ <Container
365
+ onPointerDown={pointerDownHandler}
366
+ onPointerUp={pointerUpHandler}
367
+ >
354
368
  {/* @ts-expect-error FocusLock has problems with types */}
355
369
  <FocusLock autoFocus={false}>
356
370
  <CloseModalContext.Provider value={onClose}>
@@ -359,7 +373,8 @@ const Modal = forwardRef<HTMLDivElement, ModalProps>(
359
373
  size={size}
360
374
  tabIndex={-1}
361
375
  onKeyDown={contentKeyDownHandler}
362
- onPointerDown={contentPointerDownHandler}
376
+ onPointerDown={stopPointerHandler}
377
+ onPointerUp={stopPointerHandler}
363
378
  role='dialog'
364
379
  aria-modal
365
380
  aria-labelledby={ariaLabelledBy}