@nori-ui/core 1.6.0 → 1.7.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 (179) hide show
  1. package/dist/{chunk-7UKRN73P.js → chunk-2XJCLPNH.js} +3 -3
  2. package/dist/{chunk-7UKRN73P.js.map → chunk-2XJCLPNH.js.map} +1 -1
  3. package/dist/{chunk-5PSC5HT4.js → chunk-3B345SQU.js} +5 -5
  4. package/dist/{chunk-5PSC5HT4.js.map → chunk-3B345SQU.js.map} +1 -1
  5. package/dist/{chunk-JSAG5YO7.js → chunk-3IIIHZHT.js} +3 -3
  6. package/dist/{chunk-JSAG5YO7.js.map → chunk-3IIIHZHT.js.map} +1 -1
  7. package/dist/{chunk-DDGMLLS3.js → chunk-3W3XYULK.js} +3 -3
  8. package/dist/{chunk-DDGMLLS3.js.map → chunk-3W3XYULK.js.map} +1 -1
  9. package/dist/{chunk-WYPGQVDV.js → chunk-5YHT252H.js} +3 -3
  10. package/dist/{chunk-WYPGQVDV.js.map → chunk-5YHT252H.js.map} +1 -1
  11. package/dist/{chunk-ZMSIYLSI.js → chunk-7FSFJA33.js} +3 -3
  12. package/dist/{chunk-ZMSIYLSI.js.map → chunk-7FSFJA33.js.map} +1 -1
  13. package/dist/{chunk-YZ27OS2R.js → chunk-C32XGHWO.js} +3 -3
  14. package/dist/{chunk-YZ27OS2R.js.map → chunk-C32XGHWO.js.map} +1 -1
  15. package/dist/{chunk-UJWCEGQY.js → chunk-C5HQPXRI.js} +3 -3
  16. package/dist/{chunk-UJWCEGQY.js.map → chunk-C5HQPXRI.js.map} +1 -1
  17. package/dist/{chunk-XALU6LOT.js → chunk-EN4CLDGZ.js} +3 -3
  18. package/dist/{chunk-XALU6LOT.js.map → chunk-EN4CLDGZ.js.map} +1 -1
  19. package/dist/{chunk-6AD6KCVB.js → chunk-F5UKI7XD.js} +3 -3
  20. package/dist/{chunk-6AD6KCVB.js.map → chunk-F5UKI7XD.js.map} +1 -1
  21. package/dist/chunk-GTAXVTLF.js +43 -0
  22. package/dist/chunk-GTAXVTLF.js.map +1 -0
  23. package/dist/{chunk-NNFJKRXZ.js → chunk-H2LHWJ52.js} +3 -3
  24. package/dist/{chunk-NNFJKRXZ.js.map → chunk-H2LHWJ52.js.map} +1 -1
  25. package/dist/{chunk-PZS4A4VQ.js → chunk-HXCETKCC.js} +3 -3
  26. package/dist/{chunk-PZS4A4VQ.js.map → chunk-HXCETKCC.js.map} +1 -1
  27. package/dist/chunk-IGBXSBF7.js +71 -0
  28. package/dist/chunk-IGBXSBF7.js.map +1 -0
  29. package/dist/{chunk-JXLEMBDB.js → chunk-IIVTPN62.js} +3 -3
  30. package/dist/{chunk-JXLEMBDB.js.map → chunk-IIVTPN62.js.map} +1 -1
  31. package/dist/{chunk-PNP7L4TA.js → chunk-ISCJST4P.js} +3 -3
  32. package/dist/{chunk-PNP7L4TA.js.map → chunk-ISCJST4P.js.map} +1 -1
  33. package/dist/{chunk-TLS54G6Y.js → chunk-IWM2XDXH.js} +3 -3
  34. package/dist/{chunk-TLS54G6Y.js.map → chunk-IWM2XDXH.js.map} +1 -1
  35. package/dist/chunk-J5LK2XHE.js +118 -0
  36. package/dist/chunk-J5LK2XHE.js.map +1 -0
  37. package/dist/chunk-KFFGDET3.js +27 -0
  38. package/dist/chunk-KFFGDET3.js.map +1 -0
  39. package/dist/{chunk-MRJWPRCX.js → chunk-L6VYDM7S.js} +3 -3
  40. package/dist/{chunk-MRJWPRCX.js.map → chunk-L6VYDM7S.js.map} +1 -1
  41. package/dist/chunk-M4BI63P6.js +188 -0
  42. package/dist/chunk-M4BI63P6.js.map +1 -0
  43. package/dist/{chunk-RUWD35UI.js → chunk-MK57AOTI.js} +4 -4
  44. package/dist/{chunk-RUWD35UI.js.map → chunk-MK57AOTI.js.map} +1 -1
  45. package/dist/{chunk-3BDDPFCI.js → chunk-MOAIQHR7.js} +3 -3
  46. package/dist/{chunk-3BDDPFCI.js.map → chunk-MOAIQHR7.js.map} +1 -1
  47. package/dist/{chunk-5XEGZFG5.js → chunk-MYBBBLYE.js} +3 -3
  48. package/dist/{chunk-5XEGZFG5.js.map → chunk-MYBBBLYE.js.map} +1 -1
  49. package/dist/{chunk-WP2Z2ATO.js → chunk-O6M3F7BZ.js} +5 -5
  50. package/dist/{chunk-WP2Z2ATO.js.map → chunk-O6M3F7BZ.js.map} +1 -1
  51. package/dist/{chunk-FEPTH5RV.js → chunk-OELY6K44.js} +3 -3
  52. package/dist/{chunk-FEPTH5RV.js.map → chunk-OELY6K44.js.map} +1 -1
  53. package/dist/{chunk-BZLT6R62.js → chunk-OIHX5B4R.js} +3 -3
  54. package/dist/{chunk-BZLT6R62.js.map → chunk-OIHX5B4R.js.map} +1 -1
  55. package/dist/{chunk-QJVS2VXS.js → chunk-PGYEIXCO.js} +4 -4
  56. package/dist/{chunk-QJVS2VXS.js.map → chunk-PGYEIXCO.js.map} +1 -1
  57. package/dist/{chunk-UZD77M3J.js → chunk-PJTCO76H.js} +3 -3
  58. package/dist/{chunk-UZD77M3J.js.map → chunk-PJTCO76H.js.map} +1 -1
  59. package/dist/{chunk-4PUPKWEP.js → chunk-PJXVLE24.js} +4 -4
  60. package/dist/{chunk-4PUPKWEP.js.map → chunk-PJXVLE24.js.map} +1 -1
  61. package/dist/{chunk-WGT345SV.js → chunk-PLQPBMG2.js} +3 -3
  62. package/dist/{chunk-WGT345SV.js.map → chunk-PLQPBMG2.js.map} +1 -1
  63. package/dist/{chunk-OMU4R4Y5.js → chunk-PQW5LKAI.js} +3 -3
  64. package/dist/{chunk-OMU4R4Y5.js.map → chunk-PQW5LKAI.js.map} +1 -1
  65. package/dist/{chunk-Y5TJ7CAX.js → chunk-RI4Y2C5U.js} +3 -3
  66. package/dist/{chunk-Y5TJ7CAX.js.map → chunk-RI4Y2C5U.js.map} +1 -1
  67. package/dist/{chunk-3OIWAS2P.js → chunk-SF6WPUC5.js} +3 -3
  68. package/dist/{chunk-3OIWAS2P.js.map → chunk-SF6WPUC5.js.map} +1 -1
  69. package/dist/{chunk-MKSDYRWQ.js → chunk-STX5UKYT.js} +3 -3
  70. package/dist/{chunk-MKSDYRWQ.js.map → chunk-STX5UKYT.js.map} +1 -1
  71. package/dist/{chunk-2RL6WCFC.js → chunk-TSWPHJIU.js} +4 -4
  72. package/dist/{chunk-2RL6WCFC.js.map → chunk-TSWPHJIU.js.map} +1 -1
  73. package/dist/{chunk-SFNDR6DI.js → chunk-U2ZKY2CP.js} +3 -3
  74. package/dist/{chunk-SFNDR6DI.js.map → chunk-U2ZKY2CP.js.map} +1 -1
  75. package/dist/{chunk-PABG3IJ6.js → chunk-UKDDK42K.js} +3 -3
  76. package/dist/{chunk-PABG3IJ6.js.map → chunk-UKDDK42K.js.map} +1 -1
  77. package/dist/{chunk-VYRJ7OE5.js → chunk-USFXANEU.js} +3 -3
  78. package/dist/{chunk-VYRJ7OE5.js.map → chunk-USFXANEU.js.map} +1 -1
  79. package/dist/{chunk-CCUXO2HN.js → chunk-V5QSMDZL.js} +3 -3
  80. package/dist/{chunk-CCUXO2HN.js.map → chunk-V5QSMDZL.js.map} +1 -1
  81. package/dist/{chunk-NF7XG2FG.js → chunk-V75O7QQO.js} +3 -3
  82. package/dist/{chunk-NF7XG2FG.js.map → chunk-V75O7QQO.js.map} +1 -1
  83. package/dist/{chunk-NRYWNOG5.js → chunk-VL2WNGPF.js} +3 -3
  84. package/dist/{chunk-NRYWNOG5.js.map → chunk-VL2WNGPF.js.map} +1 -1
  85. package/dist/{chunk-JQQ3FBN7.js → chunk-VLZANXRZ.js} +3 -3
  86. package/dist/{chunk-JQQ3FBN7.js.map → chunk-VLZANXRZ.js.map} +1 -1
  87. package/dist/{chunk-2HMQDJ22.js → chunk-VOF3S5I4.js} +3 -3
  88. package/dist/{chunk-2HMQDJ22.js.map → chunk-VOF3S5I4.js.map} +1 -1
  89. package/dist/chunk-XQNVWHMN.js +60 -0
  90. package/dist/chunk-XQNVWHMN.js.map +1 -0
  91. package/dist/{chunk-JZ774T7U.js → chunk-ZGFXKYA5.js} +3 -3
  92. package/dist/{chunk-JZ774T7U.js.map → chunk-ZGFXKYA5.js.map} +1 -1
  93. package/dist/client.cjs +451 -2
  94. package/dist/client.cjs.map +1 -1
  95. package/dist/client.d.cts +6 -0
  96. package/dist/client.d.ts +6 -0
  97. package/dist/client.js +52 -46
  98. package/dist/client.js.map +1 -1
  99. package/dist/components/Accordion/index.js +2 -2
  100. package/dist/components/Alert/index.js +2 -2
  101. package/dist/components/AlertDialog/index.js +2 -2
  102. package/dist/components/AspectRatio/index.cjs +67 -0
  103. package/dist/components/AspectRatio/index.cjs.map +1 -0
  104. package/dist/components/AspectRatio/index.d.cts +30 -0
  105. package/dist/components/AspectRatio/index.d.ts +30 -0
  106. package/dist/components/AspectRatio/index.js +5 -0
  107. package/dist/components/AspectRatio/index.js.map +1 -0
  108. package/dist/components/Avatar/index.js +2 -2
  109. package/dist/components/Badge/index.js +2 -2
  110. package/dist/components/Box/index.js +4 -4
  111. package/dist/components/Breadcrumb/index.js +3 -3
  112. package/dist/components/Button/index.js +2 -2
  113. package/dist/components/ButtonGroup/index.cjs +83 -0
  114. package/dist/components/ButtonGroup/index.cjs.map +1 -0
  115. package/dist/components/ButtonGroup/index.d.cts +45 -0
  116. package/dist/components/ButtonGroup/index.d.ts +45 -0
  117. package/dist/components/ButtonGroup/index.js +5 -0
  118. package/dist/components/ButtonGroup/index.js.map +1 -0
  119. package/dist/components/Calendar/index.js +3 -3
  120. package/dist/components/Card/index.js +2 -2
  121. package/dist/components/Checkbox/index.js +2 -2
  122. package/dist/components/Collapsible/index.cjs +512 -0
  123. package/dist/components/Collapsible/index.cjs.map +1 -0
  124. package/dist/components/Collapsible/index.d.cts +50 -0
  125. package/dist/components/Collapsible/index.d.ts +50 -0
  126. package/dist/components/Collapsible/index.js +7 -0
  127. package/dist/components/Collapsible/index.js.map +1 -0
  128. package/dist/components/Combobox/index.js +3 -3
  129. package/dist/components/ContextMenu/index.js +4 -4
  130. package/dist/components/DataTable/index.js +3 -3
  131. package/dist/components/DatePicker/index.js +5 -5
  132. package/dist/components/Dialog/index.js +2 -2
  133. package/dist/components/DropdownMenu/index.js +3 -3
  134. package/dist/components/Empty/index.cjs +385 -0
  135. package/dist/components/Empty/index.cjs.map +1 -0
  136. package/dist/components/Empty/index.d.cts +32 -0
  137. package/dist/components/Empty/index.d.ts +32 -0
  138. package/dist/components/Empty/index.js +7 -0
  139. package/dist/components/Empty/index.js.map +1 -0
  140. package/dist/components/FloatButton/index.js +3 -3
  141. package/dist/components/HStack/index.js +4 -4
  142. package/dist/components/InputGroup/index.js +2 -2
  143. package/dist/components/Item/index.cjs +443 -0
  144. package/dist/components/Item/index.cjs.map +1 -0
  145. package/dist/components/Item/index.d.cts +40 -0
  146. package/dist/components/Item/index.d.ts +40 -0
  147. package/dist/components/Item/index.js +7 -0
  148. package/dist/components/Item/index.js.map +1 -0
  149. package/dist/components/Kbd/index.cjs +396 -0
  150. package/dist/components/Kbd/index.cjs.map +1 -0
  151. package/dist/components/Kbd/index.d.cts +22 -0
  152. package/dist/components/Kbd/index.d.ts +22 -0
  153. package/dist/components/Kbd/index.js +7 -0
  154. package/dist/components/Kbd/index.js.map +1 -0
  155. package/dist/components/Pagination/index.js +4 -4
  156. package/dist/components/Popover/index.js +2 -2
  157. package/dist/components/Progress/index.js +2 -2
  158. package/dist/components/Radio/index.js +2 -2
  159. package/dist/components/SegmentedControl/index.js +2 -2
  160. package/dist/components/Select/index.js +2 -2
  161. package/dist/components/Separator/index.js +2 -2
  162. package/dist/components/Sheet/index.js +2 -2
  163. package/dist/components/Skeleton/index.js +2 -2
  164. package/dist/components/Slider/index.js +2 -2
  165. package/dist/components/Switch/index.js +2 -2
  166. package/dist/components/Table/index.js +2 -2
  167. package/dist/components/Tabs/index.js +2 -2
  168. package/dist/components/Text/index.js +2 -2
  169. package/dist/components/TextArea/index.js +3 -3
  170. package/dist/components/TextInput/index.js +2 -2
  171. package/dist/components/Toggle/index.js +2 -2
  172. package/dist/components/Tooltip/index.js +2 -2
  173. package/dist/components/VStack/index.js +4 -4
  174. package/dist/index.cjs +451 -2
  175. package/dist/index.cjs.map +1 -1
  176. package/dist/index.d.cts +6 -0
  177. package/dist/index.d.ts +6 -0
  178. package/dist/index.js +50 -44
  179. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import '../../chunk-VP7DRJUZ.js';
