@cdx-ui/primitives 0.1.5 → 0.1.7

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 (130) hide show
  1. package/lib/commonjs/dialog/DialogContent.js +13 -5
  2. package/lib/commonjs/dialog/DialogContent.js.map +1 -1
  3. package/lib/commonjs/dialog/DialogPopup.js +7 -1
  4. package/lib/commonjs/dialog/DialogPopup.js.map +1 -1
  5. package/lib/commonjs/dialog/DialogRoot.js +3 -1
  6. package/lib/commonjs/dialog/DialogRoot.js.map +1 -1
  7. package/lib/commonjs/index.js +12 -0
  8. package/lib/commonjs/index.js.map +1 -1
  9. package/lib/commonjs/portal/portal.js +4 -2
  10. package/lib/commonjs/portal/portal.js.map +1 -1
  11. package/lib/commonjs/select/SelectContent.js +1 -0
  12. package/lib/commonjs/select/SelectContent.js.map +1 -1
  13. package/lib/commonjs/toggle-button/ToggleButtonGroup.js +185 -0
  14. package/lib/commonjs/toggle-button/ToggleButtonGroup.js.map +1 -0
  15. package/lib/commonjs/toggle-button/ToggleButtonRoot.js +131 -0
  16. package/lib/commonjs/toggle-button/ToggleButtonRoot.js.map +1 -0
  17. package/lib/commonjs/toggle-button/ToggleButtonRoot.web.js +180 -0
  18. package/lib/commonjs/toggle-button/ToggleButtonRoot.web.js.map +1 -0
  19. package/lib/commonjs/toggle-button/context.js +27 -0
  20. package/lib/commonjs/toggle-button/context.js.map +1 -0
  21. package/lib/commonjs/toggle-button/index.js +45 -0
  22. package/lib/commonjs/toggle-button/index.js.map +1 -0
  23. package/lib/commonjs/toggle-button/toggleState.js +23 -0
  24. package/lib/commonjs/toggle-button/toggleState.js.map +1 -0
  25. package/lib/commonjs/toggle-button/types.js +6 -0
  26. package/lib/commonjs/toggle-button/types.js.map +1 -0
  27. package/lib/commonjs/toggle-button/useToggleButtonGroupNavigation.js +80 -0
  28. package/lib/commonjs/toggle-button/useToggleButtonGroupNavigation.js.map +1 -0
  29. package/lib/module/dialog/DialogContent.js +13 -5
  30. package/lib/module/dialog/DialogContent.js.map +1 -1
  31. package/lib/module/dialog/DialogPopup.js +7 -1
  32. package/lib/module/dialog/DialogPopup.js.map +1 -1
  33. package/lib/module/dialog/DialogRoot.js +4 -2
  34. package/lib/module/dialog/DialogRoot.js.map +1 -1
  35. package/lib/module/index.js +1 -0
  36. package/lib/module/index.js.map +1 -1
  37. package/lib/module/portal/portal.js +4 -2
  38. package/lib/module/portal/portal.js.map +1 -1
  39. package/lib/module/select/SelectContent.js +2 -1
  40. package/lib/module/select/SelectContent.js.map +1 -1
  41. package/lib/module/toggle-button/ToggleButtonGroup.js +181 -0
  42. package/lib/module/toggle-button/ToggleButtonGroup.js.map +1 -0
  43. package/lib/module/toggle-button/ToggleButtonRoot.js +127 -0
  44. package/lib/module/toggle-button/ToggleButtonRoot.js.map +1 -0
  45. package/lib/module/toggle-button/ToggleButtonRoot.web.js +176 -0
  46. package/lib/module/toggle-button/ToggleButtonRoot.web.js.map +1 -0
  47. package/lib/module/toggle-button/context.js +18 -0
  48. package/lib/module/toggle-button/context.js.map +1 -0
  49. package/lib/module/toggle-button/index.js +6 -0
  50. package/lib/module/toggle-button/index.js.map +1 -0
  51. package/lib/module/toggle-button/toggleState.js +19 -0
  52. package/lib/module/toggle-button/toggleState.js.map +1 -0
  53. package/lib/module/toggle-button/types.js +4 -0
  54. package/lib/module/toggle-button/types.js.map +1 -0
  55. package/lib/module/toggle-button/useToggleButtonGroupNavigation.js +75 -0
  56. package/lib/module/toggle-button/useToggleButtonGroupNavigation.js.map +1 -0
  57. package/lib/typescript/breadcrumbs/types.d.ts +13 -0
  58. package/lib/typescript/breadcrumbs/types.d.ts.map +1 -1
  59. package/lib/typescript/checkbox/types.d.ts +4 -0
  60. package/lib/typescript/checkbox/types.d.ts.map +1 -1
  61. package/lib/typescript/dialog/DialogContent.d.ts +1 -1
  62. package/lib/typescript/dialog/DialogContent.d.ts.map +1 -1
  63. package/lib/typescript/dialog/DialogPopup.d.ts.map +1 -1
  64. package/lib/typescript/dialog/DialogRoot.d.ts.map +1 -1
  65. package/lib/typescript/dialog/types.d.ts +12 -0
  66. package/lib/typescript/dialog/types.d.ts.map +1 -1
  67. package/lib/typescript/field/types.d.ts +1 -1
  68. package/lib/typescript/field/types.d.ts.map +1 -1
  69. package/lib/typescript/form/types.d.ts +6 -0
  70. package/lib/typescript/form/types.d.ts.map +1 -1
  71. package/lib/typescript/index.d.ts +1 -0
  72. package/lib/typescript/index.d.ts.map +1 -1
  73. package/lib/typescript/input/types.d.ts +1 -0
  74. package/lib/typescript/input/types.d.ts.map +1 -1
  75. package/lib/typescript/link/types.d.ts +2 -2
  76. package/lib/typescript/list-item/types.d.ts +3 -2
  77. package/lib/typescript/list-item/types.d.ts.map +1 -1
  78. package/lib/typescript/portal/portal.d.ts +13 -2
  79. package/lib/typescript/portal/portal.d.ts.map +1 -1
  80. package/lib/typescript/progress-bar/types.d.ts +9 -4
  81. package/lib/typescript/progress-bar/types.d.ts.map +1 -1
  82. package/lib/typescript/radio/types.d.ts +2 -0
  83. package/lib/typescript/radio/types.d.ts.map +1 -1
  84. package/lib/typescript/select/SelectContent.d.ts.map +1 -1
  85. package/lib/typescript/switch/types.d.ts +4 -4
  86. package/lib/typescript/tabs/types.d.ts +7 -2
  87. package/lib/typescript/tabs/types.d.ts.map +1 -1
  88. package/lib/typescript/toggle-button/ToggleButtonGroup.d.ts +5 -0
  89. package/lib/typescript/toggle-button/ToggleButtonGroup.d.ts.map +1 -0
  90. package/lib/typescript/toggle-button/ToggleButtonRoot.d.ts +5 -0
  91. package/lib/typescript/toggle-button/ToggleButtonRoot.d.ts.map +1 -0
  92. package/lib/typescript/toggle-button/ToggleButtonRoot.web.d.ts +5 -0
  93. package/lib/typescript/toggle-button/ToggleButtonRoot.web.d.ts.map +1 -0
  94. package/lib/typescript/toggle-button/context.d.ts +27 -0
  95. package/lib/typescript/toggle-button/context.d.ts.map +1 -0
  96. package/lib/typescript/toggle-button/index.d.ts +5 -0
  97. package/lib/typescript/toggle-button/index.d.ts.map +1 -0
  98. package/lib/typescript/toggle-button/toggleState.d.ts +14 -0
  99. package/lib/typescript/toggle-button/toggleState.d.ts.map +1 -0
  100. package/lib/typescript/toggle-button/types.d.ts +87 -0
  101. package/lib/typescript/toggle-button/types.d.ts.map +1 -0
  102. package/lib/typescript/toggle-button/useToggleButtonGroupNavigation.d.ts +19 -0
  103. package/lib/typescript/toggle-button/useToggleButtonGroupNavigation.d.ts.map +1 -0
  104. package/package.json +3 -3
  105. package/src/breadcrumbs/types.ts +13 -0
  106. package/src/checkbox/types.ts +4 -0
  107. package/src/dialog/DialogContent.tsx +13 -5
  108. package/src/dialog/DialogPopup.tsx +7 -1
  109. package/src/dialog/DialogRoot.tsx +3 -1
  110. package/src/dialog/types.ts +12 -0
  111. package/src/field/types.tsx +1 -1
  112. package/src/form/types.tsx +6 -0
  113. package/src/index.ts +1 -0
  114. package/src/input/types.ts +1 -0
  115. package/src/link/types.ts +2 -2
  116. package/src/list-item/types.ts +3 -2
  117. package/src/portal/portal.tsx +17 -2
  118. package/src/progress-bar/types.ts +9 -4
  119. package/src/radio/types.ts +2 -0
  120. package/src/select/SelectContent.tsx +2 -1
  121. package/src/switch/types.ts +4 -4
  122. package/src/tabs/types.ts +7 -2
  123. package/src/toggle-button/ToggleButtonGroup.tsx +260 -0
  124. package/src/toggle-button/ToggleButtonRoot.tsx +151 -0
  125. package/src/toggle-button/ToggleButtonRoot.web.tsx +225 -0
  126. package/src/toggle-button/context.tsx +30 -0
  127. package/src/toggle-button/index.ts +16 -0
  128. package/src/toggle-button/toggleState.ts +19 -0
  129. package/src/toggle-button/types.ts +94 -0
  130. package/src/toggle-button/useToggleButtonGroupNavigation.ts +112 -0
