@darajs/ui-utils 1.16.21 → 1.16.23

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/dist/index.d.ts CHANGED
@@ -30,4 +30,5 @@ export { default as useUpdateEffect } from './use-update-effect';
30
30
  export { useLatestCallback } from './use-latest-callback';
31
31
  export { useLatestRef } from './use-latest-ref';
32
32
  export { useTinykeys, useFocusTinykeys } from './use-tinykeys';
33
+ export { default as useIME } from './use-ime';
33
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACH,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,WAAW,EACX,gBAAgB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACH,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,WAAW,EACX,gBAAgB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -30,4 +30,5 @@ export { default as useUpdateEffect } from './use-update-effect';
30
30
  export { useLatestCallback } from './use-latest-callback';
31
31
  export { useLatestRef } from './use-latest-ref';
32
32
  export { useTinykeys, useFocusTinykeys } from './use-tinykeys';
33
+ export { default as useIME } from './use-ime';
33
34
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACH,iBAAiB,EAEjB,WAAW,EAEX,YAAY,EAEZ,gBAAgB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACH,iBAAiB,EAEjB,WAAW,EAEX,YAAY,EAEZ,gBAAgB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,23 @@
1
+ export interface UseIMEOptions<T extends HTMLInputElement | HTMLTextAreaElement> {
2
+ onKeyDown?: (e: React.KeyboardEvent<T>) => void;
3
+ onKeyUp?: (e: React.KeyboardEvent<T>) => void;
4
+ onCompositionStart?: (e: React.CompositionEvent<T>) => void;
5
+ onCompositionEnd?: (e: React.CompositionEvent<T>) => void;
6
+ }
7
+ export interface UseIMEReturn<T extends HTMLInputElement | HTMLTextAreaElement> {
8
+ onCompositionStart: React.CompositionEventHandler<T>;
9
+ onCompositionEnd: React.CompositionEventHandler<T>;
10
+ onKeyDownCapture: React.KeyboardEventHandler<T>;
11
+ onKeyUpCapture: React.KeyboardEventHandler<T>;
12
+ onKeyDown: React.KeyboardEventHandler<T>;
13
+ onKeyUp: React.KeyboardEventHandler<T>;
14
+ }
15
+ /**
16
+ * Hook to handle IME composition in input elements.
17
+ * Prevents firing and bubbling events during IME composition or confirmation.
18
+ *
19
+ * @param {UseIMEOptions} options - the user handlers to wrap
20
+ */
21
+ declare function useIMEEnter<T extends HTMLInputElement | HTMLTextAreaElement = HTMLTextAreaElement>({ onKeyDown: userKeyDown, onKeyUp: userKeyUp, onCompositionStart: userCompStart, onCompositionEnd: userCompEnd, }: UseIMEOptions<T>): UseIMEReturn<T>;
22
+ export default useIMEEnter;
23
+ //# sourceMappingURL=use-ime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-ime.d.ts","sourceRoot":"","sources":["../src/use-ime.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,gBAAgB,GAAG,mBAAmB;IAC3E,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC9C,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC5D,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,gBAAgB,GAAG,mBAAmB;IAE1E,kBAAkB,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACrD,gBAAgB,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAEnD,gBAAgB,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAChD,cAAc,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAE9C,SAAS,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;CAC1C;AAED;;;;;GAKG;AACH,iBAAS,WAAW,CAAC,CAAC,SAAS,gBAAgB,GAAG,mBAAmB,GAAG,mBAAmB,EAAE,EACzF,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,SAAS,EAClB,kBAAkB,EAAE,aAAa,EACjC,gBAAgB,EAAE,WAAW,GAChC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAyFpC;AACD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { useCallback, useRef } from 'react';
2
+ /**
3
+ * Hook to handle IME composition in input elements.
4
+ * Prevents firing and bubbling events during IME composition or confirmation.
5
+ *
6
+ * @param {UseIMEOptions} options - the user handlers to wrap
7
+ */
8
+ function useIMEEnter({ onKeyDown: userKeyDown, onKeyUp: userKeyUp, onCompositionStart: userCompStart, onCompositionEnd: userCompEnd, }) {
9
+ const isComposingRef = useRef(false);
10
+ const justEndedRef = useRef(false);
11
+ // --- composition (bubble phase) ---
12
+ const handleCompositionStart = useCallback((e) => {
13
+ isComposingRef.current = true;
14
+ userCompStart === null || userCompStart === void 0 ? void 0 : userCompStart(e);
15
+ }, [userCompStart]);
16
+ const handleCompositionEnd = useCallback((e) => {
17
+ isComposingRef.current = false;
18
+ // mark to swallow the next keyup (IE/FF/Safari) or 229 keydown (Safari)
19
+ justEndedRef.current = true;
20
+ userCompEnd === null || userCompEnd === void 0 ? void 0 : userCompEnd(e);
21
+ }, [userCompEnd]);
22
+ // --- keydown (capture phase) ---
23
+ const handleKeyDownCapture = useCallback((e) => {
24
+ // 1) swallow all keys during IME composition
25
+ if (isComposingRef.current) {
26
+ e.preventDefault();
27
+ e.stopPropagation();
28
+ return;
29
+ }
30
+ // 2) swallow that spurious 229‐keydown right after compositionend
31
+ if (justEndedRef.current) {
32
+ if (e.which === 229) {
33
+ e.preventDefault();
34
+ e.stopPropagation();
35
+ return;
36
+ }
37
+ // a real key => clear the flag and let it through
38
+ justEndedRef.current = false;
39
+ }
40
+ // do *not* call userKeyDown here
41
+ }, []);
42
+ // --- keydown (bubble phase) ---
43
+ const handleKeyDown = useCallback((e) => {
44
+ // simply short-circuit while IME composing
45
+ if (isComposingRef.current) {
46
+ return;
47
+ }
48
+ userKeyDown === null || userKeyDown === void 0 ? void 0 : userKeyDown(e);
49
+ }, [userKeyDown]);
50
+ // --- keyup (capture phase) ---
51
+ const handleKeyUpCapture = useCallback((e) => {
52
+ // swallow all keyups during composition
53
+ // or the one immediately after compositionend
54
+ if (isComposingRef.current || justEndedRef.current) {
55
+ justEndedRef.current = false;
56
+ e.preventDefault();
57
+ e.stopPropagation();
58
+ }
59
+ // do *not* call userKeyUp
60
+ }, []);
61
+ // --- keyup (bubble phase) ---
62
+ const handleKeyUp = useCallback((e) => {
63
+ // short-circuit any leftover composition noise
64
+ if (isComposingRef.current || justEndedRef.current) {
65
+ justEndedRef.current = false;
66
+ return;
67
+ }
68
+ userKeyUp === null || userKeyUp === void 0 ? void 0 : userKeyUp(e);
69
+ }, [userKeyUp]);
70
+ return {
71
+ onCompositionStart: handleCompositionStart,
72
+ onCompositionEnd: handleCompositionEnd,
73
+ onKeyDownCapture: handleKeyDownCapture,
74
+ onKeyDown: handleKeyDown,
75
+ onKeyUpCapture: handleKeyUpCapture,
76
+ onKeyUp: handleKeyUp,
77
+ };
78
+ }
79
+ export default useIMEEnter;
80
+ //# sourceMappingURL=use-ime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-ime.js","sourceRoot":"","sources":["../src/use-ime.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@darajs/ui-utils",
3
- "version": "1.16.21",
3
+ "version": "1.16.23",
4
4
  "description": "General utilities for the Dara UI framework",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -20,9 +20,9 @@
20
20
  "@babel/core": "^7.15.5",
21
21
  "@babel/preset-env": "^7.15.6",
22
22
  "@babel/preset-react": "^7.14.5",
23
- "@darajs/eslint-config": "1.16.21",
24
- "@darajs/prettier-config": "1.16.21",
25
- "@darajs/stylelint-config": "1.16.21",
23
+ "@darajs/eslint-config": "1.16.23",
24
+ "@darajs/prettier-config": "1.16.23",
25
+ "@darajs/stylelint-config": "1.16.23",
26
26
  "@types/jest": "^25.2.3",
27
27
  "@types/lodash": "^4.14.155",
28
28
  "@types/react": "^18.0",
@@ -52,5 +52,5 @@
52
52
  "publishConfig": {
53
53
  "access": "public"
54
54
  },
55
- "gitHead": "d5dc2b19b720cff015a1fe845b28ff4c31a52467"
55
+ "gitHead": "9d1d96c633bde8fead99715318f32082282c4a50"
56
56
  }