2
- export { Table } from '../../chunk-WYPGQVDV.js';
3
- import '../../chunk-CHXHRJNZ.js';
2
+ export { Table } from '../../chunk-5YHT252H.js';
4
3
  import '../../chunk-R5JMDDCB.js';
4
+ import '../../chunk-CHXHRJNZ.js';
5
5
  import '../../chunk-WCQVDF3K.js';
6
6
  //# sourceMappingURL=index.js.map
7
7
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
- export { Tabs } from '../../chunk-XALU6LOT.js';
1
+ export { Tabs } from '../../chunk-EN4CLDGZ.js';
2
2
  import '../../chunk-5A2QOOVN.js';
3
- import '../../chunk-CHXHRJNZ.js';
4
3
  import '../../chunk-R5JMDDCB.js';
4
+ import '../../chunk-CHXHRJNZ.js';
5
5
  import '../../chunk-WCQVDF3K.js';
6
6
  //# sourceMappingURL=index.js.map
7
7
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
- export { Text } from '../../chunk-JZ774T7U.js';
1
+ export { Text } from '../../chunk-ZGFXKYA5.js';
2
2
  import '../../chunk-5A2QOOVN.js';
3
- import '../../chunk-CHXHRJNZ.js';
4
3
  import '../../chunk-R5JMDDCB.js';