@@ -1 +1 @@
1
- {"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../../../src/portal/portal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAY,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAwHnE,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAAC,2CAMnF;AAID,wBAAgB,UAAU,CAAC,EAAE,IAA0B,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,kDAyC3E;AAID,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,QAA8B,EAC9B,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,QAcA;AAQD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB;;;;;EAiBjC"}
1
+ {"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../../../src/portal/portal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAY,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAwHnE,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAAC,2CAMnF;AAID,MAAM,WAAW,eAAe;IAC9B,2FAA2F;IAC3F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,UAAU,CAAC,EAAE,IAA0B,EAAE,SAAS,EAAE,EAAE,eAAe,kDA0CpF;AAID,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,QAA8B,EAC9B,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,QAcA;AAQD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB;;;;;EAiBjC"}
@@ -3,17 +3,22 @@ import type { ViewProps } from 'react-native';
3
3
  export type ProgressDataState = 'complete' | 'indeterminate' | 'loading';
4
4
  export interface InterfaceProgressProps extends Omit<ViewProps, 'children'> {
5
5
  /**
6
- * Current value in the range [0, max], or `null` for indeterminate progress.
7
- * Omit or use a number for determinate progress; default is `0`.
6
+ * Current value in the range `[0, max]`, or `null` for indeterminate progress.
7
+ * Values below `0` clamp to `0`; values above `max` clamp to `max`.
8
+ * Non-finite values (such as `NaN`) are treated as `0`.
9
+ * @default 0
8
10
  */
9
11
  readonly value?: number | null;
10
12
  /**
11
- * Maximum value (minimum is always 0).
13
+ * Maximum value. The minimum is always `0`.
14
+ * A `max` of `0` or less is treated as complete.
12
15
  * @default 100
13
16
  */
14
17
  readonly max?: number;
15
18
  /**
16
- * Optional label for `accessibilityValue.text` when determinate.
19
+ * Screen-reader text for determinate progress (`accessibilityValue.text`).
20
+ * Defaults to a rounded percentage of `max`, such as `"45%"`.
21
+ * No effect when `value` is `null`, or when `accessibilityValue` is set.
17
22
  */
18
23
  readonly getValueLabel?: (value: number, max: number) => string;
19
24
  readonly children?: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/progress-bar/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,eAAe,GAAG,SAAS,CAAC;AAEzE,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IACzE;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;OAGG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAChE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B;AAED,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/progress-bar/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,eAAe,GAAG,SAAS,CAAC;AAEzE,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IACzE;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAChE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B;AAED,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAC"}
@@ -2,8 +2,10 @@ import type { PressableProps } from 'react-native';
2
2
  export interface IRadioProps extends PressableProps {
3
3
  /** Required — identifies this item's value within a Radio.Group. */
4
4
  value: string;
5
+ /** Disables this item without disabling the rest of the group. */
5
6
  isDisabled?: boolean;
6
7
  isInvalid?: boolean;
8
+ /** Focusable, but the selection cannot be changed. */
7
9
  isReadOnly?: boolean;
8
10
  isHovered?: boolean;
9
11
  isFocused?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/radio/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC7B,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CACrC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/radio/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC7B,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CACrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectContent.d.ts","sourceRoot":"","sources":["../../../src/select/SelectContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6D,MAAM,OAAO,CAAC;AAClF,OAAO,EAAY,IAAI,EAAE,MAAM,cAAc,CAAC;AAO9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAInD,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,iFA+HzB,CAAC"}
1
+ {"version":3,"file":"SelectContent.d.ts","sourceRoot":"","sources":["../../../src/select/SelectContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6D,MAAM,OAAO,CAAC;AAClF,OAAO,EAAY,IAAI,EAAE,MAAM,cAAc,CAAC;AAO9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAInD,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,iFAgIzB,CAAC"}
@@ -6,11 +6,11 @@ export interface IInterfaceSwitchProps {
6
6
  */
7
7
  onValueChange?: (value: boolean) => void;
8
8
  /**
9
- * If true, set the Switch to the checked state.
9
+ * Alias for `value`. `value` takes precedence when both are set.
10
10
  */
11
11
  isChecked?: boolean;
12
12
  /**
13
- * The current value of the switch.
13
+ * Controlled on/off state. Takes precedence over `isChecked`.
14
14
  */
15
15
  value?: boolean;
16
16
  /**
@@ -18,11 +18,11 @@ export interface IInterfaceSwitchProps {
18
18
  */
19
19
  isDisabled?: boolean;
20
20
  /**
21
- * If true, the switch will be disabled.
21
+ * Alias for `isDisabled`. Either prop disables the switch.
22
22
  */
23
23
  disabled?: boolean;
24
24
  /**
25
- * If true, the switch will be initially checked.
25
+ * Initial state when uncontrolled. No effect when `value` or `isChecked` is set.
26
26
  */
27
27
  defaultValue?: boolean;
28
28
  /**
@@ -11,7 +11,8 @@ export interface ITabsProps {
11
11
  onValueChange?: (value: string) => void;
12
12
  /**
13
13
  * `automatic` (default) selects a tab as soon as it receives focus via arrow keys.
14
- * `manual` only moves focus on arrow keys — the consumer must press Enter/Space to select.
14
+ * `manual` only moves focus — press Enter or Space to select. Web only; native
15
+ * selection follows press. Use `manual` when rendering the next panel is expensive.
15
16
  */
16
17
  activationMode?: TabsActivationMode;
17
18
  /**
@@ -19,6 +20,7 @@ export interface ITabsProps {
19
20
  * `vertical` uses ArrowUp/ArrowDown, per the ARIA APG tabs pattern.
20
21
  */
21
22
  orientation?: TabsOrientation;
23
+ /** Disables every tab. Disable a single tab with `disabled` on that `Tabs.Tab`. */
22
24
  disabled?: boolean;
23
25
  children?: ReactNode;
24
26
  }
@@ -58,7 +60,10 @@ export interface ITabProps extends PressableProps {
58
60
  export interface ITabPanelProps extends ViewProps {
59
61
  /** Required — correlates this panel with its `Tabs.Tab` counterpart. */
60
62
  value: string;
61
- /** Unmount when inactive instead of keeping the panel hidden in the DOM. */
63
+ /**
64
+ * Unmount when inactive instead of keeping the panel mounted and hidden.
65
+ * The default keeps it mounted so the tab's `aria-controls` target stays in the tree.
66
+ */
62
67
  unmountWhenInactive?: boolean;
63
68
  children?: ReactNode;
64
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tabs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,QAAQ,CAAC;AACxD,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,SAAS;IAC/C,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,SAAU,SAAQ,cAAc;IAC/C,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,SAAS;IAC/C,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,kBAAkB,CAAC;IACnC,WAAW,EAAE,eAAe,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3D,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;IACzC,iGAAiG;IACjG,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CACtD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tabs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,QAAQ,CAAC;AACxD,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;;OAIG;IACH,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,mFAAmF;IACnF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,SAAS;IAC/C,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,SAAU,SAAQ,cAAc;IAC/C,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,SAAS;IAC/C,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,kBAAkB,CAAC;IACnC,WAAW,EAAE,eAAe,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3D,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;IACzC,iGAAiG;IACjG,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CACtD"}
@@ -0,0 +1,5 @@
1
+ import { View } from 'react-native';
2
+ import type { IToggleButtonGroupProps } from './types';
3
+ export type ToggleButtonGroupProps = IToggleButtonGroupProps;
4
+ export declare const ToggleButtonGroup: import("react").ForwardRefExoticComponent<IToggleButtonGroupProps & import("react").RefAttributes<View>>;
5
+ //# sourceMappingURL=ToggleButtonGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleButtonGroup.d.ts","sourceRoot":"","sources":["../../../src/toggle-button/ToggleButtonGroup.tsx"],"names":[],"mappings":"AASA,OAAO,EAAY,IAAI,EAAkB,MAAM,cAAc,CAAC;AAK9D,OAAO,KAAK,EACV,uBAAuB,EAGxB,MAAM,SAAS,CAAC;AAejB,MAAM,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AA2C7D,eAAO,MAAM,iBAAiB,0GAqL7B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { IToggleButtonProps } from './types';
2
+ export interface ToggleButtonRootProps extends IToggleButtonProps {
3
+ }
4
+ export declare const ToggleButtonRoot: import("react").ForwardRefExoticComponent<ToggleButtonRootProps & import("react").RefAttributes<import("react-native").View>>;
5
+ //# sourceMappingURL=ToggleButtonRoot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleButtonRoot.d.ts","sourceRoot":"","sources":["../../../src/toggle-button/ToggleButtonRoot.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB;CAAG;AAEpE,eAAO,MAAM,gBAAgB,+HAuI5B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { IToggleButtonProps } from './types';
2
+ export interface ToggleButtonRootProps extends IToggleButtonProps {
3
+ }
4
+ export declare const ToggleButtonRoot: import("react").ForwardRefExoticComponent<ToggleButtonRootProps & import("react").RefAttributes<import("react-native").View>>;
5
+ //# sourceMappingURL=ToggleButtonRoot.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleButtonRoot.web.d.ts","sourceRoot":"","sources":["../../../src/toggle-button/ToggleButtonRoot.web.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGlD,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB;CAAG;AAEpE,eAAO,MAAM,gBAAgB,+HAgN5B,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { IToggleButtonGroupContextValue } from './types';
2
+ export declare const ToggleButtonProvider: import("react").FunctionComponent<{
3
+ children: import("react").ReactNode;
4
+ value: {
5
+ value: string;
6
+ isSelected: boolean;
7
+ isDisabled: boolean;
8
+ selectionType: "single" | "multiple" | "standalone";
9
+ hover: boolean;
10
+ active: boolean;
11
+ focus: boolean;
12
+ focusVisible: boolean;
13
+ };
14
+ }>, useToggleButtonContext: () => {
15
+ value: string;
16
+ isSelected: boolean;
17
+ isDisabled: boolean;
18
+ selectionType: "single" | "multiple" | "standalone";
19
+ hover: boolean;
20
+ active: boolean;
21
+ focus: boolean;
22
+ focusVisible: boolean;
23
+ };
24
+ export declare const ToggleButtonGroupContextProvider: import("react").Provider<IToggleButtonGroupContextValue | null>;
25
+ export declare function useToggleButtonGroupContext(): IToggleButtonGroupContextValue;
26
+ export declare function useOptionalToggleButtonGroupContext(): IToggleButtonGroupContextValue | null;
27
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/toggle-button/context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,SAAS,CAAC;AAE9D,eAAO,MAAO,oBAAoB;;;eACzB,MAAM;oBACD,OAAO;oBACP,OAAO;uBACJ,QAAQ,GAAG,UAAU,GAAG,YAAY;eAC5C,OAAO;gBACN,OAAO;eACR,OAAO;sBACA,OAAO;;IARa,sBAAsB;WACjD,MAAM;gBACD,OAAO;gBACP,OAAO;mBACJ,QAAQ,GAAG,UAAU,GAAG,YAAY;WAC5C,OAAO;YACN,OAAO;WACR,OAAO;kBACA,OAAO;CACE,CAAC;AAI1B,eAAO,MAAM,gCAAgC,iEAAoC,CAAC;AAElF,wBAAgB,2BAA2B,IAAI,8BAA8B,CAM5E;AAED,wBAAgB,mCAAmC,IAAI,8BAA8B,GAAG,IAAI,CAE3F"}
@@ -0,0 +1,5 @@
1
+ export { ToggleButtonRoot, type ToggleButtonRootProps } from './ToggleButtonRoot';
2
+ export { ToggleButtonGroup, type ToggleButtonGroupProps } from './ToggleButtonGroup';
3
+ export { ToggleButtonProvider, useToggleButtonContext, useToggleButtonGroupContext, useOptionalToggleButtonGroupContext, } from './context';
4
+ export type { IToggleButtonProps, IToggleButtonGroupProps, IToggleButtonGroupSingleProps, IToggleButtonGroupMultipleProps, IToggleButtonGroupContextValue, ToggleButtonGroupType, } from './types';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/toggle-button/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,mCAAmC,GACpC,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,kBAAkB,EAClB,uBAAuB,EACvB,6BAA6B,EAC7B,+BAA+B,EAC/B,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,14 @@
1
+ declare const TOGGLE_STATES: {
2
+ readonly 'false:false:false': "idle";
3
+ readonly 'false:false:true': "hover";
4
+ readonly 'false:true:false': "active";
5
+ readonly 'false:true:true': "active";
6
+ readonly 'true:false:false': "selected";
7
+ readonly 'true:false:true': "selected-hover";
8
+ readonly 'true:true:false': "selected-active";
9
+ readonly 'true:true:true': "selected-active";
10
+ };
11
+ export type ToggleState = (typeof TOGGLE_STATES)[keyof typeof TOGGLE_STATES];
12
+ export declare function getToggleState(selected: boolean, active: boolean, hover: boolean): ToggleState;
13
+ export {};
14
+ //# sourceMappingURL=toggleState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggleState.d.ts","sourceRoot":"","sources":["../../../src/toggle-button/toggleState.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,aAAa;;;;;;;;;CAST,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE7E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAG9F"}
@@ -0,0 +1,87 @@
1
+ import type { PressableProps, ViewProps } from 'react-native';
2
+ export type ToggleButtonGroupType = 'single' | 'multiple';
3
+ export type ToggleButtonGroupValue = string | string[] | undefined;
4
+ interface IToggleButtonGroupBaseProps extends ViewProps {
5
+ /** Merge group props onto a single child instead of rendering the default View. */
6
+ asChild?: boolean;
7
+ /** Disables every item in the group. */
8
+ isDisabled?: boolean;
9
+ /**
10
+ * Layout direction and arrow-key axis.
11
+ * @default 'horizontal'
12
+ */
13
+ orientation?: 'horizontal' | 'vertical';
14
+ /** Accessible name for the group (required when no visible label). */
15
+ 'aria-label'?: string;
16
+ 'aria-labelledby'?: string;
17
+ }
18
+ export interface IToggleButtonGroupSingleProps extends IToggleButtonGroupBaseProps {
19
+ /**
20
+ * Single-select (radio semantics). `value` is the selected item's `value`.
21
+ * @default 'single'
22
+ */
23
+ type?: 'single';
24
+ /** Currently selected item `value` (controlled). */
25
+ value?: string;
26
+ /** Initially selected item `value` (uncontrolled). */
27
+ defaultValue?: string;
28
+ onValueChange?: (value: string) => void;
29
+ }
30
+ export interface IToggleButtonGroupMultipleProps extends IToggleButtonGroupBaseProps {
31
+ /**
32
+ * Multi-select (pressed-button semantics). `value` is an array of selected item `value`s.
33
+ */
34
+ type: 'multiple';
35
+ /** Currently selected item `value`s (controlled). */
36
+ value?: string[];
37
+ /** Initially selected item `value`s (uncontrolled). */
38
+ defaultValue?: string[];
39
+ onValueChange?: (value: string[]) => void;
40
+ }
41
+ /**
42
+ * Discriminated union: `type` narrows `value` / `defaultValue` / `onValueChange`.
43
+ */
44
+ export type IToggleButtonGroupProps = IToggleButtonGroupSingleProps | IToggleButtonGroupMultipleProps;
45
+ export interface RegisteredToggleButton {
46
+ disabled: boolean;
47
+ node: {
48
+ focus?: () => void;
49
+ } | null;
50
+ }
51
+ export interface IToggleButtonGroupContextValue {
52
+ type: ToggleButtonGroupType;
53
+ orientation: 'horizontal' | 'vertical';
54
+ value: ToggleButtonGroupValue;
55
+ toggleValue: (buttonValue: string) => void;
56
+ isSelected: (buttonValue: string) => boolean;
57
+ isGroupDisabled: boolean;
58
+ focusedValue?: string | undefined;
59
+ setFocusedValue?: (value: string | undefined) => void;
60
+ registerItem?: (value: string, entry: RegisteredToggleButton) => void;
61
+ unregisterItem?: (value: string) => void;
62
+ getItems?: () => [string, RegisteredToggleButton][];
63
+ }
64
+ export interface IToggleButtonProps extends PressableProps {
65
+ /** Render the consumer's child in place of the default `Pressable` host. */
66
+ asChild?: boolean;
67
+ /**
68
+ * Identifies this button within a `ToggleButtonGroup`. Must be unique within the group.
69
+ * Standalone buttons still require a value.
70
+ */
71
+ value: string;
72
+ /**
73
+ * Controlled selected state (standalone only; ignored inside `ToggleButtonGroup`).
74
+ */
75
+ isSelected?: boolean;
76
+ /**
77
+ * Uncontrolled initial selected state (standalone only).
78
+ * @default false
79
+ */
80
+ defaultSelected?: boolean;
81
+ /** Called when standalone selected state changes. */
82
+ onSelectedChange?: (isSelected: boolean) => void;
83
+ /** @default false */
84
+ isDisabled?: boolean;
85
+ }
86
+ export {};
87
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/toggle-button/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE1D,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;AAEnE,UAAU,2BAA4B,SAAQ,SAAS;IACrD,mFAAmF;IACnF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,6BAA8B,SAAQ,2BAA2B;IAChF;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,+BAAgC,SAAQ,2BAA2B;IAClF;;OAEG;IACH,IAAI,EAAE,UAAU,CAAC;IACjB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAC/B,6BAA6B,GAC7B,+BAA+B,CAAC;AAEpC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,qBAAqB,CAAC;IAC5B,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC;IACvC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7C,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACtD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACtE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,qBAAqB;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB"}
@@ -0,0 +1,19 @@
1
+ import type { RegisteredToggleButton, ToggleButtonGroupType } from './types';
2
+ /** Resolves which item value should hold the roving tab stop / keyboard focus anchor. */
3
+ export declare function getRovingFocusValue(focusedValue: string | undefined, anchorValue: string | null | undefined, enabledItems: [string, RegisteredToggleButton][]): string | undefined;
4
+ export interface UseToggleButtonGroupNavigationOptions {
5
+ type: ToggleButtonGroupType;
6
+ orientation: 'horizontal' | 'vertical';
7
+ getItems: () => [string, RegisteredToggleButton][];
8
+ focusedValue: string | undefined;
9
+ setFocusedValue: (value: string | undefined) => void;
10
+ anchorValue: string | null | undefined;
11
+ selectOnFocus?: (value: string) => void;
12
+ }
13
+ export declare function useToggleButtonGroupNavigation({ type, orientation, getItems, focusedValue, setFocusedValue, anchorValue, selectOnFocus, }: UseToggleButtonGroupNavigationOptions): {
14
+ handleKeyDown: (e: {
15
+ key: string;
16
+ preventDefault: () => void;
17
+ }) => void;
18
+ };
19
+ //# sourceMappingURL=useToggleButtonGroupNavigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToggleButtonGroupNavigation.d.ts","sourceRoot":"","sources":["../../../src/toggle-button/useToggleButtonGroupNavigation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAS7E,yFAAyF;AACzF,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,YAAY,EAAE,CAAC,MAAM,EAAE,sBAAsB,CAAC,EAAE,GAC/C,MAAM,GAAG,SAAS,CAUpB;AAED,MAAM,WAAW,qCAAqC;IACpD,IAAI,EAAE,qBAAqB,CAAC;IAC5B,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,EAAE,CAAC;IACnD,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACrD,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,wBAAgB,8BAA8B,CAAC,EAC7C,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,WAAW,EACX,aAAa,GACd,EAAE,qCAAqC;uBAqBhC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,IAAI,CAAA;KAAE;EA6ClD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cdx-ui/primitives",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -68,8 +68,8 @@
68
68
  "@react-stately/disclosure": "3.1.1",
69
69
  "@react-stately/radio": "3.12.0",
70
70
  "@react-stately/toggle": "3.9.4",
71
- "@cdx-ui/utils": "0.1.5",
72
- "@cdx-ui/formatters": "0.1.5"
71
+ "@cdx-ui/formatters": "0.1.7",
72
+ "@cdx-ui/utils": "0.1.7"
73
73
  },
74
74
  "devDependencies": {
75
75
  "@types/react": "19.1.17",
@@ -13,8 +13,21 @@ export const breadcrumbColorOptions = [
13
13
  export type BreadcrumbColor = (typeof breadcrumbColorOptions)[number];
14
14
 
15
15
  export interface IBreadcrumbsProps extends ViewProps {
16
+ /**
17
+ * When `true`, ancestor items are not interactive and use muted text.
18
+ * The current page keeps its color.
19
+ * @default false
20
+ */
16
21
  readonly isDisabled?: boolean;
22
+ /**
23
+ * When `true`, interactive ancestor items are underlined.
24
+ * @default false
25
+ */
17
26
  readonly isUnderlined?: boolean;
27
+ /**
28
+ * Semantic color for ancestor items. `neutral` uses the standard text hierarchy.
29
+ * @default 'neutral'
30
+ */
18
31
  readonly color?: BreadcrumbColor;
19
32
  /**
20
33
  * Accessible name for the breadcrumb navigation landmark.
@@ -1,13 +1,17 @@
1
1
  import type { PressableProps } from 'react-native';
2
2
 
3
3
  export interface InterfaceCheckbox extends PressableProps {
4
+ /** Identifies this checkbox. Must be unique among siblings in a `Checkbox.Group`. */
4
5
  value: string;
5
6
  onChange?: (isSelected: boolean) => void;
6
7
  children?: React.ReactNode;
8
+ /** Initial checked state when uncontrolled. No effect when `isChecked` is set. */
7
9
  defaultIsChecked?: boolean;
10
+ /** Controlled checked state. When set, `defaultIsChecked` has no effect. */
8
11
  isChecked?: boolean;
9
12
  isDisabled?: boolean;
10
13
  isInvalid?: boolean;
14
+ /** Focusable, but the checked state cannot be changed. */
11
15
  isReadOnly?: boolean;
12
16
  isHovered?: boolean;
13
17
  isFocused?: boolean;
@@ -14,20 +14,26 @@ export interface DialogContentProps extends IDialogContentProps {}
14
14
  * - ARIA role, aria-modal, aria-labelledby/describedby
15
15
  * - FocusScope (focus trap + restore + auto-focus)
16
16
  * - Escape key dismissal (web)
17
- * - Android hardware back button dismissal (native)
17
+ * - Android hardware back button: calls the context `backHandlerRef` when set, otherwise dismisses (native)
18
18
  * - data-state attribute for CSS transition targeting
19
19
  *
20
20
  * Unstyled — the styled layer applies centering, background, border-radius, etc.
21
21
  */
22
22
  export const DialogContent = forwardRef<ComponentRef<typeof View>, DialogContentProps>(
23
23
  ({ asChild = false, forceMount = false, children, ...props }, ref) => {
24
- const { open, onOpenChange, closeOnEscKey, nativeID, role } = useDialog();
24
+ const { open, onOpenChange, closeOnEscKey, nativeID, role, backHandlerRef } = useDialog();
25
25
 
26
26
  const handleClose = useCallback(() => {
27
27
  onOpenChange(false);
28
28
  }, [onOpenChange]);
29
29
 
30
- useEscapeKey(open && closeOnEscKey, handleClose, {
30
+ const handleEscape = useCallback(() => {
31
+ if (closeOnEscKey) onOpenChange(false);
32
+ }, [closeOnEscKey, onOpenChange]);
33
+
34
+ // Registered regardless of `closeOnEscKey` so a non-dismissible dialog still
35
+ // owns Escape while topmost instead of letting it reach the overlay beneath.
36
+ useEscapeKey(open, handleEscape, {
31
37
  id: nativeID,
32
38
  groupId: nativeID,
33
39
  layer: 'modal',
@@ -46,14 +52,16 @@ export const DialogContent = forwardRef<ComponentRef<typeof View>, DialogContent
46
52
 
47
53
  const backHandler = BackHandler.addEventListener('hardwareBackPress', () => {
48
54
  if (!isTopmost('back')) return false;
49
- handleClose();
55
+ const onBack = backHandlerRef.current;
56
+ if (onBack) onBack();
57
+ else handleClose();
50
58
  return true;
51
59
  });
52
60
 
53
61
  return () => {
54
62
  backHandler.remove();
55
63
  };
56
- }, [handleClose, isTopmost, open]);
64
+ }, [backHandlerRef, handleClose, isTopmost, open]);
57
65
 
58
66
  if (!forceMount && !open) {
59
67
  return null;
@@ -47,7 +47,13 @@ export const DialogPopup = forwardRef<ComponentRef<typeof View>, DialogPopupProp
47
47
  onOpenChange(false);
48
48
  }, [onOpenChange]);
49
49
 
50
- useEscapeKey(open && closeOnEscKey, handleClose, {
50
+ const handleEscape = useCallback(() => {
51
+ if (closeOnEscKey) onOpenChange(false);
52
+ }, [closeOnEscKey, onOpenChange]);
53
+
54
+ // Registered regardless of `closeOnEscKey` so a non-dismissible dialog still
55
+ // owns Escape while topmost instead of letting it reach the overlay beneath.
56
+ useEscapeKey(open, handleEscape, {
51
57
  id: nativeID,
52
58
  groupId: nativeID,
53
59
  layer: 'modal',
@@ -1,4 +1,4 @@
1
- import { forwardRef, useCallback, useId, useMemo, type ComponentRef } from 'react';
1
+ import { forwardRef, useCallback, useId, useMemo, useRef, type ComponentRef } from 'react';
2
2
  import { View, type ViewProps } from 'react-native';
3
3
  import { useControllableState } from '@cdx-ui/utils';
4
4
  import { Slot } from '../slot';
@@ -40,6 +40,7 @@ export const DialogRoot = forwardRef<ComponentRef<typeof View>, DialogRootProps>
40
40
 
41
41
  const id = useId();
42
42
  const nativeID = `dialog-${id}`;
43
+ const backHandlerRef = useRef<(() => void) | undefined>(undefined);
43
44
 
44
45
  const contextValue = useMemo(
45
46
  () => ({
@@ -49,6 +50,7 @@ export const DialogRoot = forwardRef<ComponentRef<typeof View>, DialogRootProps>
49
50
  closeOnEscKey,
50
51
  nativeID,
51
52
  role,
53
+ backHandlerRef,
52
54
  }),
53
55
  [open, setOpen, closeOnBackdropPress, closeOnEscKey, nativeID, role],
54
56
  );
@@ -8,6 +8,11 @@ export interface IDialogContextType {
8
8
  readonly closeOnEscKey: boolean;
9
9
  readonly nativeID: string;
10
10
  readonly role: 'dialog' | 'alertdialog';
11
+ /**
12
+ * @internal Set by a header that owns step navigation. When set, Android back
13
+ * calls it instead of closing the dialog. Escape always closes.
14
+ */
15
+ readonly backHandlerRef: React.RefObject<(() => void) | undefined>;
11
16
  }
12
17
 
13
18
  export interface IDialogRootProps {
@@ -16,6 +21,12 @@ export interface IDialogRootProps {
16
21
  readonly onOpenChange?: (open: boolean) => void;
17
22
  readonly defaultOpen?: boolean;
18
23
  readonly closeOnBackdropPress?: boolean;
24
+ /**
25
+ * Close when Escape is pressed. Web only. When `false`, an open dialog still
26
+ * consumes Escape while topmost, so overlays beneath it stay open. Android's
27
+ * hardware back button dismisses independently of this prop.
28
+ * @default true
29
+ */
19
30
  readonly closeOnEscKey?: boolean;
20
31
  readonly role?: 'dialog' | 'alertdialog';
21
32
  readonly children: React.ReactNode;
@@ -38,6 +49,7 @@ export interface IDialogOverlayProps extends PressableProps {
38
49
 
39
50
  export interface IDialogContentProps extends ViewProps {
40
51
  readonly asChild?: boolean;
52
+ /** Keep the popup mounted while the dialog is closed. @default false */
41
53
  readonly forceMount?: boolean;
42
54
  /**
43
55
  * Whether the content shifts up to clear the on-screen keyboard (native only).
@@ -23,7 +23,7 @@ export interface IFieldRootProps extends ViewProps {
23
23
  readonly isInvalid?: boolean;
24
24
  /** If true, the field is marked as required. Shows asterisk on label. */
25
25
  readonly isRequired?: boolean;
26
- /** If true, the field is disabled. */
26
+ /** If true, the field is disabled. Nested controls that read field context are disabled as well. */
27
27
  readonly isDisabled?: boolean;
28
28
  /** If true, the field is read-only. */
29
29
  readonly isReadOnly?: boolean;
@@ -6,8 +6,14 @@ import type React from 'react';
6
6
  * for API compatibility but silently ignored.
7
7
  */
8
8
  export interface InterfaceFormRootProps {
9
+ /** Called when the form is submitted. Web only; ignored on native. */
9
10
  onSubmit?: (e: React.SyntheticEvent) => void;
11
+ /**
12
+ * HTML `action` URL, or a function that receives the submitted `FormData`.
13
+ * Web only; ignored on native.
14
+ */
10
15
  action?: string | ((formData: FormData) => void | Promise<void>);
16
+ /** HTTP method. Web only; ignored on native. */
11
17
  method?: string;
12
18
  }
13
19
 
package/src/index.ts CHANGED
@@ -61,6 +61,7 @@ export * from './select';
61
61
  export * from './switch';
62
62
  export * from './tabs';
63
63
  export * from './tile';
64
+ export * from './toggle-button';
64
65
  export * from './toast';
65
66
  export * from './tooltip';
66
67
  export * from './portal';
@@ -60,6 +60,7 @@ interface IInputBaseProps extends TextInputProps {
60
60
  }
61
61
 
62
62
  interface IInputTextProps extends IInputBaseProps {
63
+ /** @default 'text' */
63
64
  type?: 'text' | 'password';
64
65
  }
65
66
 
package/src/link/types.ts CHANGED
@@ -16,11 +16,11 @@ export type LinkAction = 'navigate' | 'push' | 'replace';
16
16
 
17
17
  export interface ILinkProps extends PressableProps {
18
18
  /**
19
- * URL that should be opened on Link press
19
+ * URL or route path opened on press. Omit when the link only runs `onPress`.
20
20
  */
21
21
  href?: string | undefined;
22
22
  /**
23
- * Callback that will be invoked on Link press
23
+ * Invoked on press before navigation. Does not replace navigation.
24
24
  */
25
25
  onPress?: ((event?: GestureResponderEvent) => void) | null | undefined;
26
26
  /**
@@ -29,8 +29,9 @@ export interface InterfaceListItemProps extends ViewProps, IListItemPressablePas
29
29
  */
30
30
  crossAlign?: ListItemCrossAlign;
31
31
  /**
32
- * Merge interaction props onto a single child instead of rendering the default pressable root.
33
- * Intended for use with `onPress`.
32
+ * Merge props onto a single child (for example `Link`) instead of rendering `View` or `Pressable`.
33
+ * The child's `onPress` is kept unless this component also passes `onPress`.
34
+ * `isDisabled` suppresses press on the child.
34
35
  */
35
36
  asChild?: boolean;
36
37
  }