abdul-react 0.0.23 → 0.0.24

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,36 +1,78 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { useState, useEffect } from 'react';
2
+ import { useState, useRef, useEffect } from 'react';
3
3
  import classNames from '../../_virtual/index.js';
4
4
  import Icon from '../Icon/Icon.js';
5
5
  import Typography from '../Typography/Typography.js';
6
6
 
7
- const Checkbox = ({
8
- id,
9
- name,
10
- label,
11
- disabled = false,
12
- checked: initialChecked = false,
13
- partial = false,
14
- onChange,
15
- variant,
16
- isDefaultHover = false,
17
- labelFontSize = 12
18
- }) => {
19
- const [checked, setChecked] = useState(initialChecked);
7
+ const Checkbox = props => {
8
+ const {
9
+ id,
10
+ name,
11
+ label,
12
+ disabled = false,
13
+ checked: controlledChecked,
14
+ partial = false,
15
+ onChange,
16
+ variant,
17
+ isDefaultHover = false,
18
+ labelFontSize = 12
19
+ } = props;
20
+ // Detect controlled vs uncontrolled mode
21
+ const isControlled = Object.prototype.hasOwnProperty.call(props, 'checked') && typeof controlledChecked !== 'undefined';
22
+ const [checked, setChecked] = useState(!!controlledChecked);
23
+ const inputRef = useRef(null);
24
+ // Keep internal state in sync when controlled
20
25
  useEffect(() => {
21
- setChecked(initialChecked);
22
- }, [initialChecked]);
26
+ if (isControlled) setChecked(!!controlledChecked);
27
+ }, [controlledChecked, isControlled]);
28
+ // Apply native indeterminate for partial state
29
+ useEffect(() => {
30
+ if (inputRef.current) {
31
+ inputRef.current.indeterminate = partial && !checked;
32
+ }
33
+ }, [partial, checked]);
34
+ // Stop the grid/excel selection from hijacking events
35
+ const stopAllCapture = e => {
36
+ e.stopPropagation();
37
+ if (e.nativeEvent?.stopImmediatePropagation) {
38
+ // prevents other React and non-React listeners from firing
39
+ e.nativeEvent.stopImmediatePropagation();
40
+ }
41
+ };
42
+ const handleChange = e => {
43
+ if (!isControlled) {
44
+ setChecked(e.target.checked); // keep UI responsive even if parent doesn't update
45
+ }
46
+ onChange?.(e); // still notify parent
47
+ };
23
48
  return jsxs("label", {
24
49
  className: "ff-checkbox--overlay",
25
50
  htmlFor: id,
51
+ // Shield at capture phase so document/grid listeners don't see these
52
+ onPointerDownCapture: stopAllCapture,
53
+ onMouseDownCapture: stopAllCapture,
54
+ onClickCapture: stopAllCapture,
55
+ // Small z-index bump helps if a low z-index overlay exists
56
+ style: {
57
+ position: 'relative',
58
+ zIndex: 2
59
+ },
60
+ "data-ff-checkbox-root": true,
26
61
  children: [jsx("input", {
62
+ ref: inputRef,
27
63
  type: "checkbox",
28
64
  className: "ff-checkbox-input",
29
65
  id: id,
30
66
  name: name,
31
- checked: checked,
32
- onChange: onChange,
33
- disabled: disabled
67
+ checked: !!checked,
68
+ onChange: handleChange,
69
+ disabled: disabled,
70
+ "aria-checked": partial ? 'mixed' : checked,
71
+ "aria-disabled": disabled,
72
+ // Also shield on the input itself
73
+ onPointerDownCapture: stopAllCapture,
74
+ onMouseDownCapture: stopAllCapture,
75
+ onClickCapture: stopAllCapture
34
76
  }), jsx("span", {
35
77
  className: classNames('ff-checkbox-custom', {
36
78
  'ff-checkbox-checked': checked,
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.js","sources":["../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":[null],"names":["Checkbox","id","name","label","disabled","checked","initialChecked","partial","onChange","variant","isDefaultHover","labelFontSize","setChecked","useState","useEffect","_jsxs","className","htmlFor","children","_jsx","type","classNames","Icon","color","Typography","as","fontSize"],"mappings":";;;;;;AAQMA,MAAAA,QAAQ,GAA4BA,CAAC;EACzCC,EAAE;EACFC,IAAI;EACJC,KAAK;AACLC,EAAAA,QAAQ,GAAG,KAAK;EAChBC,OAAO,EAAEC,cAAc,GAAG,KAAK;AAC/BC,EAAAA,OAAO,GAAG,KAAK;EACfC,QAAQ;EACRC,OAAO;AACPC,EAAAA,cAAc,GAAG,KAAK;AACtBC,EAAAA,aAAa,GAAG;AAAE,CACnB,KAAI;EACH,MAAM,CAACN,OAAO,EAAEO,UAAU,CAAC,GAAGC,QAAQ,CAACP,cAAc,CAAC;AAEtDQ,EAAAA,SAAS,CAAC,MAAK;IACbF,UAAU,CAACN,cAAc,CAAC;AAC5B,GAAC,EAAE,CAACA,cAAc,CAAC,CAAC;EAEpB,OACES;AAAOC,IAAAA,SAAS,EAAC,sBAAsB;AAACC,IAAAA,OAAO,EAAEhB,EAAE;AAAAiB,IAAAA,QAAA,EAAA,CACjDC;AACEC,MAAAA,IAAI,EAAC,UAAU;AACfJ,MAAAA,SAAS,EAAC,mBAAmB;AAC7Bf,MAAAA,EAAE,EAAEA,EAAE;AACNC,MAAAA,IAAI,EAAEA,IAAI;AACVG,MAAAA,OAAO,EAAEA,OAAO;AAChBG,MAAAA,QAAQ,EAAEA,QAAQ;AAClBJ,MAAAA,QAAQ,EAAEA;MACV,EACFe,GAAA,CAAA,MAAA,EAAA;AACEH,MAAAA,SAAS,EAAEK,UAAU,CAAC,oBAAoB,EAAE;AAC1C,QAAA,qBAAqB,EAAEhB,OAAO;AAC9B,QAAA,gCAAgC,EAAEE,OAAO,IAAI,CAACF,OAAO;AACrD,QAAA,CAAC,CAAgBI,aAAAA,EAAAA,OAAO,CAAE,CAAA,GAAGA,OAAO;AACpC,QAAA,CAAC,wBAAwBA,OAAO,CAAA,CAAE,GAAGJ,OAAO,IAAII,OAAO;AACvD,QAAA,0BAA0B,EAAEC,cAAc;AAC1C,QAAA,sBAAsB,EAAEN;AACzB,OAAA,CAAC;gBAEDC,OAAO,IACNc,GAAA,CAACG,IAAI,EACH;AAAApB,QAAAA,IAAI,EAAC,MAAM;AACXqB,QAAAA,KAAK,EAAC,2BAA2B;AACjCP,QAAAA,SAAS,EAAC;OACV;MAEC,EACPG,GAAA,CAACK,UAAU,EAAA;AAACC,MAAAA,EAAE,EAAC,MAAM;AAACC,MAAAA,QAAQ,EAAEf,aAAa;AAAAO,MAAAA,QAAA,EAC1Cf;AACU,KAAA,CAAA;AAAA,GAAA,CACP;AAEZ;;;;"}
1
+ {"version":3,"file":"Checkbox.js","sources":["../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":[null],"names":["Checkbox","props","id","name","label","disabled","checked","controlledChecked","partial","onChange","variant","isDefaultHover","labelFontSize","isControlled","Object","prototype","hasOwnProperty","call","setChecked","useState","inputRef","useRef","useEffect","current","indeterminate","stopAllCapture","e","stopPropagation","nativeEvent","stopImmediatePropagation","handleChange","target","_jsxs","className","htmlFor","onPointerDownCapture","onMouseDownCapture","onClickCapture","style","position","zIndex","children","_jsx","ref","type","classNames","Icon","color","Typography","as","fontSize"],"mappings":"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"}
package/lib/index.cjs CHANGED
@@ -2371,33 +2371,75 @@ const dropdownDefaultCSSData$1 = {
2371
2371
  maxDropdownHeight: 160
2372
2372
  };
2373
2373
 
2374
- const Checkbox = ({
2375
- id,
2376
- name,
2377
- label,
2378
- disabled = false,
2379
- checked: initialChecked = false,
2380
- partial = false,
2381
- onChange,
2382
- variant,
2383
- isDefaultHover = false,
2384
- labelFontSize = 12
2385
- }) => {
2386
- const [checked, setChecked] = React.useState(initialChecked);
2374
+ const Checkbox = props => {
2375
+ const {
2376
+ id,
2377
+ name,
2378
+ label,
2379
+ disabled = false,
2380
+ checked: controlledChecked,
2381
+ partial = false,
2382
+ onChange,
2383
+ variant,
2384
+ isDefaultHover = false,
2385
+ labelFontSize = 12
2386
+ } = props;
2387
+ // Detect controlled vs uncontrolled mode
2388
+ const isControlled = Object.prototype.hasOwnProperty.call(props, 'checked') && typeof controlledChecked !== 'undefined';
2389
+ const [checked, setChecked] = React.useState(!!controlledChecked);
2390
+ const inputRef = React.useRef(null);
2391
+ // Keep internal state in sync when controlled
2392
+ React.useEffect(() => {
2393
+ if (isControlled) setChecked(!!controlledChecked);
2394
+ }, [controlledChecked, isControlled]);
2395
+ // Apply native indeterminate for partial state
2387
2396
  React.useEffect(() => {
2388
- setChecked(initialChecked);
2389
- }, [initialChecked]);
2397
+ if (inputRef.current) {
2398
+ inputRef.current.indeterminate = partial && !checked;
2399
+ }
2400
+ }, [partial, checked]);
2401
+ // Stop the grid/excel selection from hijacking events
2402
+ const stopAllCapture = e => {
2403
+ e.stopPropagation();
2404
+ if (e.nativeEvent?.stopImmediatePropagation) {
2405
+ // prevents other React and non-React listeners from firing
2406
+ e.nativeEvent.stopImmediatePropagation();
2407
+ }
2408
+ };
2409
+ const handleChange = e => {
2410
+ if (!isControlled) {
2411
+ setChecked(e.target.checked); // keep UI responsive even if parent doesn't update
2412
+ }
2413
+ onChange?.(e); // still notify parent
2414
+ };
2390
2415
  return jsxRuntime.jsxs("label", {
2391
2416
  className: "ff-checkbox--overlay",
2392
2417
  htmlFor: id,
2418
+ // Shield at capture phase so document/grid listeners don't see these
2419
+ onPointerDownCapture: stopAllCapture,
2420
+ onMouseDownCapture: stopAllCapture,
2421
+ onClickCapture: stopAllCapture,
2422
+ // Small z-index bump helps if a low z-index overlay exists
2423
+ style: {
2424
+ position: 'relative',
2425
+ zIndex: 2
2426
+ },
2427
+ "data-ff-checkbox-root": true,
2393
2428
  children: [jsxRuntime.jsx("input", {
2429
+ ref: inputRef,
2394
2430
  type: "checkbox",
2395
2431
  className: "ff-checkbox-input",
2396
2432
  id: id,
2397
2433
  name: name,
2398
- checked: checked,
2399
- onChange: onChange,
2400
- disabled: disabled
2434
+ checked: !!checked,
2435
+ onChange: handleChange,
2436
+ disabled: disabled,
2437
+ "aria-checked": partial ? 'mixed' : checked,
2438
+ "aria-disabled": disabled,
2439
+ // Also shield on the input itself
2440
+ onPointerDownCapture: stopAllCapture,
2441
+ onMouseDownCapture: stopAllCapture,
2442
+ onClickCapture: stopAllCapture
2401
2443
  }), jsxRuntime.jsx("span", {
2402
2444
  className: classNames('ff-checkbox-custom', {
2403
2445
  'ff-checkbox-checked': checked,