4
+ import '../../chunk-CHXHRJNZ.js';
5
5
  import '../../chunk-WCQVDF3K.js';
6
6
  //# sourceMappingURL=index.js.map
7
7
  //# sourceMappingURL=index.js.map
@@ -1,8 +1,8 @@
1
- export { TextArea } from '../../chunk-VYRJ7OE5.js';
2
- import '../../chunk-NF7XG2FG.js';
1
+ export { TextArea } from '../../chunk-USFXANEU.js';
2
+ import '../../chunk-V75O7QQO.js';
3
3
  import '../../chunk-5A2QOOVN.js';
4
- import '../../chunk-CHXHRJNZ.js';
5
4
  import '../../chunk-R5JMDDCB.js';
5
+ import '../../chunk-CHXHRJNZ.js';
6
6
  import '../../chunk-WCQVDF3K.js';
7
7
  //# sourceMappingURL=index.js.map
8
8
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
- export { TextInput } from '../../chunk-NF7XG2FG.js';
1
+ export { TextInput } from '../../chunk-V75O7QQO.js';
2
2
  import '../../chunk-5A2QOOVN.js';
3
- import '../../chunk-CHXHRJNZ.js';
4
3
  import '../../chunk-R5JMDDCB.js';
4
+ import '../../chunk-CHXHRJNZ.js';
5
5
  import '../../chunk-WCQVDF3K.js';
