@tamagui/checkbox-headless 1.89.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.
Files changed (70) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/BubbleInput.js +65 -0
  3. package/dist/cjs/BubbleInput.js.map +6 -0
  4. package/dist/cjs/BubbleInput.native.js +70 -0
  5. package/dist/cjs/BubbleInput.native.js.map +6 -0
  6. package/dist/cjs/index.js +16 -0
  7. package/dist/cjs/index.js.map +6 -0
  8. package/dist/cjs/index.native.js +22 -0
  9. package/dist/cjs/index.native.js.map +6 -0
  10. package/dist/cjs/useCheckbox.js +83 -0
  11. package/dist/cjs/useCheckbox.js.map +6 -0
  12. package/dist/cjs/useCheckbox.native.js +88 -0
  13. package/dist/cjs/useCheckbox.native.js.map +6 -0
  14. package/dist/cjs/utils.js +27 -0
  15. package/dist/cjs/utils.js.map +6 -0
  16. package/dist/cjs/utils.native.js +33 -0
  17. package/dist/cjs/utils.native.js.map +6 -0
  18. package/dist/esm/BubbleInput.js +44 -0
  19. package/dist/esm/BubbleInput.js.map +6 -0
  20. package/dist/esm/BubbleInput.mjs +47 -0
  21. package/dist/esm/BubbleInput.native.js +44 -0
  22. package/dist/esm/BubbleInput.native.js.map +6 -0
  23. package/dist/esm/index.js +3 -0
  24. package/dist/esm/index.js.map +6 -0
  25. package/dist/esm/index.mjs +2 -0
  26. package/dist/esm/index.native.js +3 -0
  27. package/dist/esm/index.native.js.map +6 -0
  28. package/dist/esm/useCheckbox.js +66 -0
  29. package/dist/esm/useCheckbox.js.map +6 -0
  30. package/dist/esm/useCheckbox.mjs +58 -0
  31. package/dist/esm/useCheckbox.native.js +66 -0
  32. package/dist/esm/useCheckbox.native.js.map +6 -0
  33. package/dist/esm/utils.js +11 -0
  34. package/dist/esm/utils.js.map +6 -0
  35. package/dist/esm/utils.mjs +7 -0
  36. package/dist/esm/utils.native.js +11 -0
  37. package/dist/esm/utils.native.js.map +6 -0
  38. package/dist/jsx/BubbleInput.js +44 -0
  39. package/dist/jsx/BubbleInput.js.map +6 -0
  40. package/dist/jsx/BubbleInput.mjs +47 -0
  41. package/dist/jsx/BubbleInput.native.js +44 -0
  42. package/dist/jsx/BubbleInput.native.js.map +6 -0
  43. package/dist/jsx/index.js +3 -0
  44. package/dist/jsx/index.js.map +6 -0
  45. package/dist/jsx/index.mjs +2 -0
  46. package/dist/jsx/index.native.js +3 -0
  47. package/dist/jsx/index.native.js.map +6 -0
  48. package/dist/jsx/useCheckbox.js +66 -0
  49. package/dist/jsx/useCheckbox.js.map +6 -0
  50. package/dist/jsx/useCheckbox.mjs +58 -0
  51. package/dist/jsx/useCheckbox.native.js +66 -0
  52. package/dist/jsx/useCheckbox.native.js.map +6 -0
  53. package/dist/jsx/utils.js +11 -0
  54. package/dist/jsx/utils.js.map +6 -0
  55. package/dist/jsx/utils.mjs +7 -0
  56. package/dist/jsx/utils.native.js +11 -0
  57. package/dist/jsx/utils.native.js.map +6 -0
  58. package/package.json +55 -0
  59. package/src/BubbleInput.tsx +64 -0
  60. package/src/index.ts +2 -0
  61. package/src/useCheckbox.tsx +112 -0
  62. package/src/utils.tsx +9 -0
  63. package/types/BubbleInput.d.ts +10 -0
  64. package/types/BubbleInput.d.ts.map +1 -0
  65. package/types/index.d.ts +3 -0
  66. package/types/index.d.ts.map +1 -0
  67. package/types/useCheckbox.d.ts +43 -0
  68. package/types/useCheckbox.d.ts.map +1 -0
  69. package/types/utils.d.ts +4 -0
  70. package/types/utils.d.ts.map +1 -0
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/BubbleInput.tsx"],
4
+ "mappings": "AAAA,SAAS,mBAAmB;AAC5B,YAAY,WAAW;AAGvB,SAAS,uBAAuB;AAkC5B;AAxBG,MAAM,cAAc,CAAC,UAA4B;AACtD,QAAM,EAAE,SAAS,UAAU,IAAM,SAAS,UAAU,GAAG,WAAW,IAAI,OAChE,MAAM,MAAM,OAAyB,IAAI,GACzC,cAAc,YAAY,OAAO;AAGvC,eAAM,UAAU,MAAM;AACpB,UAAM,QAAQ,IAAI,SACZ,aAAa,OAAO,iBAAiB,WAKrC,aAJa,OAAO;AAAA,MACxB;AAAA,MACA;AAAA,IACF,EAC8B;AAE9B,QAAI,gBAAgB,WAAW,YAAY;AACzC,YAAM,QAAQ,IAAI,MAAM,SAAS,EAAE,QAAQ,CAAC;AAC5C,YAAM,gBAAgB,gBAAgB,OAAO,GAC7C,WAAW,KAAK,OAAO,gBAAgB,OAAO,IAAI,KAAQ,OAAO,GACjE,MAAM,cAAc,KAAK;AAAA,IAC3B;AAAA,EACF,GAAG,CAAC,aAAa,SAAS,OAAO,CAAC,GAGhC;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,gBAAgB,gBAAgB,OAAO,IAAI,KAAQ;AAAA,MAClD,GAAG;AAAA,MACJ,UAAU;AAAA,MACV;AAAA,MACA,eAAa;AAAA,MACb,OAAO;AAAA,QACL,GAAI,WACA;AAAA;AAAA,UAEE,UAAU;AAAA,UACV,eAAe;AAAA,UACf,SAAS;AAAA,UACT,QAAQ;AAAA,QACV,IACA;AAAA,UACE,YAAY;AAAA,UACZ,aAAa;AAAA,QACf;AAAA,QAEJ,GAAG,MAAM;AAAA,MACX;AAAA;AAAA,EACF;AAEJ;",
5
+ "names": []
6
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./useCheckbox";
2
+ export * from "./utils";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": "AAAA,cAAc;AACd,cAAc;",
5
+ "names": []
6
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./useCheckbox.mjs";
2
+ export * from "./utils.mjs";
@@ -0,0 +1,3 @@
1
+ export * from "./useCheckbox";
2
+ export * from "./utils";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": "AAAA,cAAc;AACd,cAAc;",
5
+ "names": []
6
+ }
@@ -0,0 +1,66 @@
1
+ import { useComposedRefs } from "@tamagui/compose-refs";
2
+ import { isWeb } from "@tamagui/constants";
3
+ import { composeEventHandlers } from "@tamagui/helpers";
4
+ import { useLabelContext } from "@tamagui/label";
5
+ import React from "react";
6
+ import { BubbleInput } from "./BubbleInput";
7
+ import { getState, isIndeterminate } from "./utils";
8
+ import { jsx } from "react/jsx-runtime";
9
+ function useCheckbox(props, [checked, setChecked], ref) {
10
+ const {
11
+ labelledBy: ariaLabelledby,
12
+ name,
13
+ required,
14
+ disabled,
15
+ value = "on",
16
+ onCheckedChange,
17
+ ...checkboxProps
18
+ } = props, [button, setButton] = React.useState(null), composedRefs = useComposedRefs(ref, (node) => setButton(node)), hasConsumerStoppedPropagationRef = React.useRef(!1), isFormControl = isWeb ? button ? !!button.closest("form") : !0 : !1, labelId = useLabelContext(button), labelledBy = ariaLabelledby || labelId;
19
+ return {
20
+ bubbleInput: isWeb && isFormControl ? /* @__PURE__ */ jsx(
21
+ BubbleInput,
22
+ {
23
+ isHidden: !0,
24
+ control: button,
25
+ bubbles: !hasConsumerStoppedPropagationRef.current,
26
+ name,
27
+ value,
28
+ checked,
29
+ required,
30
+ disabled
31
+ }
32
+ ) : null,
33
+ checkboxRef: composedRefs,
34
+ checkboxProps: {
35
+ role: "checkbox",
36
+ "aria-labelledby": labelledBy,
37
+ "aria-checked": isIndeterminate(checked) ? "mixed" : checked,
38
+ ...checkboxProps,
39
+ ...isWeb && {
40
+ type: "button",
41
+ value,
42
+ "data-state": getState(checked),
43
+ "data-disabled": disabled ? "" : void 0,
44
+ disabled,
45
+ onKeyDown: composeEventHandlers(
46
+ props.onKeyDown,
47
+ (event) => {
48
+ event.key === "Enter" && event.preventDefault();
49
+ }
50
+ )
51
+ },
52
+ onPress: composeEventHandlers(
53
+ props.onPress,
54
+ (event) => {
55
+ setChecked(
56
+ (prevChecked) => isIndeterminate(prevChecked) ? !0 : !prevChecked
57
+ ), isFormControl && "isPropagationStopped" in event && (hasConsumerStoppedPropagationRef.current = event.isPropagationStopped(), hasConsumerStoppedPropagationRef.current || event.stopPropagation());
58
+ }
59
+ )
60
+ }
61
+ };
62
+ }
63
+ export {
64
+ useCheckbox
65
+ };
66
+ //# sourceMappingURL=useCheckbox.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/useCheckbox.tsx"],
4
+ "mappings": "AAAA,SAAS,uBAAuB;AAChC,SAAS,aAAa;AAEtB,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAChC,OAAO,WAAW;AAGlB,SAAS,mBAAmB;AAC5B,SAAS,UAAU,uBAAuB;AAsDlC;AA7BD,SAAS,YACd,OACA,CAAC,SAAS,UAAU,GAIpB,KACA;AACA,QAAM;AAAA,IACJ,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,GAAG;AAAA,EACL,IAAI,OACE,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAmC,IAAI,GACnE,eAAe,gBAAgB,KAAK,CAAC,SAAS,UAAU,IAAW,CAAC,GACpE,mCAAmC,MAAM,OAAO,EAAK,GAErD,gBAAgB,QAAS,SAAS,EAAQ,OAAO,QAAQ,MAAM,IAAK,KAAQ,IAE5E,UAAU,gBAAgB,MAAM,GAChC,aAAa,kBAAkB;AAErC,SAAO;AAAA,IACL,aACE,SAAS,gBACP;AAAA,MAAC;AAAA;AAAA,QACC,UAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS,CAAC,iCAAiC;AAAA,QAC3C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF,IACE;AAAA,IACN,aAAa;AAAA,IACb,eAAe;AAAA,MACb,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,gBAAgB,gBAAgB,OAAO,IAAI,UAAU;AAAA,MACrD,GAAG;AAAA,MACH,GAAI,SAAS;AAAA,QACX,MAAM;AAAA,QACN;AAAA,QACA,cAAc,SAAS,OAAO;AAAA,QAC9B,iBAAiB,WAAW,KAAK;AAAA,QACjC;AAAA,QACA,WAAW;AAAA,UACR,MAA6C;AAAA,UAC9C,CAAC,UAAU;AAET,YAAI,MAAM,QAAQ,WAAS,MAAM,eAAe;AAAA,UAClD;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,CAAC,UAAgC;AAC/B;AAAA,YAAW,CAAC,gBACV,gBAAgB,WAAW,IAAI,KAAO,CAAC;AAAA,UACzC,GACI,iBAAiB,0BAA0B,UAC7C,iCAAiC,UAAU,MAAM,qBAAqB,GAIjE,iCAAiC,WAAS,MAAM,gBAAgB;AAAA,QAEzE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;",
5
+ "names": []
6
+ }
@@ -0,0 +1,58 @@
1
+ import { useComposedRefs } from "@tamagui/compose-refs";
2
+ import { isWeb } from "@tamagui/constants";
3
+ import { composeEventHandlers } from "@tamagui/helpers";
4
+ import { useLabelContext } from "@tamagui/label";
5
+ import React from "react";
6
+ import { BubbleInput } from "./BubbleInput.mjs";
7
+ import { getState, isIndeterminate } from "./utils.mjs";
8
+ import { jsx } from "react/jsx-runtime";
9
+ function useCheckbox(props, [checked, setChecked], ref) {
10
+ const {
11
+ labelledBy: ariaLabelledby,
12
+ name,
13
+ required,
14
+ disabled,
15
+ value = "on",
16
+ onCheckedChange,
17
+ ...checkboxProps
18
+ } = props,
19
+ [button, setButton] = React.useState(null),
20
+ composedRefs = useComposedRefs(ref, node => setButton(node)),
21
+ hasConsumerStoppedPropagationRef = React.useRef(!1),
22
+ isFormControl = isWeb ? button ? !!button.closest("form") : !0 : !1,
23
+ labelId = useLabelContext(button),
24
+ labelledBy = ariaLabelledby || labelId;
25
+ return {
26
+ bubbleInput: isWeb && isFormControl ? /* @__PURE__ */jsx(BubbleInput, {
27
+ isHidden: !0,
28
+ control: button,
29
+ bubbles: !hasConsumerStoppedPropagationRef.current,
30
+ name,
31
+ value,
32
+ checked,
33
+ required,
34
+ disabled
35
+ }) : null,
36
+ checkboxRef: composedRefs,
37
+ checkboxProps: {
38
+ role: "checkbox",
39
+ "aria-labelledby": labelledBy,
40
+ "aria-checked": isIndeterminate(checked) ? "mixed" : checked,
41
+ ...checkboxProps,
42
+ ...(isWeb && {
43
+ type: "button",
44
+ value,
45
+ "data-state": getState(checked),
46
+ "data-disabled": disabled ? "" : void 0,
47
+ disabled,
48
+ onKeyDown: composeEventHandlers(props.onKeyDown, event => {
49
+ event.key === "Enter" && event.preventDefault();
50
+ })
51
+ }),
52
+ onPress: composeEventHandlers(props.onPress, event => {
53
+ setChecked(prevChecked => isIndeterminate(prevChecked) ? !0 : !prevChecked), isFormControl && "isPropagationStopped" in event && (hasConsumerStoppedPropagationRef.current = event.isPropagationStopped(), hasConsumerStoppedPropagationRef.current || event.stopPropagation());
54
+ })
55
+ }
56
+ };
57
+ }
58
+ export { useCheckbox };
@@ -0,0 +1,66 @@
1
+ import { useComposedRefs } from "@tamagui/compose-refs";
2
+ import { isWeb } from "@tamagui/constants";
3
+ import { composeEventHandlers } from "@tamagui/helpers";
4
+ import { useLabelContext } from "@tamagui/label";
5
+ import React from "react";
6
+ import { BubbleInput } from "./BubbleInput";
7
+ import { getState, isIndeterminate } from "./utils";
8
+ import { jsx } from "react/jsx-runtime";
9
+ function useCheckbox(props, [checked, setChecked], ref) {
10
+ const {
11
+ labelledBy: ariaLabelledby,
12
+ name,
13
+ required,
14
+ disabled,
15
+ value = "on",
16
+ onCheckedChange,
17
+ ...checkboxProps
18
+ } = props, [button, setButton] = React.useState(null), composedRefs = useComposedRefs(ref, (node) => setButton(node)), hasConsumerStoppedPropagationRef = React.useRef(!1), isFormControl = isWeb ? button ? !!button.closest("form") : !0 : !1, labelId = useLabelContext(button), labelledBy = ariaLabelledby || labelId;
19
+ return {
20
+ bubbleInput: isWeb && isFormControl ? /* @__PURE__ */ jsx(
21
+ BubbleInput,
22
+ {
23
+ isHidden: !0,
24
+ control: button,
25
+ bubbles: !hasConsumerStoppedPropagationRef.current,
26
+ name,
27
+ value,
28
+ checked,
29
+ required,
30
+ disabled
31
+ }
32
+ ) : null,
33
+ checkboxRef: composedRefs,
34
+ checkboxProps: {
35
+ role: "checkbox",
36
+ "aria-labelledby": labelledBy,
37
+ "aria-checked": isIndeterminate(checked) ? "mixed" : checked,
38
+ ...checkboxProps,
39
+ ...isWeb && {
40
+ type: "button",
41
+ value,
42
+ "data-state": getState(checked),
43
+ "data-disabled": disabled ? "" : void 0,
44
+ disabled,
45
+ onKeyDown: composeEventHandlers(
46
+ props.onKeyDown,
47
+ (event) => {
48
+ event.key === "Enter" && event.preventDefault();
49
+ }
50
+ )
51
+ },
52
+ onPress: composeEventHandlers(
53
+ props.onPress,
54
+ (event) => {
55
+ setChecked(
56
+ (prevChecked) => isIndeterminate(prevChecked) ? !0 : !prevChecked
57
+ ), isFormControl && "isPropagationStopped" in event && (hasConsumerStoppedPropagationRef.current = event.isPropagationStopped(), hasConsumerStoppedPropagationRef.current || event.stopPropagation());
58
+ }
59
+ )
60
+ }
61
+ };
62
+ }
63
+ export {
64
+ useCheckbox
65
+ };
66
+ //# sourceMappingURL=useCheckbox.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/useCheckbox.tsx"],
4
+ "mappings": "AAAA,SAAS,uBAAuB;AAChC,SAAS,aAAa;AAEtB,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAChC,OAAO,WAAW;AAGlB,SAAS,mBAAmB;AAC5B,SAAS,UAAU,uBAAuB;AAsDlC;AA7BD,SAAS,YACd,OACA,CAAC,SAAS,UAAU,GAIpB,KACA;AACA,QAAM;AAAA,IACJ,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,GAAG;AAAA,EACL,IAAI,OACE,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAmC,IAAI,GACnE,eAAe,gBAAgB,KAAK,CAAC,SAAS,UAAU,IAAW,CAAC,GACpE,mCAAmC,MAAM,OAAO,EAAK,GAErD,gBAAgB,QAAS,SAAS,EAAQ,OAAO,QAAQ,MAAM,IAAK,KAAQ,IAE5E,UAAU,gBAAgB,MAAM,GAChC,aAAa,kBAAkB;AAErC,SAAO;AAAA,IACL,aACE,SAAS,gBACP;AAAA,MAAC;AAAA;AAAA,QACC,UAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS,CAAC,iCAAiC;AAAA,QAC3C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF,IACE;AAAA,IACN,aAAa;AAAA,IACb,eAAe;AAAA,MACb,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,gBAAgB,gBAAgB,OAAO,IAAI,UAAU;AAAA,MACrD,GAAG;AAAA,MACH,GAAI,SAAS;AAAA,QACX,MAAM;AAAA,QACN;AAAA,QACA,cAAc,SAAS,OAAO;AAAA,QAC9B,iBAAiB,WAAW,KAAK;AAAA,QACjC;AAAA,QACA,WAAW;AAAA,UACR,MAA6C;AAAA,UAC9C,CAAC,UAAU;AAET,YAAI,MAAM,QAAQ,WAAS,MAAM,eAAe;AAAA,UAClD;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,CAAC,UAAgC;AAC/B;AAAA,YAAW,CAAC,gBACV,gBAAgB,WAAW,IAAI,KAAO,CAAC;AAAA,UACzC,GACI,iBAAiB,0BAA0B,UAC7C,iCAAiC,UAAU,MAAM,qBAAqB,GAIjE,iCAAiC,WAAS,MAAM,gBAAgB;AAAA,QAEzE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;",
5
+ "names": []
6
+ }
@@ -0,0 +1,11 @@
1
+ function isIndeterminate(checked) {
2
+ return checked === "indeterminate";
3
+ }
4
+ function getState(checked) {
5
+ return isIndeterminate(checked) ? "indeterminate" : checked ? "checked" : "unchecked";
6
+ }
7
+ export {
8
+ getState,
9
+ isIndeterminate
10
+ };
11
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils.tsx"],
4
+ "mappings": "AAEO,SAAS,gBAAgB,SAAoD;AAClF,SAAO,YAAY;AACrB;AAEO,SAAS,SAAS,SAAuB;AAC9C,SAAO,gBAAgB,OAAO,IAAI,kBAAkB,UAAU,YAAY;AAC5E;",
5
+ "names": []
6
+ }
@@ -0,0 +1,7 @@
1
+ function isIndeterminate(checked) {
2
+ return checked === "indeterminate";
3
+ }
4
+ function getState(checked) {
5
+ return isIndeterminate(checked) ? "indeterminate" : checked ? "checked" : "unchecked";
6
+ }
7
+ export { getState, isIndeterminate };
@@ -0,0 +1,11 @@
1
+ function isIndeterminate(checked) {
2
+ return checked === "indeterminate";
3
+ }
4
+ function getState(checked) {
5
+ return isIndeterminate(checked) ? "indeterminate" : checked ? "checked" : "unchecked";
6
+ }
7
+ export {
8
+ getState,
9
+ isIndeterminate
10
+ };
11
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils.tsx"],
4
+ "mappings": "AAEO,SAAS,gBAAgB,SAAoD;AAClF,SAAO,YAAY;AACrB;AAEO,SAAS,SAAS,SAAuB;AAC9C,SAAO,gBAAgB,OAAO,IAAI,kBAAkB,UAAU,YAAY;AAC5E;",
5
+ "names": []
6
+ }
@@ -0,0 +1,44 @@
1
+ import { usePrevious } from "@tamagui/use-previous";
2
+ import * as React from "react";
3
+ import { isIndeterminate } from "./utils";
4
+ import { jsx } from "react/jsx-runtime";
5
+ const BubbleInput = (props) => {
6
+ const { checked, bubbles = !0, control, isHidden, ...inputProps } = props, ref = React.useRef(null), prevChecked = usePrevious(checked);
7
+ return React.useEffect(() => {
8
+ const input = ref.current, inputProto = window.HTMLInputElement.prototype, setChecked = Object.getOwnPropertyDescriptor(
9
+ inputProto,
10
+ "checked"
11
+ ).set;
12
+ if (prevChecked !== checked && setChecked) {
13
+ const event = new Event("click", { bubbles });
14
+ input.indeterminate = isIndeterminate(checked), setChecked.call(input, isIndeterminate(checked) ? !1 : checked), input.dispatchEvent(event);
15
+ }
16
+ }, [prevChecked, checked, bubbles]), /* @__PURE__ */ jsx(
17
+ "input",
18
+ {
19
+ type: "checkbox",
20
+ defaultChecked: isIndeterminate(checked) ? !1 : checked,
21
+ ...inputProps,
22
+ tabIndex: -1,
23
+ ref,
24
+ "aria-hidden": isHidden,
25
+ style: {
26
+ ...isHidden ? {
27
+ // ...controlSize,
28
+ position: "absolute",
29
+ pointerEvents: "none",
30
+ opacity: 0,
31
+ margin: 0
32
+ } : {
33
+ appearance: "auto",
34
+ accentColor: "var(--color6)"
35
+ },
36
+ ...props.style
37
+ }
38
+ }
39
+ );
40
+ };
41
+ export {
42
+ BubbleInput
43
+ };
44
+ //# sourceMappingURL=BubbleInput.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/BubbleInput.tsx"],
4
+ "mappings": "AAAA,SAAS,mBAAmB;AAC5B,YAAY,WAAW;AAGvB,SAAS,uBAAuB;AAkC5B;AAxBG,MAAM,cAAc,CAAC,UAA4B;AACtD,QAAM,EAAE,SAAS,UAAU,IAAM,SAAS,UAAU,GAAG,WAAW,IAAI,OAChE,MAAM,MAAM,OAAyB,IAAI,GACzC,cAAc,YAAY,OAAO;AAGvC,eAAM,UAAU,MAAM;AACpB,UAAM,QAAQ,IAAI,SACZ,aAAa,OAAO,iBAAiB,WAKrC,aAJa,OAAO;AAAA,MACxB;AAAA,MACA;AAAA,IACF,EAC8B;AAE9B,QAAI,gBAAgB,WAAW,YAAY;AACzC,YAAM,QAAQ,IAAI,MAAM,SAAS,EAAE,QAAQ,CAAC;AAC5C,YAAM,gBAAgB,gBAAgB,OAAO,GAC7C,WAAW,KAAK,OAAO,gBAAgB,OAAO,IAAI,KAAQ,OAAO,GACjE,MAAM,cAAc,KAAK;AAAA,IAC3B;AAAA,EACF,GAAG,CAAC,aAAa,SAAS,OAAO,CAAC,GAGhC;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,gBAAgB,gBAAgB,OAAO,IAAI,KAAQ;AAAA,MAClD,GAAG;AAAA,MACJ,UAAU;AAAA,MACV;AAAA,MACA,eAAa;AAAA,MACb,OAAO;AAAA,QACL,GAAI,WACA;AAAA;AAAA,UAEE,UAAU;AAAA,UACV,eAAe;AAAA,UACf,SAAS;AAAA,UACT,QAAQ;AAAA,QACV,IACA;AAAA,UACE,YAAY;AAAA,UACZ,aAAa;AAAA,QACf;AAAA,QAEJ,GAAG,MAAM;AAAA,MACX;AAAA;AAAA,EACF;AAEJ;",
5
+ "names": []
6
+ }
@@ -0,0 +1,47 @@
1
+ import { usePrevious } from "@tamagui/use-previous";
2
+ import * as React from "react";
3
+ import { isIndeterminate } from "./utils.mjs";
4
+ import { jsx } from "react/jsx-runtime";
5
+ const BubbleInput = props => {
6
+ const {
7
+ checked,
8
+ bubbles = !0,
9
+ control,
10
+ isHidden,
11
+ ...inputProps
12
+ } = props,
13
+ ref = React.useRef(null),
14
+ prevChecked = usePrevious(checked);
15
+ return React.useEffect(() => {
16
+ const input = ref.current,
17
+ inputProto = window.HTMLInputElement.prototype,
18
+ setChecked = Object.getOwnPropertyDescriptor(inputProto, "checked").set;
19
+ if (prevChecked !== checked && setChecked) {
20
+ const event = new Event("click", {
21
+ bubbles
22
+ });
23
+ input.indeterminate = isIndeterminate(checked), setChecked.call(input, isIndeterminate(checked) ? !1 : checked), input.dispatchEvent(event);
24
+ }
25
+ }, [prevChecked, checked, bubbles]), /* @__PURE__ */jsx("input", {
26
+ type: "checkbox",
27
+ defaultChecked: isIndeterminate(checked) ? !1 : checked,
28
+ ...inputProps,
29
+ tabIndex: -1,
30
+ ref,
31
+ "aria-hidden": isHidden,
32
+ style: {
33
+ ...(isHidden ? {
34
+ // ...controlSize,
35
+ position: "absolute",
36
+ pointerEvents: "none",
37
+ opacity: 0,
38
+ margin: 0
39
+ } : {
40
+ appearance: "auto",
41
+ accentColor: "var(--color6)"
42
+ }),
43
+ ...props.style
44
+ }
45
+ });
46
+ };
47
+ export { BubbleInput };
@@ -0,0 +1,44 @@
1
+ import { usePrevious } from "@tamagui/use-previous";
2
+ import * as React from "react";
3
+ import { isIndeterminate } from "./utils";
4
+ import { jsx } from "react/jsx-runtime";
5
+ const BubbleInput = (props) => {
6
+ const { checked, bubbles = !0, control, isHidden, ...inputProps } = props, ref = React.useRef(null), prevChecked = usePrevious(checked);
7
+ return React.useEffect(() => {
8
+ const input = ref.current, inputProto = window.HTMLInputElement.prototype, setChecked = Object.getOwnPropertyDescriptor(
9
+ inputProto,
10
+ "checked"
11
+ ).set;
12
+ if (prevChecked !== checked && setChecked) {
13
+ const event = new Event("click", { bubbles });
14
+ input.indeterminate = isIndeterminate(checked), setChecked.call(input, isIndeterminate(checked) ? !1 : checked), input.dispatchEvent(event);
15
+ }
16
+ }, [prevChecked, checked, bubbles]), /* @__PURE__ */ jsx(
17
+ "input",
18
+ {
19
+ type: "checkbox",
20
+ defaultChecked: isIndeterminate(checked) ? !1 : checked,
21
+ ...inputProps,
22
+ tabIndex: -1,
23
+ ref,
24
+ "aria-hidden": isHidden,
25
+ style: {
26
+ ...isHidden ? {
27
+ // ...controlSize,
28
+ position: "absolute",
29
+ pointerEvents: "none",
30
+ opacity: 0,
31
+ margin: 0
32
+ } : {
33
+ appearance: "auto",
34
+ accentColor: "var(--color6)"
35
+ },
36
+ ...props.style
37
+ }
38
+ }
39
+ );
40
+ };
41
+ export {
42
+ BubbleInput
43
+ };
44
+ //# sourceMappingURL=BubbleInput.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/BubbleInput.tsx"],
4
+ "mappings": "AAAA,SAAS,mBAAmB;AAC5B,YAAY,WAAW;AAGvB,SAAS,uBAAuB;AAkC5B;AAxBG,MAAM,cAAc,CAAC,UAA4B;AACtD,QAAM,EAAE,SAAS,UAAU,IAAM,SAAS,UAAU,GAAG,WAAW,IAAI,OAChE,MAAM,MAAM,OAAyB,IAAI,GACzC,cAAc,YAAY,OAAO;AAGvC,eAAM,UAAU,MAAM;AACpB,UAAM,QAAQ,IAAI,SACZ,aAAa,OAAO,iBAAiB,WAKrC,aAJa,OAAO;AAAA,MACxB;AAAA,MACA;AAAA,IACF,EAC8B;AAE9B,QAAI,gBAAgB,WAAW,YAAY;AACzC,YAAM,QAAQ,IAAI,MAAM,SAAS,EAAE,QAAQ,CAAC;AAC5C,YAAM,gBAAgB,gBAAgB,OAAO,GAC7C,WAAW,KAAK,OAAO,gBAAgB,OAAO,IAAI,KAAQ,OAAO,GACjE,MAAM,cAAc,KAAK;AAAA,IAC3B;AAAA,EACF,GAAG,CAAC,aAAa,SAAS,OAAO,CAAC,GAGhC;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,gBAAgB,gBAAgB,OAAO,IAAI,KAAQ;AAAA,MAClD,GAAG;AAAA,MACJ,UAAU;AAAA,MACV;AAAA,MACA,eAAa;AAAA,MACb,OAAO;AAAA,QACL,GAAI,WACA;AAAA;AAAA,UAEE,UAAU;AAAA,UACV,eAAe;AAAA,UACf,SAAS;AAAA,UACT,QAAQ;AAAA,QACV,IACA;AAAA,UACE,YAAY;AAAA,UACZ,aAAa;AAAA,QACf;AAAA,QAEJ,GAAG,MAAM;AAAA,MACX;AAAA;AAAA,EACF;AAEJ;",
5
+ "names": []
6
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./useCheckbox";
2
+ export * from "./utils";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": "AAAA,cAAc;AACd,cAAc;",
5
+ "names": []
6
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./useCheckbox.mjs";
2
+ export * from "./utils.mjs";
@@ -0,0 +1,3 @@
1
+ export * from "./useCheckbox";
2
+ export * from "./utils";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": "AAAA,cAAc;AACd,cAAc;",
5
+ "names": []
6
+ }
@@ -0,0 +1,66 @@
1
+ import { useComposedRefs } from "@tamagui/compose-refs";
2
+ import { isWeb } from "@tamagui/constants";
3
+ import { composeEventHandlers } from "@tamagui/helpers";
4
+ import { useLabelContext } from "@tamagui/label";
5
+ import React from "react";
6
+ import { BubbleInput } from "./BubbleInput";
7
+ import { getState, isIndeterminate } from "./utils";
8
+ import { jsx } from "react/jsx-runtime";
9
+ function useCheckbox(props, [checked, setChecked], ref) {
10
+ const {
11
+ labelledBy: ariaLabelledby,
12
+ name,
13
+ required,
14
+ disabled,
15
+ value = "on",
16
+ onCheckedChange,
17
+ ...checkboxProps
18
+ } = props, [button, setButton] = React.useState(null), composedRefs = useComposedRefs(ref, (node) => setButton(node)), hasConsumerStoppedPropagationRef = React.useRef(!1), isFormControl = isWeb ? button ? !!button.closest("form") : !0 : !1, labelId = useLabelContext(button), labelledBy = ariaLabelledby || labelId;
19
+ return {
20
+ bubbleInput: isWeb && isFormControl ? /* @__PURE__ */ jsx(
21
+ BubbleInput,
22
+ {
23
+ isHidden: !0,
24
+ control: button,
25
+ bubbles: !hasConsumerStoppedPropagationRef.current,
26
+ name,
27
+ value,
28
+ checked,
29
+ required,
30
+ disabled
31
+ }
32
+ ) : null,
33
+ checkboxRef: composedRefs,
34
+ checkboxProps: {
35
+ role: "checkbox",
36
+ "aria-labelledby": labelledBy,
37
+ "aria-checked": isIndeterminate(checked) ? "mixed" : checked,
38
+ ...checkboxProps,
39
+ ...isWeb && {
40
+ type: "button",
41
+ value,
42
+ "data-state": getState(checked),
43
+ "data-disabled": disabled ? "" : void 0,
44
+ disabled,
45
+ onKeyDown: composeEventHandlers(
46
+ props.onKeyDown,
47
+ (event) => {
48
+ event.key === "Enter" && event.preventDefault();
49
+ }
50
+ )
51
+ },
52
+ onPress: composeEventHandlers(
53
+ props.onPress,
54
+ (event) => {
55
+ setChecked(
56
+ (prevChecked) => isIndeterminate(prevChecked) ? !0 : !prevChecked
57
+ ), isFormControl && "isPropagationStopped" in event && (hasConsumerStoppedPropagationRef.current = event.isPropagationStopped(), hasConsumerStoppedPropagationRef.current || event.stopPropagation());
58
+ }
59
+ )
60
+ }
61
+ };
62
+ }
63
+ export {
64
+ useCheckbox
65
+ };
66
+ //# sourceMappingURL=useCheckbox.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/useCheckbox.tsx"],
4
+ "mappings": "AAAA,SAAS,uBAAuB;AAChC,SAAS,aAAa;AAEtB,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAChC,OAAO,WAAW;AAGlB,SAAS,mBAAmB;AAC5B,SAAS,UAAU,uBAAuB;AAsDlC;AA7BD,SAAS,YACd,OACA,CAAC,SAAS,UAAU,GAIpB,KACA;AACA,QAAM;AAAA,IACJ,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,GAAG;AAAA,EACL,IAAI,OACE,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAmC,IAAI,GACnE,eAAe,gBAAgB,KAAK,CAAC,SAAS,UAAU,IAAW,CAAC,GACpE,mCAAmC,MAAM,OAAO,EAAK,GAErD,gBAAgB,QAAS,SAAS,EAAQ,OAAO,QAAQ,MAAM,IAAK,KAAQ,IAE5E,UAAU,gBAAgB,MAAM,GAChC,aAAa,kBAAkB;AAErC,SAAO;AAAA,IACL,aACE,SAAS,gBACP;AAAA,MAAC;AAAA;AAAA,QACC,UAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS,CAAC,iCAAiC;AAAA,QAC3C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF,IACE;AAAA,IACN,aAAa;AAAA,IACb,eAAe;AAAA,MACb,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,gBAAgB,gBAAgB,OAAO,IAAI,UAAU;AAAA,MACrD,GAAG;AAAA,MACH,GAAI,SAAS;AAAA,QACX,MAAM;AAAA,QACN;AAAA,QACA,cAAc,SAAS,OAAO;AAAA,QAC9B,iBAAiB,WAAW,KAAK;AAAA,QACjC;AAAA,QACA,WAAW;AAAA,UACR,MAA6C;AAAA,UAC9C,CAAC,UAAU;AAET,YAAI,MAAM,QAAQ,WAAS,MAAM,eAAe;AAAA,UAClD;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,CAAC,UAAgC;AAC/B;AAAA,YAAW,CAAC,gBACV,gBAAgB,WAAW,IAAI,KAAO,CAAC;AAAA,UACzC,GACI,iBAAiB,0BAA0B,UAC7C,iCAAiC,UAAU,MAAM,qBAAqB,GAIjE,iCAAiC,WAAS,MAAM,gBAAgB;AAAA,QAEzE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;",
5
+ "names": []
6
+ }
@@ -0,0 +1,58 @@
1
+ import { useComposedRefs } from "@tamagui/compose-refs";
2
+ import { isWeb } from "@tamagui/constants";
3
+ import { composeEventHandlers } from "@tamagui/helpers";
4
+ import { useLabelContext } from "@tamagui/label";
5
+ import React from "react";
6
+ import { BubbleInput } from "./BubbleInput.mjs";
7
+ import { getState, isIndeterminate } from "./utils.mjs";
8
+ import { jsx } from "react/jsx-runtime";
9
+ function useCheckbox(props, [checked, setChecked], ref) {
10
+ const {
11
+ labelledBy: ariaLabelledby,
12
+ name,
13
+ required,
14
+ disabled,
15
+ value = "on",
16
+ onCheckedChange,
17
+ ...checkboxProps
18
+ } = props,
19
+ [button, setButton] = React.useState(null),
20
+ composedRefs = useComposedRefs(ref, node => setButton(node)),
21
+ hasConsumerStoppedPropagationRef = React.useRef(!1),
22
+ isFormControl = isWeb ? button ? !!button.closest("form") : !0 : !1,
23
+ labelId = useLabelContext(button),
24
+ labelledBy = ariaLabelledby || labelId;
25
+ return {
26
+ bubbleInput: isWeb && isFormControl ? /* @__PURE__ */jsx(BubbleInput, {
27
+ isHidden: !0,
28
+ control: button,
29
+ bubbles: !hasConsumerStoppedPropagationRef.current,
30
+ name,
31
+ value,
32
+ checked,
33
+ required,
34
+ disabled
35
+ }) : null,
36
+ checkboxRef: composedRefs,
37
+ checkboxProps: {
38
+ role: "checkbox",
39
+ "aria-labelledby": labelledBy,
40
+ "aria-checked": isIndeterminate(checked) ? "mixed" : checked,
41
+ ...checkboxProps,
42
+ ...(isWeb && {
43
+ type: "button",
44
+ value,
45
+ "data-state": getState(checked),
46
+ "data-disabled": disabled ? "" : void 0,
47
+ disabled,
48
+ onKeyDown: composeEventHandlers(props.onKeyDown, event => {
49
+ event.key === "Enter" && event.preventDefault();
50
+ })
51
+ }),
52
+ onPress: composeEventHandlers(props.onPress, event => {
53
+ setChecked(prevChecked => isIndeterminate(prevChecked) ? !0 : !prevChecked), isFormControl && "isPropagationStopped" in event && (hasConsumerStoppedPropagationRef.current = event.isPropagationStopped(), hasConsumerStoppedPropagationRef.current || event.stopPropagation());
54
+ })
55
+ }
56
+ };
57
+ }
58
+ export { useCheckbox };