6
6
  //# sourceMappingURL=index.js.map
7
7
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
- export { Toggle } from '../../chunk-MKSDYRWQ.js';
1
+ export { Toggle } from '../../chunk-STX5UKYT.js';
2
2
  import '../../chunk-5A2QOOVN.js';
3
- import '../../chunk-CHXHRJNZ.js';
4
3
  import '../../chunk-R5JMDDCB.js';
4
+ import '../../chunk-CHXHRJNZ.js';
5
5
  import '../../chunk-WCQVDF3K.js';
6
6
  //# sourceMappingURL=index.js.map
7
7
  //# sourceMappingURL=index.js.map
@@ -1,8 +1,8 @@
1
- export { Tooltip } from '../../chunk-NRYWNOG5.js';
1
+ export { Tooltip } from '../../chunk-VL2WNGPF.js';
2
2
  import '../../chunk-ZIBNLXIV.js';
3
3
  import '../../chunk-5A2QOOVN.js';
4
- import '../../chunk-CHXHRJNZ.js';
5
4
  import '../../chunk-R5JMDDCB.js';
5
+ import '../../chunk-CHXHRJNZ.js';
6
6
  import '../../chunk-WCQVDF3K.js';
7
7
  //# sourceMappingURL=index.js.map
8
8
  //# sourceMappingURL=index.js.map
@@ -1,9 +1,9 @@
1
- export { VStack } from '../../chunk-MRJWPRCX.js';
2
- import '../../chunk-JQQ3FBN7.js';
3
- import '../../chunk-JZ774T7U.js';
1
+ export { VStack } from '../../chunk-L6VYDM7S.js';
2
+ import '../../chunk-VLZANXRZ.js';
3
+ import '../../chunk-ZGFXKYA5.js';
4
4
  import '../../chunk-5A2QOOVN.js';
5
- import '../../chunk-CHXHRJNZ.js';
6
5
  import '../../chunk-R5JMDDCB.js';
6
+ import '../../chunk-CHXHRJNZ.js';
7
7
  import '../../chunk-WCQVDF3K.js';
8
8
  //# sourceMappingURL=index.js.map
9
9
  //# sourceMappingURL=index.js.map
package/dist/index.cjs CHANGED
@@ -1649,6 +1649,24 @@ var AlertDialog = Object.assign(AlertDialogRoot, {
1649
1649
  Action: AlertDialogAction,
1650
1650
  Cancel: AlertDialogCancel
1651
1651
  });
1652
+ var BASE_STYLE = {
1653
+ overflow: "hidden"
1654
+ };
1655
+ var AspectRatio = /* @__PURE__ */ __name(({ ratio, children, className, testID }) => {
1656
+ const containerStyle = {
1657
+ ...BASE_STYLE,
1658
+ aspectRatio: ratio
1659
+ };
1660
+ return /* @__PURE__ */ jsxRuntime.jsx(
1661
+ reactNative.View,
1662
+ {
1663
+ ...testID !== void 0 ? { testID } : {},
1664
+ className: cn("overflow-hidden", className),
1665
+ style: containerStyle,
1666
+ children
1667
+ }
1668
+ );
1669
+ }, "AspectRatio");
1652
1670
  var SIZE_PX = {
1653
1671
  sm: 32,
1654
1672
  md: 40,
@@ -3487,7 +3505,7 @@ var SIZE_KEYS = {
3487
3505
  md: { padX: "4", font: "md" },
3488
3506
  lg: { padX: "5", font: "lg" }
3489
3507
  };
3490
- var BASE_STYLE = {
3508
+ var BASE_STYLE2 = {
3491
3509
  flexDirection: "row",
3492
3510
  alignItems: "center",
3493
3511
  justifyContent: "center"
@@ -3578,7 +3596,7 @@ var Button = /* @__PURE__ */ __name(({
3578
3596
  };
3579
3597
  const sizeFontSize = px(colors.fontSize[sizeKeys.font]);
3580
3598
  const inlineBase = [
3581
- BASE_STYLE,
3599
+ BASE_STYLE2,
3582
3600
  { backgroundColor: stateBg },
3583
3601
  sizeContainer,
3584
3602
  { opacity: isInoperative ? 0.6 : stateInteractionOpacity }
@@ -3658,6 +3676,39 @@ var Button = /* @__PURE__ */ __name(({
3658
3676
  }
3659
3677
  );
3660
3678
  }, "Button");
3679
+ var ButtonGroup = /* @__PURE__ */ __name(({ children, orientation = "horizontal", size, className, testID }) => {
3680
+ const isHorizontal = orientation === "horizontal";
3681
+ const containerStyle = {
3682
+ flexDirection: isHorizontal ? "row" : "column",
3683
+ // gap: 0 so buttons touch; shared-border effect comes from CSS on web
3684
+ // and from touching edges on native.
3685
+ gap: 0,
3686
+ alignSelf: "flex-start",
3687
+ overflow: "hidden"
3688
+ };
3689
+ const childArray = React.Children.toArray(children).filter(React.isValidElement);
3690
+ const total = childArray.length;
3691
+ const clonedChildren = childArray.map((child, index) => {
3692
+ const position = index === 0 ? "first" : index === total - 1 ? "last" : "middle";
3693
+ const extraProps = {
3694
+ "data-position": position,
3695
+ "data-group-orientation": orientation
3696
+ };
3697
+ if (size !== void 0) {
3698
+ extraProps["data-group-size"] = size;
3699
+ }
3700
+ return React.cloneElement(child, extraProps);
3701
+ });
3702
+ return /* @__PURE__ */ jsxRuntime.jsx(
3703
+ reactNative.View,
3704
+ {
3705
+ ...testID !== void 0 ? { testID } : {},
3706
+ className: cn(isHorizontal ? "flex-row" : "flex-col", "self-start overflow-hidden", className),
3707
+ style: containerStyle,
3708
+ children: clonedChildren
3709
+ }
3710
+ );
3711
+ }, "ButtonGroup");
3661
3712
  var detectLocale = /* @__PURE__ */ __name(() => {
3662
3713
  try {
3663
3714
  return new Intl.DateTimeFormat().resolvedOptions().locale;
@@ -6592,6 +6643,182 @@ var Checkbox = /* @__PURE__ */ __name(({
6592
6643
  }
6593
6644
  );
6594
6645
  }, "Checkbox");
6646
+ var CollapsibleContext = React.createContext(null);
6647
+ var useCollapsibleContext = /* @__PURE__ */ __name((label) => {
6648
+ const ctx = React.useContext(CollapsibleContext);
6649
+ if (!ctx) {
6650
+ throw new Error(`<${label}> must be rendered inside a <Collapsible>.`);
6651
+ }
6652
+ return ctx;
6653
+ }, "useCollapsibleContext");
6654
+ var CollapsibleRoot = /* @__PURE__ */ __name(({
6655
+ open: controlledOpen,
6656
+ defaultOpen = false,
6657
+ onOpenChange,
6658
+ children,
6659
+ className,
6660
+ testID
6661
+ }) => {
6662
+ const baseId = React.useId();
6663
+ const [innerOpen, setInnerOpen] = React.useState(defaultOpen);
6664
+ const isControlled = controlledOpen !== void 0;
6665
+ const open = isControlled ? controlledOpen : innerOpen;
6666
+ const toggle = React.useCallback(() => {
6667
+ const next = !open;
6668
+ if (!isControlled) {
6669
+ setInnerOpen(next);
6670
+ }
6671
+ onOpenChange?.(next);
6672
+ }, [open, isControlled, onOpenChange]);
6673
+ const ctx = React.useMemo(
6674
+ () => ({
6675
+ open,
6676
+ toggle,
6677
+ contentId: `${baseId}-content`,
6678
+ triggerId: `${baseId}-trigger`
6679
+ }),
6680
+ [open, toggle, baseId]
6681
+ );
6682
+ return /* @__PURE__ */ jsxRuntime.jsx(CollapsibleContext.Provider, { value: ctx, children: /* @__PURE__ */ jsxRuntime.jsx(
6683
+ reactNative.View,
6684
+ {
6685
+ ...testID !== void 0 ? { testID } : {},
6686
+ className: cn("flex-col", className),
6687
+ style: { flexDirection: "column" },
6688
+ children
6689
+ }
6690
+ ) });
6691
+ }, "CollapsibleRoot");
6692
+ var CollapsibleTrigger = /* @__PURE__ */ __name(({ children, className, testID }) => {
6693
+ const { open, toggle, contentId, triggerId } = useCollapsibleContext("Collapsible.Trigger");
6694
+ const colors = useThemeColors();
6695
+ const triggerStyle = {
6696
+ flexDirection: "row",
6697
+ alignItems: "center",
6698
+ paddingVertical: px(colors.spacing["2"]),
6699
+ paddingHorizontal: px(colors.spacing["1"])
6700
+ };
6701
+ return /* @__PURE__ */ jsxRuntime.jsx(
6702
+ reactNative.Pressable,
6703
+ {
6704
+ id: triggerId,
6705
+ ...testID !== void 0 ? { testID } : {},
6706
+ role: "button",
6707
+ accessibilityRole: "button",
6708
+ "aria-expanded": open,
6709
+ "aria-controls": contentId,
6710
+ onPress: toggle,
6711
+ className: cn("flex-row items-center py-2 px-1", className),
6712
+ style: triggerStyle,
6713
+ children: typeof children === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
6714
+ reactNative.Text,
6715
+ {
6716
+ style: {
6717
+ color: colors.semantic.text.default,
6718
+ fontFamily: colors.fontFamily.body,
6719
+ fontSize: px(colors.fontSize.sm),
6720
+ fontWeight: colors.fontWeight.medium
6721
+ },
6722
+ children
6723
+ }
6724
+ ) : children
6725
+ }
6726
+ );
6727
+ }, "CollapsibleTrigger");
6728
+ var CollapsibleContent = /* @__PURE__ */ __name(({ children, className, testID }) => {
6729
+ const { open, contentId, triggerId } = useCollapsibleContext("Collapsible.Content");
6730
+ const wrapperRef = React.useRef(null);
6731
+ const innerRef = React.useRef(null);
6732
+ React.useEffect(() => {
6733
+ if (reactNative.Platform.OS !== "web") {
6734
+ return;
6735
+ }
6736
+ const wrapper = wrapperRef.current;
6737
+ const inner = innerRef.current;
6738
+ if (!wrapper || !inner) {
6739
+ return;
6740
+ }
6741
+ const isFirstPaint = wrapper.dataset.noriPainted !== "1";
6742
+ wrapper.dataset.noriPainted = "1";
6743
+ wrapper.style.overflow = "hidden";
6744
+ wrapper.style.transitionProperty = "max-height, opacity";
6745
+ wrapper.style.transitionDuration = "200ms";
6746
+ wrapper.style.transitionTimingFunction = "cubic-bezier(0.16, 1, 0.3, 1)";
6747
+ if (open) {
6748
+ const target = inner.scrollHeight;
6749
+ if (isFirstPaint) {
6750
+ wrapper.style.maxHeight = `${target}px`;
6751
+ wrapper.style.opacity = "1";
6752
+ return;
6753
+ }
6754
+ wrapper.style.maxHeight = "0px";
6755
+ wrapper.style.opacity = "0";
6756
+ void wrapper.offsetHeight;
6757
+ requestAnimationFrame(() => {
6758
+ wrapper.style.maxHeight = `${target}px`;
6759
+ wrapper.style.opacity = "1";
6760
+ });
6761
+ } else {
6762
+ if (isFirstPaint) {
6763
+ wrapper.style.maxHeight = "0px";
6764
+ wrapper.style.opacity = "0";
6765
+ return;
6766
+ }
6767
+ const current = inner.scrollHeight;
6768
+ wrapper.style.maxHeight = `${current}px`;
6769
+ wrapper.style.opacity = "1";
6770
+ void wrapper.offsetHeight;
6771
+ requestAnimationFrame(() => {
6772
+ wrapper.style.maxHeight = "0px";
6773
+ wrapper.style.opacity = "0";
6774
+ });
6775
+ }
6776
+ }, [open]);
6777
+ if (reactNative.Platform.OS !== "web") {
6778
+ if (!open) {
6779
+ return null;
6780
+ }
6781
+ return /* @__PURE__ */ jsxRuntime.jsx(
6782
+ reactNative.View,
6783
+ {
6784
+ ...testID !== void 0 ? { testID } : {},
6785
+ id: contentId,
6786
+ "aria-labelledby": triggerId,
6787
+ className: cn("flex-col", className),
6788
+ style: { flexDirection: "column" },
6789
+ children
6790
+ }
6791
+ );
6792
+ }
6793
+ return /* @__PURE__ */ jsxRuntime.jsx(
6794
+ reactNative.View,
6795
+ {
6796
+ ref: (node) => {
6797
+ wrapperRef.current = node;
6798
+ },
6799
+ ...testID !== void 0 ? { testID } : {},
6800
+ id: contentId,
6801
+ "aria-labelledby": triggerId,
6802
+ "aria-hidden": !open,
6803
+ className: cn("overflow-hidden", className),
6804
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6805
+ reactNative.View,
6806
+ {
6807
+ ref: (node) => {
6808
+ innerRef.current = node;
6809
+ },
6810
+ className: "flex-col",
6811
+ style: { flexDirection: "column" },
6812
+ children
6813
+ }
6814
+ )
6815
+ }
6816
+ );
6817
+ }, "CollapsibleContent");
6818
+ var Collapsible = Object.assign(CollapsibleRoot, {
6819
+ Trigger: CollapsibleTrigger,
6820
+ Content: CollapsibleContent
6821
+ });
6595
6822
  var Combobox = /* @__PURE__ */ __name((props) => {
6596
6823
  return /* @__PURE__ */ jsxRuntime.jsx(Select, { searchable: true, ...props });
6597
6824
  }, "Combobox");
@@ -8190,6 +8417,55 @@ var Dialog = Object.assign(DialogRoot, {
8190
8417
  Footer: DialogFooter,
8191
8418
  Close: DialogClose
8192
8419
  });
8420
+ var Empty = /* @__PURE__ */ __name(({ icon, title, description, action, className, testID }) => {
8421
+ const colors = useThemeColors();
8422
+ const containerStyle = {
8423
+ flexDirection: "column",
8424
+ alignItems: "center",
8425
+ justifyContent: "center",
8426
+ gap: px(colors.spacing["3"]),
8427
+ paddingVertical: px(colors.spacing["8"]),
8428
+ paddingHorizontal: px(colors.spacing["4"])
8429
+ };
8430
+ return /* @__PURE__ */ jsxRuntime.jsxs(
8431
+ reactNative.View,
8432
+ {
8433
+ ...testID !== void 0 ? { testID } : {},
8434
+ className: cn("flex-col items-center justify-center gap-3 py-8 px-4", className),
8435
+ style: containerStyle,
8436
+ children: [
8437
+ icon != null ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: { marginBottom: px(colors.spacing["1"]) }, children: icon }) : null,
8438
+ /* @__PURE__ */ jsxRuntime.jsx(
8439
+ reactNative.Text,
8440
+ {
8441
+ style: {
8442
+ color: colors.semantic.text.default,
8443
+ fontFamily: colors.fontFamily.body,
8444
+ fontSize: px(colors.fontSize.md),
8445
+ fontWeight: colors.fontWeight.semibold,
8446
+ textAlign: "center"
8447
+ },
8448
+ children: title
8449
+ }
8450
+ ),
8451
+ description != null ? /* @__PURE__ */ jsxRuntime.jsx(
8452
+ reactNative.Text,
8453
+ {
8454
+ style: {
8455
+ color: colors.semantic.text.muted,
8456
+ fontFamily: colors.fontFamily.body,
8457
+ fontSize: px(colors.fontSize.sm),
8458
+ lineHeight: px(colors.fontSize.sm) * Number(colors.lineHeight.normal),
8459
+ textAlign: "center"
8460
+ },
8461
+ children: description
8462
+ }
8463
+ ) : null,
8464
+ action != null ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: { marginTop: px(colors.spacing["1"]) }, children: action }) : null
8465
+ ]
8466
+ }
8467
+ );
8468
+ }, "Empty");
8193
8469
  var FieldContext = React.createContext(null);
8194
8470
  var useFieldContextStrict = /* @__PURE__ */ __name((caller) => {
8195
8471
  const ctx = React.useContext(FieldContext);
@@ -9473,6 +9749,173 @@ var InputGroup = Object.assign(InputGroupRoot, {
9473
9749
  Addon: InputGroupAddon,
9474
9750
  Input: InputGroupInput
9475
9751
  });
9752
+ var Item = /* @__PURE__ */ __name(({
9753
+ leading,
9754
+ title,
9755
+ description,
9756
+ trailing,
9757
+ chevron = false,
9758
+ onPress,
9759
+ disabled = false,
9760
+ className,
9761
+ testID
9762
+ }) => {
9763
+ const colors = useThemeColors();
9764
+ const isTappable = onPress !== void 0;
9765
+ const rowStyle = {
9766
+ flexDirection: "row",
9767
+ alignItems: "center",
9768
+ gap: px(colors.spacing["3"]),
9769
+ paddingVertical: px(colors.spacing["3"]),
9770
+ paddingHorizontal: px(colors.spacing["4"]),
9771
+ minHeight: 52,
9772
+ opacity: disabled ? 0.5 : 1
9773
+ };
9774
+ const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
9775
+ leading != null ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: { flexShrink: 0 }, children: leading }) : null,
9776
+ /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: { flex: 1, flexDirection: "column", gap: 2 }, children: [
9777
+ typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
9778
+ reactNative.Text,
9779
+ {
9780
+ style: {
9781
+ color: colors.semantic.text.default,
9782
+ fontFamily: colors.fontFamily.body,
9783
+ fontSize: px(colors.fontSize.sm),
9784
+ fontWeight: colors.fontWeight.medium
9785
+ },
9786
+ numberOfLines: 1,
9787
+ children: title
9788
+ }
9789
+ ) : title,
9790
+ description != null ? typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
9791
+ reactNative.Text,
9792
+ {
9793
+ style: {
9794
+ color: colors.semantic.text.muted,
9795
+ fontFamily: colors.fontFamily.body,
9796
+ fontSize: px(colors.fontSize.xs)
9797
+ },
9798
+ numberOfLines: 1,
9799
+ children: description
9800
+ }
9801
+ ) : description : null
9802
+ ] }),
9803
+ trailing != null ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: { flexShrink: 0 }, children: trailing }) : null,
9804
+ chevron ? /* @__PURE__ */ jsxRuntime.jsx(
9805
+ reactNative.View,
9806
+ {
9807
+ style: { flexShrink: 0 },
9808
+ "aria-hidden": true,
9809
+ testID: testID != null ? `${testID}-chevron` : void 0,
9810
+ children: /* @__PURE__ */ jsxRuntime.jsx(
9811
+ reactNative.Text,
9812
+ {
9813
+ accessibilityElementsHidden: true,
9814
+ importantForAccessibility: "no-hide-descendants",
9815
+ style: {
9816
+ fontSize: 14,
9817
+ lineHeight: 16,
9818
+ color: colors.semantic.text.muted,
9819
+ // On web rn-web passes style through — transform
9820
+ // with a rotate is the lightest-weight approach
9821
+ // that avoids importing the full SVG icon set.
9822
+ transform: [{ rotate: "-90deg" }]
9823
+ },
9824
+ children: "\u2304"
9825
+ }
9826
+ )
9827
+ }
9828
+ ) : null
9829
+ ] });
9830
+ if (isTappable) {
9831
+ return /* @__PURE__ */ jsxRuntime.jsx(
9832
+ reactNative.Pressable,
9833
+ {
9834
+ ...testID !== void 0 ? { testID } : {},
9835
+ role: "button",
9836
+ accessibilityRole: "button",
9837
+ disabled,
9838
+ onPress: disabled ? void 0 : onPress,
9839
+ className: cn(
9840
+ "flex-row items-center",
9841
+ disabled ? "opacity-50" : "hover:bg-semantic-background-subtle active:bg-semantic-border-default",
9842
+ className
9843
+ ),
9844
+ style: rowStyle,
9845
+ children: content
9846
+ }
9847
+ );
9848
+ }
9849
+ return /* @__PURE__ */ jsxRuntime.jsx(
9850
+ reactNative.View,
9851
+ {
9852
+ ...testID !== void 0 ? { testID } : {},
9853
+ className: cn("flex-row items-center", className),
9854
+ style: rowStyle,
9855
+ children: content
9856
+ }
9857
+ );
9858
+ }, "Item");
9859
+ var Kbd = /* @__PURE__ */ __name(({ children, className }) => {
9860
+ const colors = useThemeColors();
9861
+ const isDark = useColorScheme() === "dark";
9862
+ const bgColor = isDark ? colors.color.neutral["800"] : colors.color.neutral["100"];
9863
+ const borderColor = isDark ? colors.color.neutral["600"] : colors.color.neutral["300"];
9864
+ const textColor = isDark ? colors.color.neutral["200"] : colors.color.neutral["700"];
9865
+ const containerStyle = {
9866
+ display: "flex",
9867
+ flexDirection: "row",
9868
+ alignItems: "center",
9869
+ justifyContent: "center",
9870
+ alignSelf: "center",
9871
+ backgroundColor: bgColor,
9872
+ borderWidth: 1,
9873
+ borderColor,
9874
+ borderRadius: px(colors.radius.sm),
9875
+ paddingHorizontal: px(colors.spacing["1"]),
9876
+ paddingVertical: 2,
9877
+ // Subtle bottom shadow gives the classic key look.
9878
+ ...reactNative.Platform.OS === "web" ? {
9879
+ boxShadow: `0 1px 0 ${borderColor}`,
9880
+ display: "inline-flex"
9881
+ } : {}
9882
+ };
9883
+ const textStyle = {
9884
+ color: textColor,
9885
+ // Monospace font for key labels.
9886
+ fontFamily: colors.fontFamily.mono ?? "monospace",
9887
+ fontSize: px(colors.fontSize.xs),
9888
+ fontWeight: colors.fontWeight.medium,
9889
+ lineHeight: px(colors.fontSize.xs) * Number(colors.lineHeight.normal)
9890
+ };
9891
+ const extraWebProps = reactNative.Platform.OS === "web" ? {
9892
+ // rn-web: 'none' skips the role attribute so the outer
9893
+ // View is just a plain <div>; we rely on the inner
9894
+ // <span> with data-kbd for semantic annotation.
9895
+ accessibilityRole: "none"
9896
+ } : {};
9897
+ return /* @__PURE__ */ jsxRuntime.jsx(
9898
+ reactNative.View,
9899
+ {
9900
+ ...extraWebProps,
9901
+ className: cn(
9902
+ "inline-flex flex-row items-center rounded-sm border px-1 py-0.5",
9903
+ isDark ? "bg-neutral-800 border-neutral-600 text-neutral-200" : "bg-neutral-100 border-neutral-300 text-neutral-700",
9904
+ className
9905
+ ),
9906
+ style: containerStyle,
9907
+ children: /* @__PURE__ */ jsxRuntime.jsx(
9908
+ reactNative.Text,
9909
+ {
9910
+ ...reactNative.Platform.OS === "web" ? { "data-kbd": "" } : {},
9911
+ accessibilityRole: "none",
9912
+ style: textStyle,
9913
+ children
9914
+ }
9915
+ )
9916
+ }
9917
+ );
9918
+ }, "Kbd");
9476
9919
  var Label = /* @__PURE__ */ __name(({ htmlFor, required = false, disabled = false, children, className, testID }) => {
9477
9920
  const colors = useThemeColors();
9478
9921
  const { t } = useTranslation();
@@ -13625,14 +14068,17 @@ __name(Icon, "Icon");
13625
14068
  exports.Accordion = Accordion;
13626
14069
  exports.Alert = Alert;
13627
14070
  exports.AlertDialog = AlertDialog;
14071
+ exports.AspectRatio = AspectRatio;
13628
14072
  exports.Avatar = Avatar;
13629
14073
  exports.Badge = Badge;
13630
14074
  exports.Box = Box;
13631
14075
  exports.Breadcrumb = Breadcrumb;
13632
14076
  exports.Button = Button;
14077
+ exports.ButtonGroup = ButtonGroup;
13633
14078
  exports.Calendar = Calendar;
13634
14079
  exports.Card = Card;
13635
14080
  exports.Checkbox = Checkbox;
14081
+ exports.Collapsible = Collapsible;
13636
14082
  exports.Combobox = Combobox;
13637
14083
  exports.ContextMenu = ContextMenu;
13638
14084
  exports.DataTable = DataTable;
@@ -13640,11 +14086,14 @@ exports.DatePicker = DatePicker;
13640
14086
  exports.Dialog = Dialog;
13641
14087
  exports.Drawer = Drawer;
13642
14088
  exports.DropdownMenu = DropdownMenu;
14089
+ exports.Empty = Empty;
13643
14090
  exports.Field = Field;
13644
14091
  exports.FloatButton = FloatButton;
13645
14092
  exports.HStack = HStack;
13646
14093
  exports.Icon = Icon;
13647
14094
  exports.InputGroup = InputGroup;
14095
+ exports.Item = Item;
14096
+ exports.Kbd = Kbd;
13648
14097
  exports.Label = Label;
13649
14098
  exports.MenuContent = MenuContent;
13650
14099
  exports.MenuItem = MenuItem;