@nori-ui/core 1.5.0 → 1.6.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 (171) hide show
  1. package/dist/Table.shared-BymRgTnY.d.cts +54 -0
  2. package/dist/Table.shared-BymRgTnY.d.ts +54 -0
  3. package/dist/{chunk-ND7MRYW7.js → chunk-2HMQDJ22.js} +4 -4
  4. package/dist/{chunk-ND7MRYW7.js.map → chunk-2HMQDJ22.js.map} +1 -1
  5. package/dist/{chunk-KCLWPSV5.js → chunk-2RL6WCFC.js} +4 -4
  6. package/dist/{chunk-KCLWPSV5.js.map → chunk-2RL6WCFC.js.map} +1 -1
  7. package/dist/{chunk-FDBQOQMW.js → chunk-3BDDPFCI.js} +3 -3
  8. package/dist/{chunk-FDBQOQMW.js.map → chunk-3BDDPFCI.js.map} +1 -1
  9. package/dist/{chunk-WOF67PKT.js → chunk-3CEJ5TB4.js} +3 -3
  10. package/dist/{chunk-WOF67PKT.js.map → chunk-3CEJ5TB4.js.map} +1 -1
  11. package/dist/{chunk-BNDUQNG7.js → chunk-3OIWAS2P.js} +3 -3
  12. package/dist/{chunk-BNDUQNG7.js.map → chunk-3OIWAS2P.js.map} +1 -1
  13. package/dist/{chunk-6JVUVBZH.js → chunk-4PUPKWEP.js} +5 -5
  14. package/dist/{chunk-6JVUVBZH.js.map → chunk-4PUPKWEP.js.map} +1 -1
  15. package/dist/{chunk-6PO2IWB3.js → chunk-4UFAZLSZ.js} +5 -3
  16. package/dist/chunk-4UFAZLSZ.js.map +1 -0
  17. package/dist/{chunk-76FZF4GM.js → chunk-5PSC5HT4.js} +8 -125
  18. package/dist/chunk-5PSC5HT4.js.map +1 -0
  19. package/dist/{chunk-LWQZ257T.js → chunk-5XEGZFG5.js} +3 -3
  20. package/dist/{chunk-LWQZ257T.js.map → chunk-5XEGZFG5.js.map} +1 -1
  21. package/dist/{chunk-WAKKQROH.js → chunk-6AD6KCVB.js} +3 -3
  22. package/dist/{chunk-WAKKQROH.js.map → chunk-6AD6KCVB.js.map} +1 -1
  23. package/dist/chunk-73CUV7MW.js +125 -0
  24. package/dist/chunk-73CUV7MW.js.map +1 -0
  25. package/dist/{chunk-GRDVE3IR.js → chunk-BZLT6R62.js} +3 -3
  26. package/dist/{chunk-GRDVE3IR.js.map → chunk-BZLT6R62.js.map} +1 -1
  27. package/dist/{chunk-Y4ZRSW35.js → chunk-CCUXO2HN.js} +3 -3
  28. package/dist/{chunk-Y4ZRSW35.js.map → chunk-CCUXO2HN.js.map} +1 -1
  29. package/dist/{chunk-2UXKXUX2.js → chunk-CPIKN4BX.js} +3 -3
  30. package/dist/{chunk-2UXKXUX2.js.map → chunk-CPIKN4BX.js.map} +1 -1
  31. package/dist/{chunk-46OT4PA6.js → chunk-DDGMLLS3.js} +3 -3
  32. package/dist/{chunk-46OT4PA6.js.map → chunk-DDGMLLS3.js.map} +1 -1
  33. package/dist/{chunk-XP55RZ3D.js → chunk-FEPTH5RV.js} +3 -3
  34. package/dist/{chunk-XP55RZ3D.js.map → chunk-FEPTH5RV.js.map} +1 -1
  35. package/dist/{chunk-MJ4AGXS7.js → chunk-GJMHNEQ3.js} +3 -3
  36. package/dist/{chunk-MJ4AGXS7.js.map → chunk-GJMHNEQ3.js.map} +1 -1
  37. package/dist/{chunk-VCJF75T2.js → chunk-JQQ3FBN7.js} +3 -3
  38. package/dist/{chunk-VCJF75T2.js.map → chunk-JQQ3FBN7.js.map} +1 -1
  39. package/dist/{chunk-O4NMS3KB.js → chunk-JXLEMBDB.js} +3 -3
  40. package/dist/{chunk-O4NMS3KB.js.map → chunk-JXLEMBDB.js.map} +1 -1
  41. package/dist/{chunk-W3HMOOON.js → chunk-JZ774T7U.js} +3 -3
  42. package/dist/{chunk-W3HMOOON.js.map → chunk-JZ774T7U.js.map} +1 -1
  43. package/dist/{chunk-SINLREQV.js → chunk-MKSDYRWQ.js} +3 -3
  44. package/dist/{chunk-SINLREQV.js.map → chunk-MKSDYRWQ.js.map} +1 -1
  45. package/dist/{chunk-AFQIK6JI.js → chunk-MRJWPRCX.js} +3 -3
  46. package/dist/{chunk-AFQIK6JI.js.map → chunk-MRJWPRCX.js.map} +1 -1
  47. package/dist/{chunk-EFK7726V.js → chunk-NF7XG2FG.js} +3 -3
  48. package/dist/{chunk-EFK7726V.js.map → chunk-NF7XG2FG.js.map} +1 -1
  49. package/dist/{chunk-WTNDPO2V.js → chunk-NNFJKRXZ.js} +3 -3
  50. package/dist/{chunk-WTNDPO2V.js.map → chunk-NNFJKRXZ.js.map} +1 -1
  51. package/dist/{chunk-CGQIVFCN.js → chunk-NRYWNOG5.js} +3 -3
  52. package/dist/{chunk-CGQIVFCN.js.map → chunk-NRYWNOG5.js.map} +1 -1
  53. package/dist/{chunk-HTF6FDB6.js → chunk-OMU4R4Y5.js} +3 -3
  54. package/dist/{chunk-HTF6FDB6.js.map → chunk-OMU4R4Y5.js.map} +1 -1
  55. package/dist/{chunk-C6TRLHMW.js → chunk-PABG3IJ6.js} +3 -3
  56. package/dist/{chunk-C6TRLHMW.js.map → chunk-PABG3IJ6.js.map} +1 -1
  57. package/dist/{chunk-RM5TSXVE.js → chunk-PNP7L4TA.js} +3 -3
  58. package/dist/{chunk-RM5TSXVE.js.map → chunk-PNP7L4TA.js.map} +1 -1
  59. package/dist/{chunk-L5X4SYJ4.js → chunk-PZS4A4VQ.js} +3 -3
  60. package/dist/{chunk-L5X4SYJ4.js.map → chunk-PZS4A4VQ.js.map} +1 -1
  61. package/dist/{chunk-4I37QSEM.js → chunk-QJVS2VXS.js} +5 -5
  62. package/dist/{chunk-4I37QSEM.js.map → chunk-QJVS2VXS.js.map} +1 -1
  63. package/dist/{chunk-H7MFAFV4.js → chunk-RUWD35UI.js} +4 -4
  64. package/dist/{chunk-H7MFAFV4.js.map → chunk-RUWD35UI.js.map} +1 -1
  65. package/dist/{chunk-5BM6H2CD.js → chunk-SFNDR6DI.js} +3 -3
  66. package/dist/{chunk-5BM6H2CD.js.map → chunk-SFNDR6DI.js.map} +1 -1
  67. package/dist/{chunk-UF5OENHV.js → chunk-TLS54G6Y.js} +3 -3
  68. package/dist/{chunk-UF5OENHV.js.map → chunk-TLS54G6Y.js.map} +1 -1
  69. package/dist/{chunk-UUXWRDWW.js → chunk-UJWCEGQY.js} +3 -3
  70. package/dist/{chunk-UUXWRDWW.js.map → chunk-UJWCEGQY.js.map} +1 -1
  71. package/dist/{chunk-UJ5KFRDE.js → chunk-UZD77M3J.js} +3 -3
  72. package/dist/{chunk-UJ5KFRDE.js.map → chunk-UZD77M3J.js.map} +1 -1
  73. package/dist/chunk-VP7DRJUZ.js +3 -0
  74. package/dist/chunk-VP7DRJUZ.js.map +1 -0
  75. package/dist/{chunk-UPVNZPFV.js → chunk-VYRJ7OE5.js} +3 -3
  76. package/dist/{chunk-UPVNZPFV.js.map → chunk-VYRJ7OE5.js.map} +1 -1
  77. package/dist/{chunk-IGLMPAWE.js → chunk-WGT345SV.js} +3 -3
  78. package/dist/{chunk-IGLMPAWE.js.map → chunk-WGT345SV.js.map} +1 -1
  79. package/dist/{chunk-F7G6R373.js → chunk-WP2Z2ATO.js} +5 -5
  80. package/dist/{chunk-F7G6R373.js.map → chunk-WP2Z2ATO.js.map} +1 -1
  81. package/dist/chunk-WYPGQVDV.js +145 -0
  82. package/dist/chunk-WYPGQVDV.js.map +1 -0
  83. package/dist/{chunk-GELLSU64.js → chunk-XALU6LOT.js} +3 -3
  84. package/dist/{chunk-GELLSU64.js.map → chunk-XALU6LOT.js.map} +1 -1
  85. package/dist/{chunk-VMAGFYHG.js → chunk-Y5TJ7CAX.js} +3 -3
  86. package/dist/{chunk-VMAGFYHG.js.map → chunk-Y5TJ7CAX.js.map} +1 -1
  87. package/dist/chunk-YZ27OS2R.js +202 -0
  88. package/dist/chunk-YZ27OS2R.js.map +1 -0
  89. package/dist/client.cjs +449 -119
  90. package/dist/client.cjs.map +1 -1
  91. package/dist/client.d.cts +3 -0
  92. package/dist/client.d.ts +3 -0
  93. package/dist/client.js +50 -46
  94. package/dist/client.js.map +1 -1
  95. package/dist/components/Accordion/index.js +2 -2
  96. package/dist/components/Alert/index.js +2 -2
  97. package/dist/components/AlertDialog/index.js +2 -2
  98. package/dist/components/Avatar/index.js +2 -2
  99. package/dist/components/Badge/index.js +2 -2
  100. package/dist/components/Box/index.js +4 -4
  101. package/dist/components/Breadcrumb/index.cjs +3 -1
  102. package/dist/components/Breadcrumb/index.cjs.map +1 -1
  103. package/dist/components/Breadcrumb/index.js +5 -5
  104. package/dist/components/Button/index.js +2 -2
  105. package/dist/components/Calendar/index.cjs +3 -1
  106. package/dist/components/Calendar/index.cjs.map +1 -1
  107. package/dist/components/Calendar/index.js +5 -5
  108. package/dist/components/Card/index.js +2 -2
  109. package/dist/components/Checkbox/index.js +2 -2
  110. package/dist/components/Combobox/index.js +3 -3
  111. package/dist/components/ContextMenu/index.js +4 -4
  112. package/dist/components/DataTable/index.cjs +770 -0
  113. package/dist/components/DataTable/index.cjs.map +1 -0
  114. package/dist/components/DataTable/index.d.cts +53 -0
  115. package/dist/components/DataTable/index.d.ts +53 -0
  116. package/dist/components/DataTable/index.js +8 -0
  117. package/dist/components/DataTable/index.js.map +1 -0
  118. package/dist/components/DatePicker/index.cjs +3 -1
  119. package/dist/components/DatePicker/index.cjs.map +1 -1
  120. package/dist/components/DatePicker/index.js +7 -7
  121. package/dist/components/Dialog/index.js +2 -2
  122. package/dist/components/DropdownMenu/index.js +3 -3
  123. package/dist/components/Field/index.cjs +3 -1
  124. package/dist/components/Field/index.cjs.map +1 -1
  125. package/dist/components/Field/index.d.cts +2 -2
  126. package/dist/components/Field/index.d.ts +2 -2
  127. package/dist/components/Field/index.js +3 -3
  128. package/dist/components/FloatButton/index.cjs +3 -1
  129. package/dist/components/FloatButton/index.cjs.map +1 -1
  130. package/dist/components/FloatButton/index.js +5 -5
  131. package/dist/components/HStack/index.js +4 -4
  132. package/dist/components/InputGroup/index.js +2 -2
  133. package/dist/components/Label/index.cjs +3 -1
  134. package/dist/components/Label/index.cjs.map +1 -1
  135. package/dist/components/Label/index.js +3 -3
  136. package/dist/components/Pagination/index.cjs +3 -1
  137. package/dist/components/Pagination/index.cjs.map +1 -1
  138. package/dist/components/Pagination/index.js +6 -5
  139. package/dist/components/Popover/index.js +2 -2
  140. package/dist/components/Progress/index.js +2 -2
  141. package/dist/components/Radio/index.js +2 -2
  142. package/dist/components/SegmentedControl/index.js +2 -2
  143. package/dist/components/Select/index.js +2 -2
  144. package/dist/components/Sheet/index.js +2 -2
  145. package/dist/components/Switch/index.js +2 -2
  146. package/dist/components/Table/index.cjs +461 -0
  147. package/dist/components/Table/index.cjs.map +1 -0
  148. package/dist/components/Table/index.d.cts +16 -0
  149. package/dist/components/Table/index.d.ts +16 -0
  150. package/dist/components/Table/index.js +7 -0
  151. package/dist/components/Table/index.js.map +1 -0
  152. package/dist/components/Tabs/index.js +2 -2
  153. package/dist/components/Text/index.js +2 -2
  154. package/dist/components/TextArea/index.js +3 -3
  155. package/dist/components/TextInput/index.js +2 -2
  156. package/dist/components/Toggle/index.js +2 -2
  157. package/dist/components/Tooltip/index.js +2 -2
  158. package/dist/components/VStack/index.js +4 -4
  159. package/dist/i18n/index.cjs +3 -1
  160. package/dist/i18n/index.cjs.map +1 -1
  161. package/dist/i18n/index.js +1 -1
  162. package/dist/index.cjs +449 -119
  163. package/dist/index.cjs.map +1 -1
  164. package/dist/index.d.cts +3 -0
  165. package/dist/index.d.ts +3 -0
  166. package/dist/index.js +47 -43
  167. package/dist/slot/index.d.cts +2 -2
  168. package/dist/slot/index.d.ts +2 -2
  169. package/package.json +1 -1
  170. package/dist/chunk-6PO2IWB3.js.map +0 -1
  171. package/dist/chunk-76FZF4GM.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Combobox/Combobox.tsx"],"names":[],"mappings":";;;;AAcO,IAAM,QAAA,2BAAyB,KAAA,KAA0B;AAC5D,EAAA,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAO,UAAA,EAAU,IAAA,EAAE,GAAG,KAAA,EAAO,CAAA;AACzC,CAAA,EAFwB,UAAA","file":"chunk-O4NMS3KB.js","sourcesContent":["'use client';\n\nimport { Select, type SelectProps } from '../Select';\n\n/**\n * Combobox — a Select with search defaulted on.\n *\n * Use Combobox for long lists or async options where users benefit from\n * typeahead filtering. Use Select directly for short static lists where\n * clicking is enough.\n *\n * Every prop, behavior, and type is identical to Select; this is purely a\n * default + naming convenience.\n */\nexport const Combobox = <T = unknown>(props: SelectProps<T>) => {\n return <Select searchable {...props} />;\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Combobox/Combobox.tsx"],"names":[],"mappings":";;;;AAcO,IAAM,QAAA,2BAAyB,KAAA,KAA0B;AAC5D,EAAA,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAO,UAAA,EAAU,IAAA,EAAE,GAAG,KAAA,EAAO,CAAA;AACzC,CAAA,EAFwB,UAAA","file":"chunk-JXLEMBDB.js","sourcesContent":["'use client';\n\nimport { Select, type SelectProps } from '../Select';\n\n/**\n * Combobox — a Select with search defaulted on.\n *\n * Use Combobox for long lists or async options where users benefit from\n * typeahead filtering. Use Select directly for short static lists where\n * clicking is enough.\n *\n * Every prop, behavior, and type is identical to Select; this is purely a\n * default + naming convenience.\n */\nexport const Combobox = <T = unknown>(props: SelectProps<T>) => {\n return <Select searchable {...props} />;\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { cn } from './chunk-CHXHRJNZ.js';
2
1
  import { px } from './chunk-5A2QOOVN.js';
2
+ import { cn } from './chunk-CHXHRJNZ.js';
3
3
  import { useThemeColors } from './chunk-R5JMDDCB.js';
4
4
  import { __name } from './chunk-WCQVDF3K.js';
5
5
  import { Text as Text$1 } from 'react-native';
@@ -72,5 +72,5 @@ var Text = /* @__PURE__ */ __name(({ variant = "body-md", className, testID, chi
72
72
  }, "Text");
73
73
 
74
74
  export { Text };
75
- //# sourceMappingURL=chunk-W3HMOOON.js.map
76
- //# sourceMappingURL=chunk-W3HMOOON.js.map
75
+ //# sourceMappingURL=chunk-JZ774T7U.js.map
76
+ //# sourceMappingURL=chunk-JZ774T7U.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Text/Text.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-W3HMOOON.js","sourcesContent":["'use client';\n\nimport type { TextProps as RNTextProps, TextStyle } from 'react-native';\nimport { Text as RNText } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type TextVariant = 'body-xs' | 'body-sm' | 'body-md' | 'body-lg' | 'heading-1' | 'heading-2' | 'heading-3';\n\nexport type TextProps = RNTextProps & {\n variant?: TextVariant;\n className?: string;\n testID?: string;\n};\n\nconst VARIANT_CLASSES: Record<TextVariant, string> = {\n 'body-xs': 'text-xs leading-normal',\n 'body-sm': 'text-sm leading-normal',\n 'body-md': 'text-md leading-normal',\n 'body-lg': 'text-lg leading-relaxed',\n 'heading-1': 'text-4xl leading-tight font-bold',\n 'heading-2': 'text-3xl leading-tight font-semibold',\n 'heading-3': 'text-2xl leading-tight font-semibold',\n};\n\nconst HEADING_VARIANTS: Readonly<Set<TextVariant>> = new Set(['heading-1', 'heading-2', 'heading-3']);\n\n// Per-variant resolution from the active theme. Keys here name the\n// fontSize / fontWeight / lineHeight tokens the variant pulls from. The\n// fontFamily is picked separately (display for headings, body otherwise).\ntype VariantKeys = {\n fontSize: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';\n fontWeight: 'regular' | 'medium' | 'semibold' | 'bold';\n lineHeight: 'tight' | 'normal' | 'relaxed';\n};\nconst VARIANT_KEYS: Record<TextVariant, VariantKeys> = {\n 'body-xs': { fontSize: 'xs', fontWeight: 'regular', lineHeight: 'normal' },\n 'body-sm': { fontSize: 'sm', fontWeight: 'regular', lineHeight: 'normal' },\n 'body-md': { fontSize: 'md', fontWeight: 'regular', lineHeight: 'normal' },\n 'body-lg': { fontSize: 'lg', fontWeight: 'regular', lineHeight: 'relaxed' },\n 'heading-1': { fontSize: '4xl', fontWeight: 'bold', lineHeight: 'tight' },\n 'heading-2': {\n fontSize: '3xl',\n fontWeight: 'semibold',\n lineHeight: 'tight',\n },\n 'heading-3': {\n fontSize: '2xl',\n fontWeight: 'semibold',\n lineHeight: 'tight',\n },\n};\n\n/**\n * Typography primitive. Renders a react-native <Text>; on web via RN-Web\n * it becomes a <div role=\"...\"> with the appropriate className.\n *\n * Inline style is sourced from the active `<NoriProvider theme={...}>`:\n * font family (display for headings, body for body variants), fontSize,\n * fontWeight, lineHeight all flow through. Override the whole variant by\n * passing a custom theme; override a single instance by passing `style`.\n *\n * The `className` path keeps the Tailwind dark-mode color flip — inline\n * style provides the typographic substance, className provides the color.\n */\nexport const Text = ({ variant = 'body-md', className, testID, children, ...rest }: TextProps) => {\n const colors = useThemeColors();\n const isHeading = HEADING_VARIANTS.has(variant);\n const role = isHeading ? 'header' : rest.accessibilityRole;\n\n const keys = VARIANT_KEYS[variant];\n const sizePx = px(colors.fontSize[keys.fontSize]);\n const lhMultiplier = Number(colors.lineHeight[keys.lineHeight]);\n const themedStyle: TextStyle = {\n // Inline color is the ONLY color source. The Tailwind preset uses\n // `darkMode: ['class', '[data-theme=\"dark\"]']` — that requires a\n // DOM, so on native the `dark:` variant never fires and a\n // className-only color path would always emit the LIGHT variant\n // (near-black), invisible on a dark surface. Sourcing color from\n // `useThemeColors()` means it follows the OS scheme AND honors a\n // forced `colorScheme` override on the provider.\n color: colors.semantic.text.default,\n fontFamily: isHeading ? colors.fontFamily.display : colors.fontFamily.body,\n fontSize: sizePx,\n // RN expects lineHeight in px, not unitless. Tokens carry it as a\n // ratio (1.2 / 1.4 / 1.6) — multiply against the variant fontSize.\n lineHeight: sizePx * lhMultiplier,\n // The fontWeight token returns string literals like \"500\" / \"700\"\n // which match RN's TextStyle.fontWeight enum.\n fontWeight: colors.fontWeight[keys.fontWeight] as TextStyle['fontWeight'],\n };\n\n // Caller-provided style wins (last in the array). The themed style is\n // the source of truth, the user's `style` prop the override.\n const styleProp = (rest as { style?: TextStyle | TextStyle[] }).style;\n\n return (\n <RNText\n testID={testID}\n {...rest}\n {...(role !== undefined ? { accessibilityRole: role } : {})}\n className={cn(VARIANT_CLASSES[variant], className)}\n style={[themedStyle, styleProp]}\n >\n {children}\n </RNText>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Text/Text.tsx"],"names":["RNText"],"mappings":"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","file":"chunk-JZ774T7U.js","sourcesContent":["'use client';\n\nimport type { TextProps as RNTextProps, TextStyle } from 'react-native';\nimport { Text as RNText } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type TextVariant = 'body-xs' | 'body-sm' | 'body-md' | 'body-lg' | 'heading-1' | 'heading-2' | 'heading-3';\n\nexport type TextProps = RNTextProps & {\n variant?: TextVariant;\n className?: string;\n testID?: string;\n};\n\nconst VARIANT_CLASSES: Record<TextVariant, string> = {\n 'body-xs': 'text-xs leading-normal',\n 'body-sm': 'text-sm leading-normal',\n 'body-md': 'text-md leading-normal',\n 'body-lg': 'text-lg leading-relaxed',\n 'heading-1': 'text-4xl leading-tight font-bold',\n 'heading-2': 'text-3xl leading-tight font-semibold',\n 'heading-3': 'text-2xl leading-tight font-semibold',\n};\n\nconst HEADING_VARIANTS: Readonly<Set<TextVariant>> = new Set(['heading-1', 'heading-2', 'heading-3']);\n\n// Per-variant resolution from the active theme. Keys here name the\n// fontSize / fontWeight / lineHeight tokens the variant pulls from. The\n// fontFamily is picked separately (display for headings, body otherwise).\ntype VariantKeys = {\n fontSize: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';\n fontWeight: 'regular' | 'medium' | 'semibold' | 'bold';\n lineHeight: 'tight' | 'normal' | 'relaxed';\n};\nconst VARIANT_KEYS: Record<TextVariant, VariantKeys> = {\n 'body-xs': { fontSize: 'xs', fontWeight: 'regular', lineHeight: 'normal' },\n 'body-sm': { fontSize: 'sm', fontWeight: 'regular', lineHeight: 'normal' },\n 'body-md': { fontSize: 'md', fontWeight: 'regular', lineHeight: 'normal' },\n 'body-lg': { fontSize: 'lg', fontWeight: 'regular', lineHeight: 'relaxed' },\n 'heading-1': { fontSize: '4xl', fontWeight: 'bold', lineHeight: 'tight' },\n 'heading-2': {\n fontSize: '3xl',\n fontWeight: 'semibold',\n lineHeight: 'tight',\n },\n 'heading-3': {\n fontSize: '2xl',\n fontWeight: 'semibold',\n lineHeight: 'tight',\n },\n};\n\n/**\n * Typography primitive. Renders a react-native <Text>; on web via RN-Web\n * it becomes a <div role=\"...\"> with the appropriate className.\n *\n * Inline style is sourced from the active `<NoriProvider theme={...}>`:\n * font family (display for headings, body for body variants), fontSize,\n * fontWeight, lineHeight all flow through. Override the whole variant by\n * passing a custom theme; override a single instance by passing `style`.\n *\n * The `className` path keeps the Tailwind dark-mode color flip — inline\n * style provides the typographic substance, className provides the color.\n */\nexport const Text = ({ variant = 'body-md', className, testID, children, ...rest }: TextProps) => {\n const colors = useThemeColors();\n const isHeading = HEADING_VARIANTS.has(variant);\n const role = isHeading ? 'header' : rest.accessibilityRole;\n\n const keys = VARIANT_KEYS[variant];\n const sizePx = px(colors.fontSize[keys.fontSize]);\n const lhMultiplier = Number(colors.lineHeight[keys.lineHeight]);\n const themedStyle: TextStyle = {\n // Inline color is the ONLY color source. The Tailwind preset uses\n // `darkMode: ['class', '[data-theme=\"dark\"]']` — that requires a\n // DOM, so on native the `dark:` variant never fires and a\n // className-only color path would always emit the LIGHT variant\n // (near-black), invisible on a dark surface. Sourcing color from\n // `useThemeColors()` means it follows the OS scheme AND honors a\n // forced `colorScheme` override on the provider.\n color: colors.semantic.text.default,\n fontFamily: isHeading ? colors.fontFamily.display : colors.fontFamily.body,\n fontSize: sizePx,\n // RN expects lineHeight in px, not unitless. Tokens carry it as a\n // ratio (1.2 / 1.4 / 1.6) — multiply against the variant fontSize.\n lineHeight: sizePx * lhMultiplier,\n // The fontWeight token returns string literals like \"500\" / \"700\"\n // which match RN's TextStyle.fontWeight enum.\n fontWeight: colors.fontWeight[keys.fontWeight] as TextStyle['fontWeight'],\n };\n\n // Caller-provided style wins (last in the array). The themed style is\n // the source of truth, the user's `style` prop the override.\n const styleProp = (rest as { style?: TextStyle | TextStyle[] }).style;\n\n return (\n <RNText\n testID={testID}\n {...rest}\n {...(role !== undefined ? { accessibilityRole: role } : {})}\n className={cn(VARIANT_CLASSES[variant], className)}\n style={[themedStyle, styleProp]}\n >\n {children}\n </RNText>\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { cn } from './chunk-CHXHRJNZ.js';
2
1
  import { px } from './chunk-5A2QOOVN.js';
2
+ import { cn } from './chunk-CHXHRJNZ.js';
3
3
  import { useThemeColors } from './chunk-R5JMDDCB.js';
4
4
  import { __name } from './chunk-WCQVDF3K.js';
5
5
  import { createContext, useState, useCallback, useRef, useEffect, useMemo, useContext } from 'react';
@@ -442,5 +442,5 @@ var Toggle = Object.assign(ToggleRoot, {
442
442
  });
443
443
 
444
444
  export { Toggle };
445
- //# sourceMappingURL=chunk-SINLREQV.js.map
446
- //# sourceMappingURL=chunk-SINLREQV.js.map
445
+ //# sourceMappingURL=chunk-MKSDYRWQ.js.map
446
+ //# sourceMappingURL=chunk-MKSDYRWQ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Toggle/Toggle.tsx"],"names":["RNText","current"],"mappings":"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","file":"chunk-SINLREQV.js","sourcesContent":["'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport {\n createContext,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type ToggleVariant = 'default' | 'outline';\nexport type ToggleSize = 'sm' | 'md' | 'lg';\n\ntype SizeTokens = {\n height: number; // component-density literal — not from theme\n paddingHKey: keyof Theme['spacing'];\n fontKey: keyof Theme['fontSize'];\n iconSize: number; // component-density literal — not from theme\n};\n\n// Heights and icon sizes are intentionally hardcoded — they're tightly\n// coupled to the toggle's overall density. PaddingH and fontSize are\n// pulled from the active theme so a custom theme that scales the\n// spacing / fontSize ramps also scales every Toggle on the page.\nconst SIZE_TOKENS: Record<ToggleSize, SizeTokens> = {\n sm: { height: 32, paddingHKey: '2', fontKey: 'sm', iconSize: 14 }, // 8px (closest to legacy 10) / fontSize sm 14\n md: { height: 40, paddingHKey: '3', fontKey: 'sm', iconSize: 16 }, // 12px / fontSize sm 14\n lg: { height: 48, paddingHKey: '4', fontKey: 'md', iconSize: 20 }, // 16px / fontSize md 16\n};\n\n// ---------- standalone <Toggle> -----------------------------------------------\n\nexport type ToggleProps = {\n /** Controlled pressed state. Pair with `onChange`. */\n pressed?: boolean;\n /** Uncontrolled initial pressed state. Ignored when `pressed` is provided. */\n defaultPressed?: boolean;\n /** Fires with the next pressed state when the user toggles. */\n onChange?: (next: boolean) => void;\n /**\n * Visual treatment.\n * - `default` — transparent when off, filled with `interactive.primary` when on.\n * - `outline` — bordered when off, tinted background + accent border when on.\n * @defaultValue 'default'\n */\n variant?: ToggleVariant;\n /** @defaultValue 'md' */\n size?: ToggleSize;\n /** Group-level disable (also forwarded by `<ToggleGroup>` to its items). */\n disabled?: boolean;\n /** Visible label or icon content. */\n children?: ReactNode;\n /** Required when `children` is icon-only. */\n 'aria-label'?: string;\n accessibilityLabel?: string;\n className?: string;\n testID?: string;\n};\n\n/**\n * A two-state button — like the bold / italic buttons in a rich-text\n * toolbar. Use `<Toggle>` standalone for a single bistable action; reach\n * for `<ToggleGroup>` when you need a clustered set with shared selection\n * semantics.\n *\n * Reach for `<Switch>` instead when the control flips a setting in a form\n * (a \"darkmode on/off\" preference). Reach for `<Checkbox>` when the\n * control selects a value inside a form. `<Toggle>` is for buttons that\n * carry an on/off visual.\n */\nconst ToggleRoot = ({\n pressed,\n defaultPressed = false,\n onChange,\n variant = 'default',\n size = 'md',\n disabled = false,\n children,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n className,\n testID,\n}: ToggleProps) => {\n const [inner, setInner] = useState<boolean>(defaultPressed);\n const isControlled = pressed !== undefined;\n const isOn = isControlled ? Boolean(pressed) : inner;\n\n const handlePress = useCallback(() => {\n if (disabled) {\n return;\n }\n const next = !isOn;\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n }, [disabled, isControlled, isOn, onChange]);\n\n return (\n <ToggleVisual\n isOn={isOn}\n disabled={disabled}\n variant={variant}\n size={size}\n onPress={handlePress}\n ariaLabel={ariaLabel ?? accessibilityLabel}\n className={className}\n testID={testID}\n >\n {children}\n </ToggleVisual>\n );\n};\n\n// ---------- shared visual -----------------------------------------------------\n\ntype ToggleVisualProps = {\n isOn: boolean;\n disabled: boolean;\n variant: ToggleVariant;\n size: ToggleSize;\n onPress: () => void;\n onKeyDown?: ((event: KeyboardEvent<HTMLElement>) => void) | undefined;\n onFocus?: (() => void) | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n testID?: string | undefined;\n children?: ReactNode | undefined;\n /**\n * Group-aware roving tabindex. `undefined` means \"the natural tab\n * stop\" (standalone Toggle); inside a group, a number is supplied.\n */\n tabIndex?: number | undefined;\n /** Border-radius override for grouped items (square middle, rounded ends). */\n borderRadius?: number | { topLeft: number; topRight: number; bottomLeft: number; bottomRight: number } | undefined;\n /** Suppress the right border so adjacent items share a single seam. */\n suppressRightBorder?: boolean | undefined;\n /** Force the bordered look (used by grouped `default` items so the row reads as one chip). */\n forceBorder?: boolean | undefined;\n refCallback?: ((node: HTMLElement | null) => void) | undefined;\n};\n\nconst ToggleVisual = ({\n isOn,\n disabled,\n variant,\n size,\n onPress,\n onKeyDown,\n onFocus,\n ariaLabel,\n className,\n testID,\n children,\n tabIndex,\n borderRadius,\n suppressRightBorder,\n forceBorder,\n refCallback,\n}: ToggleVisualProps) => {\n const colors = useThemeColors();\n const tokens = SIZE_TOKENS[size];\n const paddingH = px(colors.spacing[tokens.paddingHKey]);\n const fontSize = px(colors.fontSize[tokens.fontKey]);\n\n const radiusEach = borderRadius && typeof borderRadius !== 'number' ? borderRadius : undefined;\n const radiusValue = typeof borderRadius === 'number' ? borderRadius : radiusEach ? undefined : px(colors.radius.md);\n\n const baseStyle: ViewStyle = {\n height: tokens.height,\n paddingHorizontal: paddingH,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: px(colors.spacing['2']) - 2, // closest theme-rooted approximation of legacy 6\n ...(radiusValue !== undefined ? { borderRadius: radiusValue } : null),\n ...(radiusEach\n ? {\n borderTopLeftRadius: radiusEach.topLeft,\n borderTopRightRadius: radiusEach.topRight,\n borderBottomLeftRadius: radiusEach.bottomLeft,\n borderBottomRightRadius: radiusEach.bottomRight,\n }\n : null),\n // 200ms color/background transition. Web only; native ignores it.\n ...({\n transitionProperty: 'background-color, border-color, color',\n transitionDuration: '200ms',\n transitionTimingFunction: 'ease',\n } as ViewStyle),\n };\n\n const surfaceFor = (hovered: boolean): ViewStyle => {\n if (variant === 'outline' || forceBorder) {\n return {\n backgroundColor: isOn\n ? variant === 'outline'\n ? colors.semantic.background.subtle\n : colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.background.subtle\n : 'transparent',\n borderWidth: 1,\n borderColor: isOn ? colors.semantic.interactive.primary : colors.semantic.border.default,\n ...(suppressRightBorder ? { borderRightWidth: 0 } : null),\n };\n }\n // Default variant, standalone — give the off state a subtle\n // resting bg + 1px border so the control reads as a button. The\n // earlier \"transparent off\" look only made sense inside a group\n // where the cluster's shared seams told the eye \"this is a row of\n // buttons\"; standalone it just looked like text.\n return {\n backgroundColor: isOn\n ? colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.background.subtle\n : colors.semantic.background.elevated,\n borderWidth: 1,\n borderColor: isOn ? colors.semantic.interactive.primary : colors.semantic.border.default,\n };\n };\n\n // Text color: inverted on the filled-on surface, accent-colored on the\n // outline-on surface, default text otherwise.\n const textColor =\n variant === 'outline'\n ? isOn\n ? colors.semantic.interactive.primary\n : colors.semantic.text.default\n : isOn\n ? colors.semantic.text.inverted\n : colors.semantic.text.default;\n\n const accessibilityProps: Record<string, unknown> = {\n role: 'button',\n accessibilityRole: 'button',\n 'aria-pressed': isOn,\n accessibilityState: { selected: isOn, disabled },\n ...(ariaLabel ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {}),\n ...(disabled ? { 'aria-disabled': true } : {}),\n ...(testID !== undefined ? { testID } : {}),\n ...(tabIndex !== undefined ? { tabIndex } : {}),\n ...(onKeyDown ? { onKeyDown } : {}),\n ...(onFocus ? { onFocus } : {}),\n };\n\n // RN-Web's Pressable on web doesn't reliably invoke the style callback\n // (the hovered/pressed state isn't always wired through to a re-render\n // — at least in the version we ship against). Compute the static style\n // upfront with `hovered=false` and overlay a `:hover` color via CSS\n // class for the off-state hover. Active-state hover is for outline\n // variant only and doesn't change the look enough to justify the\n // complexity of a style-callback path here.\n const surfaceStatic = surfaceFor(false);\n\n return (\n <Pressable\n ref={(node: unknown) => {\n refCallback?.(node as HTMLElement | null);\n }}\n disabled={disabled}\n onPress={() => {\n if (!disabled) {\n onPress();\n }\n }}\n {...accessibilityProps}\n className={cn(\n 'inline-flex flex-row items-center justify-center select-none',\n disabled ? 'opacity-50' : undefined,\n className\n )}\n style={[baseStyle, surfaceStatic, disabled ? { opacity: 0.5 } : null]}\n >\n {/* Always wrap children in an RNText so the dynamic\n * `textColor` (inverted on the on-state surface, default\n * otherwise) reaches both string children and arbitrary\n * inline elements (B/I/U spans, lucide icons, etc.) via\n * CSS color inheritance. Without this wrapper, non-string\n * children render with their parent's color regardless of\n * selected state — so an italic \"I\" stays dark on the\n * dark filled-on background and disappears.\n */}\n <RNText\n style={{\n color: textColor,\n fontFamily: colors.fontFamily.body,\n fontSize,\n fontWeight: colors.fontWeight.medium as '500',\n }}\n >\n {children}\n </RNText>\n </Pressable>\n );\n};\n\n// ---------- <ToggleGroup> + context ------------------------------------------\n\ntype ToggleGroupContextValue = {\n type: 'single' | 'multiple';\n setValue: (value: string) => void;\n isPressed: (value: string) => boolean;\n disabled: boolean;\n variant: ToggleVariant;\n size: ToggleSize;\n register: (value: string, ref: RefObject<HTMLElement | null>) => void;\n unregister: (value: string) => void;\n rovingValue: string | undefined;\n setRovingValue: (next: string) => void;\n moveBy: (delta: 1 | -1, current: string) => void;\n moveTo: (position: 'first' | 'last') => void;\n /** Live ordered list of registered item values — drives border math. */\n order: string[];\n};\n\nconst ToggleGroupContext = createContext<ToggleGroupContextValue | null>(null);\n\nconst useToggleGroupContext = () => {\n const ctx = useContext(ToggleGroupContext);\n if (!ctx) {\n throw new Error('<ToggleGroupItem> must be rendered inside a <ToggleGroup>.');\n }\n return ctx;\n};\n\ntype ToggleGroupCommonProps = {\n /** Group-level disable. Each item's `disabled` is OR-ed with this. */\n disabled?: boolean;\n /** @defaultValue 'default' */\n variant?: ToggleVariant;\n /** @defaultValue 'md' */\n size?: ToggleSize;\n children?: ReactNode;\n className?: string;\n testID?: string;\n 'aria-label'?: string;\n accessibilityLabel?: string;\n};\n\nexport type ToggleGroupSingleProps = ToggleGroupCommonProps & {\n /** Multi-select gives an array; single-select gives a string (or undefined). */\n type: 'single';\n // `| undefined` is intentional under exactOptionalPropertyTypes — clicking\n // the active item clears the selection, so consumers MUST be allowed to\n // pass `undefined` as the controlled value, not just omit the prop.\n value?: string | undefined;\n defaultValue?: string | undefined;\n onChange?: (next: string | undefined) => void;\n};\n\nexport type ToggleGroupMultipleProps = ToggleGroupCommonProps & {\n type: 'multiple';\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onChange?: (next: string[]) => void;\n};\n\nexport type ToggleGroupProps = ToggleGroupSingleProps | ToggleGroupMultipleProps;\n\n/**\n * Cluster of `<ToggleGroupItem>`s with shared selection semantics.\n *\n * - `type=\"multiple\"` — value is `string[]`. Clicking toggles a value\n * in/out of the array. ARIA exposes a plain `role=\"group\"`.\n * - `type=\"single\"` — value is `string | undefined`. Clicking sets it;\n * re-clicking the active one clears it. ARIA exposes `role=\"radiogroup\"`\n * so AT users hear \"1 of N selected\" semantics.\n *\n * Keyboard: `ArrowRight` / `ArrowLeft` move focus between items (roving\n * tabindex), `Home` / `End` jump to the ends, and `Space` / `Enter`\n * toggle the focused item.\n */\nexport const ToggleGroup = (props: ToggleGroupProps) => {\n const {\n type,\n disabled = false,\n variant = 'default',\n size = 'md',\n children,\n className,\n testID,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n } = props;\n\n // Controlled / uncontrolled state, branching on `type`.\n const [innerSingle, setInnerSingle] = useState<string | undefined>(\n type === 'single' ? (props as ToggleGroupSingleProps).defaultValue : undefined\n );\n const [innerMultiple, setInnerMultiple] = useState<string[]>(\n type === 'multiple' ? ((props as ToggleGroupMultipleProps).defaultValue ?? []) : []\n );\n\n const isSingle = type === 'single';\n const isControlled = isSingle\n ? (props as ToggleGroupSingleProps).value !== undefined\n : (props as ToggleGroupMultipleProps).value !== undefined;\n\n const setValue = useCallback(\n (next: string) => {\n if (disabled) {\n return;\n }\n if (isSingle) {\n const current = isControlled ? (props as ToggleGroupSingleProps).value : innerSingle;\n const updated = current === next ? undefined : next;\n if (!isControlled) {\n setInnerSingle(updated);\n }\n (props as ToggleGroupSingleProps).onChange?.(updated);\n } else {\n const current: string[] =\n (isControlled ? (props as ToggleGroupMultipleProps).value : innerMultiple) ?? [];\n const updated = current.includes(next) ? current.filter((v) => v !== next) : [...current, next];\n if (!isControlled) {\n setInnerMultiple(updated);\n }\n (props as ToggleGroupMultipleProps).onChange?.(updated);\n }\n },\n [disabled, isSingle, isControlled, innerSingle, innerMultiple, props]\n );\n\n const isPressed = useCallback(\n (v: string) => {\n if (isSingle) {\n const current = isControlled ? (props as ToggleGroupSingleProps).value : innerSingle;\n return current === v;\n }\n const current = (isControlled ? (props as ToggleGroupMultipleProps).value : innerMultiple) ?? [];\n return current.includes(v);\n },\n [isSingle, isControlled, innerSingle, innerMultiple, props]\n );\n\n // --- roving tabindex order management ---\n const refs = useRef<Map<string, RefObject<HTMLElement | null>>>(new Map());\n // Live ordered list — re-render the group whenever items register so\n // border math (first/last) and roving init see the current order.\n const [order, setOrder] = useState<string[]>([]);\n const [rovingValue, setRovingValueState] = useState<string | undefined>(undefined);\n\n const register = useCallback((v: string, ref: RefObject<HTMLElement | null>) => {\n refs.current.set(v, ref);\n setOrder((prev) => (prev.includes(v) ? prev : [...prev, v]));\n setRovingValueState((current) => current ?? v);\n }, []);\n\n const unregister = useCallback((v: string) => {\n refs.current.delete(v);\n setOrder((prev) => prev.filter((x) => x !== v));\n setRovingValueState((current) => (current === v ? undefined : current));\n }, []);\n\n const focusValue = useCallback((v: string) => {\n refs.current.get(v)?.current?.focus?.();\n }, []);\n\n const setRovingValue = useCallback((v: string) => setRovingValueState(v), []);\n\n const moveBy = useCallback(\n (delta: 1 | -1, current: string) => {\n const list = order;\n if (list.length === 0) {\n return;\n }\n const idx = list.indexOf(current);\n const start = idx === -1 ? 0 : idx;\n const next = list[(start + delta + list.length) % list.length];\n if (!next) {\n return;\n }\n setRovingValueState(next);\n focusValue(next);\n },\n [order, focusValue]\n );\n\n const moveTo = useCallback(\n (position: 'first' | 'last') => {\n const list = order;\n if (list.length === 0) {\n return;\n }\n const next = position === 'first' ? list[0] : list[list.length - 1];\n if (!next) {\n return;\n }\n setRovingValueState(next);\n focusValue(next);\n },\n [order, focusValue]\n );\n\n const ctxValue = useMemo<ToggleGroupContextValue>(\n () => ({\n type,\n setValue,\n isPressed,\n disabled,\n variant,\n size,\n register,\n unregister,\n rovingValue,\n setRovingValue,\n moveBy,\n moveTo,\n order,\n }),\n [\n type,\n setValue,\n isPressed,\n disabled,\n variant,\n size,\n register,\n unregister,\n rovingValue,\n setRovingValue,\n moveBy,\n moveTo,\n order,\n ]\n );\n\n const groupRole = isSingle ? 'radiogroup' : 'group';\n const label = ariaLabel ?? accessibilityLabel;\n\n const groupProps: Record<string, unknown> = {\n role: groupRole,\n accessibilityRole: groupRole,\n ...(label ? { 'aria-label': label, accessibilityLabel: label } : {}),\n ...(disabled ? { 'aria-disabled': true } : {}),\n ...(testID !== undefined ? { testID } : {}),\n };\n\n // For the `default` variant we render items zero-gap so they share\n // borders, like a UISegmentedControl. For `outline` we keep a small\n // gap so the bordered cells don't double up their seams.\n const colors = useThemeColors();\n const containerStyle: ViewStyle =\n variant === 'default'\n ? { flexDirection: 'row', alignItems: 'stretch', gap: 0 }\n : { flexDirection: 'row', alignItems: 'stretch', gap: px(colors.spacing['1']) };\n\n return (\n <ToggleGroupContext.Provider value={ctxValue}>\n <View\n {...groupProps}\n className={cn(\n 'inline-flex flex-row items-stretch',\n variant === 'default' ? 'gap-0' : 'gap-1',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={[containerStyle, disabled ? { opacity: 0.6 } : null]}\n >\n {children}\n </View>\n </ToggleGroupContext.Provider>\n );\n};\n\nexport type ToggleGroupItemProps = {\n /** Unique identifier within the group — written into `value` when pressed. */\n value: string;\n /** Disable just this item (OR-ed with group-level `disabled`). */\n disabled?: boolean;\n children?: ReactNode;\n 'aria-label'?: string;\n accessibilityLabel?: string;\n className?: string;\n testID?: string;\n};\n\n/**\n * One toggle inside a `<ToggleGroup>`. Throws with a clear message when\n * rendered outside of one.\n */\nexport const ToggleGroupItem = ({\n value,\n disabled,\n children,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n className,\n testID,\n}: ToggleGroupItemProps) => {\n const ctx = useToggleGroupContext();\n const ownRef = useRef<HTMLElement | null>(null);\n // Capture register/unregister in a ref so the effect's deps stay\n // value-only — otherwise a new context object on every render (driven\n // by setOrder inside register) would re-fire the effect → setState\n // loop → \"Maximum update depth exceeded\".\n const registryRef = useRef({ register: ctx.register, unregister: ctx.unregister });\n registryRef.current = { register: ctx.register, unregister: ctx.unregister };\n\n useEffect(() => {\n // Read-through holder so the registered ref always sees the latest node.\n const holder: RefObject<HTMLElement | null> = {\n get current() {\n return ownRef.current;\n },\n set current(_v) {\n /* no-op — read-through to ownRef */\n },\n } as unknown as RefObject<HTMLElement | null>;\n registryRef.current.register(value, holder);\n return () => registryRef.current.unregister(value);\n }, [value]);\n\n const isOn = ctx.isPressed(value);\n const isDisabled = disabled || ctx.disabled;\n const isRoving = ctx.rovingValue === value;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown': {\n event.preventDefault();\n ctx.moveBy(1, value);\n return;\n }\n case 'ArrowLeft':\n case 'ArrowUp': {\n event.preventDefault();\n ctx.moveBy(-1, value);\n return;\n }\n case 'Home': {\n event.preventDefault();\n ctx.moveTo('first');\n return;\n }\n case 'End': {\n event.preventDefault();\n ctx.moveTo('last');\n return;\n }\n case ' ':\n case 'Enter': {\n event.preventDefault();\n if (!isDisabled) {\n ctx.setValue(value);\n }\n return;\n }\n }\n },\n [ctx, isDisabled, value]\n );\n\n const handleFocus = useCallback(() => {\n ctx.setRovingValue(value);\n }, [ctx, value]);\n\n // Items inside a `default`-variant group share borders: only the first\n // rounds the left, the last rounds the right; everything else is square.\n const colors = useThemeColors();\n const idx = ctx.order.indexOf(value);\n const isFirst = idx === 0;\n const isLast = idx === ctx.order.length - 1;\n const sharedRadius = px(colors.radius.md);\n const isClustered = ctx.order.length > 1;\n const borderRadius = isClustered\n ? {\n topLeft: isFirst ? sharedRadius : 0,\n bottomLeft: isFirst ? sharedRadius : 0,\n topRight: isLast ? sharedRadius : 0,\n bottomRight: isLast ? sharedRadius : 0,\n }\n : sharedRadius;\n\n return (\n <ToggleVisual\n isOn={isOn}\n disabled={Boolean(isDisabled)}\n variant={ctx.variant}\n size={ctx.size}\n onPress={() => ctx.setValue(value)}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n ariaLabel={ariaLabel ?? accessibilityLabel}\n className={className}\n testID={testID}\n tabIndex={isRoving ? 0 : -1}\n borderRadius={borderRadius}\n forceBorder={ctx.variant === 'default' && isClustered}\n suppressRightBorder={isClustered && !isLast}\n refCallback={(node) => {\n ownRef.current = node;\n }}\n >\n {children}\n </ToggleVisual>\n );\n};\n\n/**\n * Public `Toggle` value — the standalone toggle plus its `.Group` and `.Item`\n * static members. Use `<Toggle.Group>` to wrap a list of `<Toggle.Item>`s.\n *\n * `Object.assign` produces a value whose inferred type carries the static\n * properties, so `.d.ts` consumers can write `<Toggle.Group>` without a\n * separate import.\n */\nexport const Toggle = Object.assign(ToggleRoot, {\n Group: ToggleGroup,\n Item: ToggleGroupItem,\n});\n"]}
1
+ {"version":3,"sources":["../src/components/Toggle/Toggle.tsx"],"names":["RNText","current"],"mappings":"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","file":"chunk-MKSDYRWQ.js","sourcesContent":["'use client';\n\nimport type { Theme } from '@nori-ui/tokens';\nimport {\n createContext,\n type KeyboardEvent,\n type ReactNode,\n type RefObject,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type ToggleVariant = 'default' | 'outline';\nexport type ToggleSize = 'sm' | 'md' | 'lg';\n\ntype SizeTokens = {\n height: number; // component-density literal — not from theme\n paddingHKey: keyof Theme['spacing'];\n fontKey: keyof Theme['fontSize'];\n iconSize: number; // component-density literal — not from theme\n};\n\n// Heights and icon sizes are intentionally hardcoded — they're tightly\n// coupled to the toggle's overall density. PaddingH and fontSize are\n// pulled from the active theme so a custom theme that scales the\n// spacing / fontSize ramps also scales every Toggle on the page.\nconst SIZE_TOKENS: Record<ToggleSize, SizeTokens> = {\n sm: { height: 32, paddingHKey: '2', fontKey: 'sm', iconSize: 14 }, // 8px (closest to legacy 10) / fontSize sm 14\n md: { height: 40, paddingHKey: '3', fontKey: 'sm', iconSize: 16 }, // 12px / fontSize sm 14\n lg: { height: 48, paddingHKey: '4', fontKey: 'md', iconSize: 20 }, // 16px / fontSize md 16\n};\n\n// ---------- standalone <Toggle> -----------------------------------------------\n\nexport type ToggleProps = {\n /** Controlled pressed state. Pair with `onChange`. */\n pressed?: boolean;\n /** Uncontrolled initial pressed state. Ignored when `pressed` is provided. */\n defaultPressed?: boolean;\n /** Fires with the next pressed state when the user toggles. */\n onChange?: (next: boolean) => void;\n /**\n * Visual treatment.\n * - `default` — transparent when off, filled with `interactive.primary` when on.\n * - `outline` — bordered when off, tinted background + accent border when on.\n * @defaultValue 'default'\n */\n variant?: ToggleVariant;\n /** @defaultValue 'md' */\n size?: ToggleSize;\n /** Group-level disable (also forwarded by `<ToggleGroup>` to its items). */\n disabled?: boolean;\n /** Visible label or icon content. */\n children?: ReactNode;\n /** Required when `children` is icon-only. */\n 'aria-label'?: string;\n accessibilityLabel?: string;\n className?: string;\n testID?: string;\n};\n\n/**\n * A two-state button — like the bold / italic buttons in a rich-text\n * toolbar. Use `<Toggle>` standalone for a single bistable action; reach\n * for `<ToggleGroup>` when you need a clustered set with shared selection\n * semantics.\n *\n * Reach for `<Switch>` instead when the control flips a setting in a form\n * (a \"darkmode on/off\" preference). Reach for `<Checkbox>` when the\n * control selects a value inside a form. `<Toggle>` is for buttons that\n * carry an on/off visual.\n */\nconst ToggleRoot = ({\n pressed,\n defaultPressed = false,\n onChange,\n variant = 'default',\n size = 'md',\n disabled = false,\n children,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n className,\n testID,\n}: ToggleProps) => {\n const [inner, setInner] = useState<boolean>(defaultPressed);\n const isControlled = pressed !== undefined;\n const isOn = isControlled ? Boolean(pressed) : inner;\n\n const handlePress = useCallback(() => {\n if (disabled) {\n return;\n }\n const next = !isOn;\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n }, [disabled, isControlled, isOn, onChange]);\n\n return (\n <ToggleVisual\n isOn={isOn}\n disabled={disabled}\n variant={variant}\n size={size}\n onPress={handlePress}\n ariaLabel={ariaLabel ?? accessibilityLabel}\n className={className}\n testID={testID}\n >\n {children}\n </ToggleVisual>\n );\n};\n\n// ---------- shared visual -----------------------------------------------------\n\ntype ToggleVisualProps = {\n isOn: boolean;\n disabled: boolean;\n variant: ToggleVariant;\n size: ToggleSize;\n onPress: () => void;\n onKeyDown?: ((event: KeyboardEvent<HTMLElement>) => void) | undefined;\n onFocus?: (() => void) | undefined;\n ariaLabel?: string | undefined;\n className?: string | undefined;\n testID?: string | undefined;\n children?: ReactNode | undefined;\n /**\n * Group-aware roving tabindex. `undefined` means \"the natural tab\n * stop\" (standalone Toggle); inside a group, a number is supplied.\n */\n tabIndex?: number | undefined;\n /** Border-radius override for grouped items (square middle, rounded ends). */\n borderRadius?: number | { topLeft: number; topRight: number; bottomLeft: number; bottomRight: number } | undefined;\n /** Suppress the right border so adjacent items share a single seam. */\n suppressRightBorder?: boolean | undefined;\n /** Force the bordered look (used by grouped `default` items so the row reads as one chip). */\n forceBorder?: boolean | undefined;\n refCallback?: ((node: HTMLElement | null) => void) | undefined;\n};\n\nconst ToggleVisual = ({\n isOn,\n disabled,\n variant,\n size,\n onPress,\n onKeyDown,\n onFocus,\n ariaLabel,\n className,\n testID,\n children,\n tabIndex,\n borderRadius,\n suppressRightBorder,\n forceBorder,\n refCallback,\n}: ToggleVisualProps) => {\n const colors = useThemeColors();\n const tokens = SIZE_TOKENS[size];\n const paddingH = px(colors.spacing[tokens.paddingHKey]);\n const fontSize = px(colors.fontSize[tokens.fontKey]);\n\n const radiusEach = borderRadius && typeof borderRadius !== 'number' ? borderRadius : undefined;\n const radiusValue = typeof borderRadius === 'number' ? borderRadius : radiusEach ? undefined : px(colors.radius.md);\n\n const baseStyle: ViewStyle = {\n height: tokens.height,\n paddingHorizontal: paddingH,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: px(colors.spacing['2']) - 2, // closest theme-rooted approximation of legacy 6\n ...(radiusValue !== undefined ? { borderRadius: radiusValue } : null),\n ...(radiusEach\n ? {\n borderTopLeftRadius: radiusEach.topLeft,\n borderTopRightRadius: radiusEach.topRight,\n borderBottomLeftRadius: radiusEach.bottomLeft,\n borderBottomRightRadius: radiusEach.bottomRight,\n }\n : null),\n // 200ms color/background transition. Web only; native ignores it.\n ...({\n transitionProperty: 'background-color, border-color, color',\n transitionDuration: '200ms',\n transitionTimingFunction: 'ease',\n } as ViewStyle),\n };\n\n const surfaceFor = (hovered: boolean): ViewStyle => {\n if (variant === 'outline' || forceBorder) {\n return {\n backgroundColor: isOn\n ? variant === 'outline'\n ? colors.semantic.background.subtle\n : colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.background.subtle\n : 'transparent',\n borderWidth: 1,\n borderColor: isOn ? colors.semantic.interactive.primary : colors.semantic.border.default,\n ...(suppressRightBorder ? { borderRightWidth: 0 } : null),\n };\n }\n // Default variant, standalone — give the off state a subtle\n // resting bg + 1px border so the control reads as a button. The\n // earlier \"transparent off\" look only made sense inside a group\n // where the cluster's shared seams told the eye \"this is a row of\n // buttons\"; standalone it just looked like text.\n return {\n backgroundColor: isOn\n ? colors.semantic.interactive.primary\n : hovered\n ? colors.semantic.background.subtle\n : colors.semantic.background.elevated,\n borderWidth: 1,\n borderColor: isOn ? colors.semantic.interactive.primary : colors.semantic.border.default,\n };\n };\n\n // Text color: inverted on the filled-on surface, accent-colored on the\n // outline-on surface, default text otherwise.\n const textColor =\n variant === 'outline'\n ? isOn\n ? colors.semantic.interactive.primary\n : colors.semantic.text.default\n : isOn\n ? colors.semantic.text.inverted\n : colors.semantic.text.default;\n\n const accessibilityProps: Record<string, unknown> = {\n role: 'button',\n accessibilityRole: 'button',\n 'aria-pressed': isOn,\n accessibilityState: { selected: isOn, disabled },\n ...(ariaLabel ? { 'aria-label': ariaLabel, accessibilityLabel: ariaLabel } : {}),\n ...(disabled ? { 'aria-disabled': true } : {}),\n ...(testID !== undefined ? { testID } : {}),\n ...(tabIndex !== undefined ? { tabIndex } : {}),\n ...(onKeyDown ? { onKeyDown } : {}),\n ...(onFocus ? { onFocus } : {}),\n };\n\n // RN-Web's Pressable on web doesn't reliably invoke the style callback\n // (the hovered/pressed state isn't always wired through to a re-render\n // — at least in the version we ship against). Compute the static style\n // upfront with `hovered=false` and overlay a `:hover` color via CSS\n // class for the off-state hover. Active-state hover is for outline\n // variant only and doesn't change the look enough to justify the\n // complexity of a style-callback path here.\n const surfaceStatic = surfaceFor(false);\n\n return (\n <Pressable\n ref={(node: unknown) => {\n refCallback?.(node as HTMLElement | null);\n }}\n disabled={disabled}\n onPress={() => {\n if (!disabled) {\n onPress();\n }\n }}\n {...accessibilityProps}\n className={cn(\n 'inline-flex flex-row items-center justify-center select-none',\n disabled ? 'opacity-50' : undefined,\n className\n )}\n style={[baseStyle, surfaceStatic, disabled ? { opacity: 0.5 } : null]}\n >\n {/* Always wrap children in an RNText so the dynamic\n * `textColor` (inverted on the on-state surface, default\n * otherwise) reaches both string children and arbitrary\n * inline elements (B/I/U spans, lucide icons, etc.) via\n * CSS color inheritance. Without this wrapper, non-string\n * children render with their parent's color regardless of\n * selected state — so an italic \"I\" stays dark on the\n * dark filled-on background and disappears.\n */}\n <RNText\n style={{\n color: textColor,\n fontFamily: colors.fontFamily.body,\n fontSize,\n fontWeight: colors.fontWeight.medium as '500',\n }}\n >\n {children}\n </RNText>\n </Pressable>\n );\n};\n\n// ---------- <ToggleGroup> + context ------------------------------------------\n\ntype ToggleGroupContextValue = {\n type: 'single' | 'multiple';\n setValue: (value: string) => void;\n isPressed: (value: string) => boolean;\n disabled: boolean;\n variant: ToggleVariant;\n size: ToggleSize;\n register: (value: string, ref: RefObject<HTMLElement | null>) => void;\n unregister: (value: string) => void;\n rovingValue: string | undefined;\n setRovingValue: (next: string) => void;\n moveBy: (delta: 1 | -1, current: string) => void;\n moveTo: (position: 'first' | 'last') => void;\n /** Live ordered list of registered item values — drives border math. */\n order: string[];\n};\n\nconst ToggleGroupContext = createContext<ToggleGroupContextValue | null>(null);\n\nconst useToggleGroupContext = () => {\n const ctx = useContext(ToggleGroupContext);\n if (!ctx) {\n throw new Error('<ToggleGroupItem> must be rendered inside a <ToggleGroup>.');\n }\n return ctx;\n};\n\ntype ToggleGroupCommonProps = {\n /** Group-level disable. Each item's `disabled` is OR-ed with this. */\n disabled?: boolean;\n /** @defaultValue 'default' */\n variant?: ToggleVariant;\n /** @defaultValue 'md' */\n size?: ToggleSize;\n children?: ReactNode;\n className?: string;\n testID?: string;\n 'aria-label'?: string;\n accessibilityLabel?: string;\n};\n\nexport type ToggleGroupSingleProps = ToggleGroupCommonProps & {\n /** Multi-select gives an array; single-select gives a string (or undefined). */\n type: 'single';\n // `| undefined` is intentional under exactOptionalPropertyTypes — clicking\n // the active item clears the selection, so consumers MUST be allowed to\n // pass `undefined` as the controlled value, not just omit the prop.\n value?: string | undefined;\n defaultValue?: string | undefined;\n onChange?: (next: string | undefined) => void;\n};\n\nexport type ToggleGroupMultipleProps = ToggleGroupCommonProps & {\n type: 'multiple';\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onChange?: (next: string[]) => void;\n};\n\nexport type ToggleGroupProps = ToggleGroupSingleProps | ToggleGroupMultipleProps;\n\n/**\n * Cluster of `<ToggleGroupItem>`s with shared selection semantics.\n *\n * - `type=\"multiple\"` — value is `string[]`. Clicking toggles a value\n * in/out of the array. ARIA exposes a plain `role=\"group\"`.\n * - `type=\"single\"` — value is `string | undefined`. Clicking sets it;\n * re-clicking the active one clears it. ARIA exposes `role=\"radiogroup\"`\n * so AT users hear \"1 of N selected\" semantics.\n *\n * Keyboard: `ArrowRight` / `ArrowLeft` move focus between items (roving\n * tabindex), `Home` / `End` jump to the ends, and `Space` / `Enter`\n * toggle the focused item.\n */\nexport const ToggleGroup = (props: ToggleGroupProps) => {\n const {\n type,\n disabled = false,\n variant = 'default',\n size = 'md',\n children,\n className,\n testID,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n } = props;\n\n // Controlled / uncontrolled state, branching on `type`.\n const [innerSingle, setInnerSingle] = useState<string | undefined>(\n type === 'single' ? (props as ToggleGroupSingleProps).defaultValue : undefined\n );\n const [innerMultiple, setInnerMultiple] = useState<string[]>(\n type === 'multiple' ? ((props as ToggleGroupMultipleProps).defaultValue ?? []) : []\n );\n\n const isSingle = type === 'single';\n const isControlled = isSingle\n ? (props as ToggleGroupSingleProps).value !== undefined\n : (props as ToggleGroupMultipleProps).value !== undefined;\n\n const setValue = useCallback(\n (next: string) => {\n if (disabled) {\n return;\n }\n if (isSingle) {\n const current = isControlled ? (props as ToggleGroupSingleProps).value : innerSingle;\n const updated = current === next ? undefined : next;\n if (!isControlled) {\n setInnerSingle(updated);\n }\n (props as ToggleGroupSingleProps).onChange?.(updated);\n } else {\n const current: string[] =\n (isControlled ? (props as ToggleGroupMultipleProps).value : innerMultiple) ?? [];\n const updated = current.includes(next) ? current.filter((v) => v !== next) : [...current, next];\n if (!isControlled) {\n setInnerMultiple(updated);\n }\n (props as ToggleGroupMultipleProps).onChange?.(updated);\n }\n },\n [disabled, isSingle, isControlled, innerSingle, innerMultiple, props]\n );\n\n const isPressed = useCallback(\n (v: string) => {\n if (isSingle) {\n const current = isControlled ? (props as ToggleGroupSingleProps).value : innerSingle;\n return current === v;\n }\n const current = (isControlled ? (props as ToggleGroupMultipleProps).value : innerMultiple) ?? [];\n return current.includes(v);\n },\n [isSingle, isControlled, innerSingle, innerMultiple, props]\n );\n\n // --- roving tabindex order management ---\n const refs = useRef<Map<string, RefObject<HTMLElement | null>>>(new Map());\n // Live ordered list — re-render the group whenever items register so\n // border math (first/last) and roving init see the current order.\n const [order, setOrder] = useState<string[]>([]);\n const [rovingValue, setRovingValueState] = useState<string | undefined>(undefined);\n\n const register = useCallback((v: string, ref: RefObject<HTMLElement | null>) => {\n refs.current.set(v, ref);\n setOrder((prev) => (prev.includes(v) ? prev : [...prev, v]));\n setRovingValueState((current) => current ?? v);\n }, []);\n\n const unregister = useCallback((v: string) => {\n refs.current.delete(v);\n setOrder((prev) => prev.filter((x) => x !== v));\n setRovingValueState((current) => (current === v ? undefined : current));\n }, []);\n\n const focusValue = useCallback((v: string) => {\n refs.current.get(v)?.current?.focus?.();\n }, []);\n\n const setRovingValue = useCallback((v: string) => setRovingValueState(v), []);\n\n const moveBy = useCallback(\n (delta: 1 | -1, current: string) => {\n const list = order;\n if (list.length === 0) {\n return;\n }\n const idx = list.indexOf(current);\n const start = idx === -1 ? 0 : idx;\n const next = list[(start + delta + list.length) % list.length];\n if (!next) {\n return;\n }\n setRovingValueState(next);\n focusValue(next);\n },\n [order, focusValue]\n );\n\n const moveTo = useCallback(\n (position: 'first' | 'last') => {\n const list = order;\n if (list.length === 0) {\n return;\n }\n const next = position === 'first' ? list[0] : list[list.length - 1];\n if (!next) {\n return;\n }\n setRovingValueState(next);\n focusValue(next);\n },\n [order, focusValue]\n );\n\n const ctxValue = useMemo<ToggleGroupContextValue>(\n () => ({\n type,\n setValue,\n isPressed,\n disabled,\n variant,\n size,\n register,\n unregister,\n rovingValue,\n setRovingValue,\n moveBy,\n moveTo,\n order,\n }),\n [\n type,\n setValue,\n isPressed,\n disabled,\n variant,\n size,\n register,\n unregister,\n rovingValue,\n setRovingValue,\n moveBy,\n moveTo,\n order,\n ]\n );\n\n const groupRole = isSingle ? 'radiogroup' : 'group';\n const label = ariaLabel ?? accessibilityLabel;\n\n const groupProps: Record<string, unknown> = {\n role: groupRole,\n accessibilityRole: groupRole,\n ...(label ? { 'aria-label': label, accessibilityLabel: label } : {}),\n ...(disabled ? { 'aria-disabled': true } : {}),\n ...(testID !== undefined ? { testID } : {}),\n };\n\n // For the `default` variant we render items zero-gap so they share\n // borders, like a UISegmentedControl. For `outline` we keep a small\n // gap so the bordered cells don't double up their seams.\n const colors = useThemeColors();\n const containerStyle: ViewStyle =\n variant === 'default'\n ? { flexDirection: 'row', alignItems: 'stretch', gap: 0 }\n : { flexDirection: 'row', alignItems: 'stretch', gap: px(colors.spacing['1']) };\n\n return (\n <ToggleGroupContext.Provider value={ctxValue}>\n <View\n {...groupProps}\n className={cn(\n 'inline-flex flex-row items-stretch',\n variant === 'default' ? 'gap-0' : 'gap-1',\n disabled ? 'opacity-60' : undefined,\n className\n )}\n style={[containerStyle, disabled ? { opacity: 0.6 } : null]}\n >\n {children}\n </View>\n </ToggleGroupContext.Provider>\n );\n};\n\nexport type ToggleGroupItemProps = {\n /** Unique identifier within the group — written into `value` when pressed. */\n value: string;\n /** Disable just this item (OR-ed with group-level `disabled`). */\n disabled?: boolean;\n children?: ReactNode;\n 'aria-label'?: string;\n accessibilityLabel?: string;\n className?: string;\n testID?: string;\n};\n\n/**\n * One toggle inside a `<ToggleGroup>`. Throws with a clear message when\n * rendered outside of one.\n */\nexport const ToggleGroupItem = ({\n value,\n disabled,\n children,\n 'aria-label': ariaLabel,\n accessibilityLabel,\n className,\n testID,\n}: ToggleGroupItemProps) => {\n const ctx = useToggleGroupContext();\n const ownRef = useRef<HTMLElement | null>(null);\n // Capture register/unregister in a ref so the effect's deps stay\n // value-only — otherwise a new context object on every render (driven\n // by setOrder inside register) would re-fire the effect → setState\n // loop → \"Maximum update depth exceeded\".\n const registryRef = useRef({ register: ctx.register, unregister: ctx.unregister });\n registryRef.current = { register: ctx.register, unregister: ctx.unregister };\n\n useEffect(() => {\n // Read-through holder so the registered ref always sees the latest node.\n const holder: RefObject<HTMLElement | null> = {\n get current() {\n return ownRef.current;\n },\n set current(_v) {\n /* no-op — read-through to ownRef */\n },\n } as unknown as RefObject<HTMLElement | null>;\n registryRef.current.register(value, holder);\n return () => registryRef.current.unregister(value);\n }, [value]);\n\n const isOn = ctx.isPressed(value);\n const isDisabled = disabled || ctx.disabled;\n const isRoving = ctx.rovingValue === value;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown': {\n event.preventDefault();\n ctx.moveBy(1, value);\n return;\n }\n case 'ArrowLeft':\n case 'ArrowUp': {\n event.preventDefault();\n ctx.moveBy(-1, value);\n return;\n }\n case 'Home': {\n event.preventDefault();\n ctx.moveTo('first');\n return;\n }\n case 'End': {\n event.preventDefault();\n ctx.moveTo('last');\n return;\n }\n case ' ':\n case 'Enter': {\n event.preventDefault();\n if (!isDisabled) {\n ctx.setValue(value);\n }\n return;\n }\n }\n },\n [ctx, isDisabled, value]\n );\n\n const handleFocus = useCallback(() => {\n ctx.setRovingValue(value);\n }, [ctx, value]);\n\n // Items inside a `default`-variant group share borders: only the first\n // rounds the left, the last rounds the right; everything else is square.\n const colors = useThemeColors();\n const idx = ctx.order.indexOf(value);\n const isFirst = idx === 0;\n const isLast = idx === ctx.order.length - 1;\n const sharedRadius = px(colors.radius.md);\n const isClustered = ctx.order.length > 1;\n const borderRadius = isClustered\n ? {\n topLeft: isFirst ? sharedRadius : 0,\n bottomLeft: isFirst ? sharedRadius : 0,\n topRight: isLast ? sharedRadius : 0,\n bottomRight: isLast ? sharedRadius : 0,\n }\n : sharedRadius;\n\n return (\n <ToggleVisual\n isOn={isOn}\n disabled={Boolean(isDisabled)}\n variant={ctx.variant}\n size={ctx.size}\n onPress={() => ctx.setValue(value)}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n ariaLabel={ariaLabel ?? accessibilityLabel}\n className={className}\n testID={testID}\n tabIndex={isRoving ? 0 : -1}\n borderRadius={borderRadius}\n forceBorder={ctx.variant === 'default' && isClustered}\n suppressRightBorder={isClustered && !isLast}\n refCallback={(node) => {\n ownRef.current = node;\n }}\n >\n {children}\n </ToggleVisual>\n );\n};\n\n/**\n * Public `Toggle` value — the standalone toggle plus its `.Group` and `.Item`\n * static members. Use `<Toggle.Group>` to wrap a list of `<Toggle.Item>`s.\n *\n * `Object.assign` produces a value whose inferred type carries the static\n * properties, so `.d.ts` consumers can write `<Toggle.Group>` without a\n * separate import.\n */\nexport const Toggle = Object.assign(ToggleRoot, {\n Group: ToggleGroup,\n Item: ToggleGroupItem,\n});\n"]}
@@ -1,4 +1,4 @@
1
- import { wrapStringChildren } from './chunk-VCJF75T2.js';
1
+ import { wrapStringChildren } from './chunk-JQQ3FBN7.js';
2
2
  import { cn } from './chunk-CHXHRJNZ.js';
3
3
  import { __name } from './chunk-WCQVDF3K.js';
4
4
  import { View } from 'react-native';
@@ -76,5 +76,5 @@ var VStack = /* @__PURE__ */ __name(({ gap, align, justify, className, children,
76
76
  }, "VStack");
77
77
 
78
78
  export { VStack };
79
- //# sourceMappingURL=chunk-AFQIK6JI.js.map
80
- //# sourceMappingURL=chunk-AFQIK6JI.js.map
79
+ //# sourceMappingURL=chunk-MRJWPRCX.js.map
80
+ //# sourceMappingURL=chunk-MRJWPRCX.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/VStack/VStack.tsx"],"names":[],"mappings":";;;;;;AAcA,IAAM,WAAA,GAA0C;AAAA,EAC5C,KAAA,EAAO,aAAA;AAAA,EACP,MAAA,EAAQ,cAAA;AAAA,EACR,GAAA,EAAK,WAAA;AAAA,EACL,OAAA,EAAS,eAAA;AAAA,EACT,QAAA,EAAU;AACd,CAAA;AAEA,IAAM,aAAA,GAA8C;AAAA,EAChD,KAAA,EAAO,eAAA;AAAA,EACP,MAAA,EAAQ,gBAAA;AAAA,EACR,GAAA,EAAK,aAAA;AAAA,EACL,OAAA,EAAS,iBAAA;AAAA,EACT,MAAA,EAAQ,gBAAA;AAAA,EACR,MAAA,EAAQ;AACZ,CAAA;AAEA,IAAM,WAAA,GAA2D;AAAA,EAC7D,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAK,UAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU;AACd,CAAA;AAEA,IAAM,aAAA,GAAmE;AAAA,EACrE,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAK,UAAA;AAAA,EACL,OAAA,EAAS,eAAA;AAAA,EACT,MAAA,EAAQ,cAAA;AAAA,EACR,MAAA,EAAQ;AACZ,CAAA;AAEA,IAAM,MAAA,GAAmC;AAAA,EACrC,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI;AACR,CAAA;AAOO,IAAM,MAAA,mBAAS,MAAA,CAAA,CAAC,EAAE,GAAA,EAAK,KAAA,EAAO,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,GAAG,IAAA,EAAK,KAAmB;AACjG,EAAA,MAAM,MAAA,GAAoB,EAAE,aAAA,EAAe,QAAA,EAAS;AACpD,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,CAAA,EAAG;AAChC,IAAA,MAAA,CAAO,GAAA,GAAM,OAAO,GAAG,CAAA;AAAA,EAC3B;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACrB,IAAA,MAAA,CAAO,UAAA,GAAa,YAAY,KAAK,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,YAAY,MAAA,EAAW;AACvB,IAAA,MAAA,CAAO,cAAA,GAAiB,cAAc,OAAO,CAAA;AAAA,EACjD;AACA,EAAA,MAAM,SAAS,KAAA,KAAU,MAAA,GAAY,MAAA,GAAU,CAAC,QAAQ,KAAK,CAAA;AAC7D,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACI,GAAG,IAAA;AAAA,MACJ,KAAA,EAAO,MAAA;AAAA,MACP,SAAA,EAAW,EAAA;AAAA,QACP,UAAA;AAAA,QACA,QAAQ,MAAA,IAAa,GAAA,KAAQ,CAAA,GAAI,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA,GAAK,MAAA;AAAA,QAChD,KAAA,KAAU,MAAA,GAAY,WAAA,CAAY,KAAK,CAAA,GAAI,MAAA;AAAA,QAC3C,OAAA,KAAY,MAAA,GAAY,aAAA,CAAc,OAAO,CAAA,GAAI,MAAA;AAAA,QACjD;AAAA,OACJ;AAAA,MAEC,6BAAmB,QAAQ;AAAA;AAAA,GAChC;AAER,CAAA,EA3BsB,QAAA","file":"chunk-AFQIK6JI.js","sourcesContent":["import type { ViewProps, ViewStyle } from 'react-native';\nimport { View } from 'react-native';\nimport { cn } from '../../utils/cn';\nimport { wrapStringChildren } from '../../utils/wrap-string-children';\nimport type { StackAlign, StackGap, StackJustify } from '../HStack/HStack';\n\nexport type VStackProps = ViewProps & {\n gap?: StackGap;\n align?: StackAlign;\n justify?: StackJustify;\n className?: string;\n testID?: string;\n};\n\nconst ALIGN_CLASS: Record<StackAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n};\n\nconst JUSTIFY_CLASS: Record<StackJustify, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n};\n\nconst ALIGN_STYLE: Record<StackAlign, ViewStyle['alignItems']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n};\n\nconst JUSTIFY_STYLE: Record<StackJustify, ViewStyle['justifyContent']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n};\n\nconst GAP_PX: Record<StackGap, number> = {\n 0: 0,\n 1: 4,\n 2: 8,\n 3: 12,\n 4: 16,\n 5: 20,\n 6: 24,\n 8: 32,\n 10: 40,\n 12: 48,\n};\n\n/**\n * Vertical flex layout primitive. RSC-safe.\n *\n * Layout is driven by inline style; see HStack for the rationale.\n */\nexport const VStack = ({ gap, align, justify, className, children, style, ...rest }: VStackProps) => {\n const inline: ViewStyle = { flexDirection: 'column' };\n if (gap !== undefined && gap !== 0) {\n inline.gap = GAP_PX[gap];\n }\n if (align !== undefined) {\n inline.alignItems = ALIGN_STYLE[align];\n }\n if (justify !== undefined) {\n inline.justifyContent = JUSTIFY_STYLE[justify];\n }\n const merged = style === undefined ? inline : ([inline, style] as ViewStyle[]);\n return (\n <View\n {...rest}\n style={merged}\n className={cn(\n 'flex-col',\n gap !== undefined && gap !== 0 ? `gap-${gap}` : undefined,\n align !== undefined ? ALIGN_CLASS[align] : undefined,\n justify !== undefined ? JUSTIFY_CLASS[justify] : undefined,\n className\n )}\n >\n {wrapStringChildren(children)}\n </View>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/VStack/VStack.tsx"],"names":[],"mappings":";;;;;;AAcA,IAAM,WAAA,GAA0C;AAAA,EAC5C,KAAA,EAAO,aAAA;AAAA,EACP,MAAA,EAAQ,cAAA;AAAA,EACR,GAAA,EAAK,WAAA;AAAA,EACL,OAAA,EAAS,eAAA;AAAA,EACT,QAAA,EAAU;AACd,CAAA;AAEA,IAAM,aAAA,GAA8C;AAAA,EAChD,KAAA,EAAO,eAAA;AAAA,EACP,MAAA,EAAQ,gBAAA;AAAA,EACR,GAAA,EAAK,aAAA;AAAA,EACL,OAAA,EAAS,iBAAA;AAAA,EACT,MAAA,EAAQ,gBAAA;AAAA,EACR,MAAA,EAAQ;AACZ,CAAA;AAEA,IAAM,WAAA,GAA2D;AAAA,EAC7D,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAK,UAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU;AACd,CAAA;AAEA,IAAM,aAAA,GAAmE;AAAA,EACrE,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,GAAA,EAAK,UAAA;AAAA,EACL,OAAA,EAAS,eAAA;AAAA,EACT,MAAA,EAAQ,cAAA;AAAA,EACR,MAAA,EAAQ;AACZ,CAAA;AAEA,IAAM,MAAA,GAAmC;AAAA,EACrC,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI;AACR,CAAA;AAOO,IAAM,MAAA,mBAAS,MAAA,CAAA,CAAC,EAAE,GAAA,EAAK,KAAA,EAAO,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,GAAG,IAAA,EAAK,KAAmB;AACjG,EAAA,MAAM,MAAA,GAAoB,EAAE,aAAA,EAAe,QAAA,EAAS;AACpD,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,CAAA,EAAG;AAChC,IAAA,MAAA,CAAO,GAAA,GAAM,OAAO,GAAG,CAAA;AAAA,EAC3B;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACrB,IAAA,MAAA,CAAO,UAAA,GAAa,YAAY,KAAK,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,YAAY,MAAA,EAAW;AACvB,IAAA,MAAA,CAAO,cAAA,GAAiB,cAAc,OAAO,CAAA;AAAA,EACjD;AACA,EAAA,MAAM,SAAS,KAAA,KAAU,MAAA,GAAY,MAAA,GAAU,CAAC,QAAQ,KAAK,CAAA;AAC7D,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACI,GAAG,IAAA;AAAA,MACJ,KAAA,EAAO,MAAA;AAAA,MACP,SAAA,EAAW,EAAA;AAAA,QACP,UAAA;AAAA,QACA,QAAQ,MAAA,IAAa,GAAA,KAAQ,CAAA,GAAI,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA,GAAK,MAAA;AAAA,QAChD,KAAA,KAAU,MAAA,GAAY,WAAA,CAAY,KAAK,CAAA,GAAI,MAAA;AAAA,QAC3C,OAAA,KAAY,MAAA,GAAY,aAAA,CAAc,OAAO,CAAA,GAAI,MAAA;AAAA,QACjD;AAAA,OACJ;AAAA,MAEC,6BAAmB,QAAQ;AAAA;AAAA,GAChC;AAER,CAAA,EA3BsB,QAAA","file":"chunk-MRJWPRCX.js","sourcesContent":["import type { ViewProps, ViewStyle } from 'react-native';\nimport { View } from 'react-native';\nimport { cn } from '../../utils/cn';\nimport { wrapStringChildren } from '../../utils/wrap-string-children';\nimport type { StackAlign, StackGap, StackJustify } from '../HStack/HStack';\n\nexport type VStackProps = ViewProps & {\n gap?: StackGap;\n align?: StackAlign;\n justify?: StackJustify;\n className?: string;\n testID?: string;\n};\n\nconst ALIGN_CLASS: Record<StackAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n};\n\nconst JUSTIFY_CLASS: Record<StackJustify, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n};\n\nconst ALIGN_STYLE: Record<StackAlign, ViewStyle['alignItems']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n};\n\nconst JUSTIFY_STYLE: Record<StackJustify, ViewStyle['justifyContent']> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n};\n\nconst GAP_PX: Record<StackGap, number> = {\n 0: 0,\n 1: 4,\n 2: 8,\n 3: 12,\n 4: 16,\n 5: 20,\n 6: 24,\n 8: 32,\n 10: 40,\n 12: 48,\n};\n\n/**\n * Vertical flex layout primitive. RSC-safe.\n *\n * Layout is driven by inline style; see HStack for the rationale.\n */\nexport const VStack = ({ gap, align, justify, className, children, style, ...rest }: VStackProps) => {\n const inline: ViewStyle = { flexDirection: 'column' };\n if (gap !== undefined && gap !== 0) {\n inline.gap = GAP_PX[gap];\n }\n if (align !== undefined) {\n inline.alignItems = ALIGN_STYLE[align];\n }\n if (justify !== undefined) {\n inline.justifyContent = JUSTIFY_STYLE[justify];\n }\n const merged = style === undefined ? inline : ([inline, style] as ViewStyle[]);\n return (\n <View\n {...rest}\n style={merged}\n className={cn(\n 'flex-col',\n gap !== undefined && gap !== 0 ? `gap-${gap}` : undefined,\n align !== undefined ? ALIGN_CLASS[align] : undefined,\n justify !== undefined ? JUSTIFY_CLASS[justify] : undefined,\n className\n )}\n >\n {wrapStringChildren(children)}\n </View>\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { cn } from './chunk-CHXHRJNZ.js';
2
1
  import { px } from './chunk-5A2QOOVN.js';
2
+ import { cn } from './chunk-CHXHRJNZ.js';
3
3
  import { useThemeColors } from './chunk-R5JMDDCB.js';
4
4
  import { __name } from './chunk-WCQVDF3K.js';
5
5
  import { useRef } from 'react';
@@ -100,5 +100,5 @@ var TextInput = /* @__PURE__ */ __name(({
100
100
  }, "TextInput");
101
101
 
102
102
  export { TextInput };
103
- //# sourceMappingURL=chunk-EFK7726V.js.map
104
- //# sourceMappingURL=chunk-EFK7726V.js.map
103
+ //# sourceMappingURL=chunk-NF7XG2FG.js.map
104
+ //# sourceMappingURL=chunk-NF7XG2FG.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/TextInput/TextInput.tsx"],"names":["RNTextInput"],"mappings":"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","file":"chunk-EFK7726V.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport type { TextInputProps as RNTextInputProps, TextStyle, ViewStyle } from 'react-native';\nimport { TextInput as RNTextInput, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type TextInputProps = Omit<RNTextInputProps, 'editable'> & {\n disabled?: boolean;\n leading?: ReactNode;\n trailing?: ReactNode;\n /** Pass through a custom wrapper className */\n containerClassName?: string;\n className?: string;\n testID?: string;\n id?: string;\n name?: string;\n /** Controlled text handler. Optional so uncontrolled usage works too. */\n onChangeText?: (text: string) => void;\n /** Multi-line mode — flipped by TextArea. Default false. */\n multiline?: boolean;\n numberOfLines?: number;\n};\n\n// Layout-only bases; theme-driven dimensions are merged inside the component.\nconst FIELD_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n borderWidth: 1,\n // Clip the textarea's browser-drawn resize grippy inside the rounded\n // border. Without this, the grippy escapes the corner and looks like\n // it belongs to the page, not the input.\n overflow: 'hidden',\n};\n\n/**\n * Single-line text input with leading/trailing slots.\n *\n * Wrap in <Field> + <Field.Control> to get label, description, error, and\n * full a11y wiring (aria-labelledby, aria-describedby, aria-invalid).\n *\n * Color flips with the active scheme — the field surface, border, and\n * placeholder all read from the resolved palette via `useThemeColors`.\n */\nexport const TextInput = ({\n disabled,\n leading,\n trailing,\n containerClassName,\n className,\n testID,\n id,\n name,\n onChangeText,\n multiline,\n numberOfLines,\n ...rest\n}: TextInputProps) => {\n const colors = useThemeColors();\n const inputRef = useRef<RNTextInput | null>(null);\n\n const restAny = rest as Record<string, unknown>;\n const hasError = restAny['aria-invalid'] === true || restAny['aria-invalid'] === 'true';\n\n const inputExtras: Record<string, unknown> = {};\n if (testID !== undefined) {\n inputExtras.testID = testID;\n }\n if (id !== undefined) {\n inputExtras.id = id;\n inputExtras.nativeID = id;\n }\n if (name !== undefined) {\n inputExtras.name = name;\n }\n if (multiline !== undefined) {\n inputExtras.multiline = multiline;\n }\n if (numberOfLines !== undefined) {\n inputExtras.numberOfLines = numberOfLines;\n }\n if (onChangeText !== undefined) {\n inputExtras.onChangeText = onChangeText;\n }\n\n const inputStyle: TextStyle = {\n flex: 1,\n paddingVertical: px(colors.spacing['2']),\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n color: colors.semantic.text.default,\n };\n\n const fieldStyle = [\n FIELD_LAYOUT_BASE,\n {\n borderRadius: px(colors.radius.md),\n paddingHorizontal: px(colors.spacing['3']),\n backgroundColor: colors.semantic.background.elevated,\n borderColor: hasError ? colors.color.danger : colors.semantic.border.default,\n },\n disabled ? { opacity: 0.6 } : null,\n ];\n\n return (\n <View className={cn(containerClassName)} style={{ flexDirection: 'column' }}>\n <View\n className={cn(\n 'flex-row items-center rounded-md border px-3',\n hasError ? 'border-semantic-interactive-destructive' : 'border-semantic-border-default',\n disabled ? 'opacity-60' : undefined\n )}\n style={fieldStyle}\n >\n {leading ? (\n <View className=\"mr-2\" style={{ marginRight: px(colors.spacing['2']) }}>\n {leading}\n </View>\n ) : null}\n <RNTextInput\n ref={inputRef}\n editable={!disabled}\n className={cn('flex-1 py-2 text-md text-semantic-text-default outline-none', className)}\n placeholderTextColor={colors.semantic.text.muted}\n {...inputExtras}\n {...rest}\n // Spread `rest` first so callers can extend the input style without\n // losing inputStyle — RN merges array styles in order, last wins.\n style={[inputStyle, rest.style]}\n />\n {trailing ? (\n <View className=\"ml-2\" style={{ marginLeft: px(colors.spacing['2']) }}>\n {trailing}\n </View>\n ) : null}\n </View>\n </View>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/TextInput/TextInput.tsx"],"names":["RNTextInput"],"mappings":"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","file":"chunk-NF7XG2FG.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport type { TextInputProps as RNTextInputProps, TextStyle, ViewStyle } from 'react-native';\nimport { TextInput as RNTextInput, View } from 'react-native';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type TextInputProps = Omit<RNTextInputProps, 'editable'> & {\n disabled?: boolean;\n leading?: ReactNode;\n trailing?: ReactNode;\n /** Pass through a custom wrapper className */\n containerClassName?: string;\n className?: string;\n testID?: string;\n id?: string;\n name?: string;\n /** Controlled text handler. Optional so uncontrolled usage works too. */\n onChangeText?: (text: string) => void;\n /** Multi-line mode — flipped by TextArea. Default false. */\n multiline?: boolean;\n numberOfLines?: number;\n};\n\n// Layout-only bases; theme-driven dimensions are merged inside the component.\nconst FIELD_LAYOUT_BASE: ViewStyle = {\n flexDirection: 'row',\n alignItems: 'center',\n borderWidth: 1,\n // Clip the textarea's browser-drawn resize grippy inside the rounded\n // border. Without this, the grippy escapes the corner and looks like\n // it belongs to the page, not the input.\n overflow: 'hidden',\n};\n\n/**\n * Single-line text input with leading/trailing slots.\n *\n * Wrap in <Field> + <Field.Control> to get label, description, error, and\n * full a11y wiring (aria-labelledby, aria-describedby, aria-invalid).\n *\n * Color flips with the active scheme — the field surface, border, and\n * placeholder all read from the resolved palette via `useThemeColors`.\n */\nexport const TextInput = ({\n disabled,\n leading,\n trailing,\n containerClassName,\n className,\n testID,\n id,\n name,\n onChangeText,\n multiline,\n numberOfLines,\n ...rest\n}: TextInputProps) => {\n const colors = useThemeColors();\n const inputRef = useRef<RNTextInput | null>(null);\n\n const restAny = rest as Record<string, unknown>;\n const hasError = restAny['aria-invalid'] === true || restAny['aria-invalid'] === 'true';\n\n const inputExtras: Record<string, unknown> = {};\n if (testID !== undefined) {\n inputExtras.testID = testID;\n }\n if (id !== undefined) {\n inputExtras.id = id;\n inputExtras.nativeID = id;\n }\n if (name !== undefined) {\n inputExtras.name = name;\n }\n if (multiline !== undefined) {\n inputExtras.multiline = multiline;\n }\n if (numberOfLines !== undefined) {\n inputExtras.numberOfLines = numberOfLines;\n }\n if (onChangeText !== undefined) {\n inputExtras.onChangeText = onChangeText;\n }\n\n const inputStyle: TextStyle = {\n flex: 1,\n paddingVertical: px(colors.spacing['2']),\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n color: colors.semantic.text.default,\n };\n\n const fieldStyle = [\n FIELD_LAYOUT_BASE,\n {\n borderRadius: px(colors.radius.md),\n paddingHorizontal: px(colors.spacing['3']),\n backgroundColor: colors.semantic.background.elevated,\n borderColor: hasError ? colors.color.danger : colors.semantic.border.default,\n },\n disabled ? { opacity: 0.6 } : null,\n ];\n\n return (\n <View className={cn(containerClassName)} style={{ flexDirection: 'column' }}>\n <View\n className={cn(\n 'flex-row items-center rounded-md border px-3',\n hasError ? 'border-semantic-interactive-destructive' : 'border-semantic-border-default',\n disabled ? 'opacity-60' : undefined\n )}\n style={fieldStyle}\n >\n {leading ? (\n <View className=\"mr-2\" style={{ marginRight: px(colors.spacing['2']) }}>\n {leading}\n </View>\n ) : null}\n <RNTextInput\n ref={inputRef}\n editable={!disabled}\n className={cn('flex-1 py-2 text-md text-semantic-text-default outline-none', className)}\n placeholderTextColor={colors.semantic.text.muted}\n {...inputExtras}\n {...rest}\n // Spread `rest` first so callers can extend the input style without\n // losing inputStyle — RN merges array styles in order, last wins.\n style={[inputStyle, rest.style]}\n />\n {trailing ? (\n <View className=\"ml-2\" style={{ marginLeft: px(colors.spacing['2']) }}>\n {trailing}\n </View>\n ) : null}\n </View>\n </View>\n );\n};\n"]}
@@ -1,7 +1,7 @@
1
1
  import { defaultSemanticIcons } from './chunk-7Z4NMNX6.js';
2
2
  import { Slot } from './chunk-ZIBNLXIV.js';
3
- import { cn } from './chunk-CHXHRJNZ.js';
4
3
  import { px } from './chunk-5A2QOOVN.js';
4
+ import { cn } from './chunk-CHXHRJNZ.js';
5
5
  import { useThemeColors } from './chunk-R5JMDDCB.js';
6
6
  import { __name } from './chunk-WCQVDF3K.js';
7
7
  import { createContext, useContext, useState, useCallback } from 'react';
@@ -169,5 +169,5 @@ var Checkbox = /* @__PURE__ */ __name(({
169
169
  }, "Checkbox");
170
170
 
171
171
  export { Checkbox, SemanticIconsProvider, useSemanticIcon };
172
- //# sourceMappingURL=chunk-WTNDPO2V.js.map
173
- //# sourceMappingURL=chunk-WTNDPO2V.js.map
172
+ //# sourceMappingURL=chunk-NNFJKRXZ.js.map
173
+ //# sourceMappingURL=chunk-NNFJKRXZ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/icons/semantic-context.tsx","../src/icons/use-semantic-icon.ts","../src/components/Checkbox/Checkbox.tsx"],"names":["jsx","RNText"],"mappings":"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","file":"chunk-WTNDPO2V.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport { createContext } from 'react';\nimport { defaultSemanticIcons, type SemanticIcons } from './default-semantic-icons';\n\nexport const SemanticIconsContext = createContext<SemanticIcons>(defaultSemanticIcons);\nSemanticIconsContext.displayName = 'SemanticIconsContext';\n\nexport type SemanticIconsProviderProps = {\n icons?: Partial<SemanticIcons>;\n children?: ReactNode;\n};\n\nexport function SemanticIconsProvider({ icons, children }: SemanticIconsProviderProps) {\n const merged: SemanticIcons = icons ? { ...defaultSemanticIcons, ...icons } : defaultSemanticIcons;\n return <SemanticIconsContext.Provider value={merged}>{children}</SemanticIconsContext.Provider>;\n}\n","'use client';\n\nimport { useContext } from 'react';\nimport type { SemanticIcons } from './default-semantic-icons';\nimport { SemanticIconsContext } from './semantic-context';\n\nexport function useSemanticIcon<K extends keyof SemanticIcons>(name: K): SemanticIcons[K] {\n const icons = useContext(SemanticIconsContext);\n return icons[name];\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useCallback, useState } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { useSemanticIcon } from '../../icons/use-semantic-icon';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type CheckboxProps = {\n checked?: boolean;\n defaultChecked?: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n onChange?: (next: boolean) => void;\n label?: string;\n className?: string;\n testID?: string;\n asChild?: boolean;\n children?: ReactNode;\n /** DOM id / nativeID forwarded to the Pressable — used by Field.Control */\n id?: string;\n /** HTML name attribute (web only) */\n name?: string;\n /** aria-labelledby forwarded to the Pressable */\n 'aria-labelledby'?: string;\n /** React Native accessibilityLabelledBy forwarded to the Pressable */\n accessibilityLabelledBy?: string;\n /** aria-describedby forwarded to the Pressable */\n 'aria-describedby'?: string;\n /** React Native accessibilityDescribedBy forwarded to the Pressable */\n accessibilityDescribedBy?: string;\n /** Marks the control as invalid — set by Field.Control when there is an error */\n 'aria-invalid'?: boolean;\n /** Marks the control as required — set by Field.Control */\n 'aria-required'?: boolean;\n};\n\n// Layout-only base; theme-driven dimensions are merged inside the component.\nconst ROW_LAYOUT_BASE: ViewStyle = { flexDirection: 'row', alignItems: 'center' };\nconst BOX_LAYOUT_BASE: ViewStyle = {\n // 20×20 box — component-density literal — not from theme\n width: 20,\n height: 20,\n borderWidth: 1,\n alignItems: 'center',\n justifyContent: 'center',\n};\n\n/**\n * Checkbox — supports controlled + uncontrolled state, indeterminate (aria-checked=\"mixed\"),\n * asChild (via Slot), and a visible label that doubles as the accessibility label.\n */\nexport const Checkbox = ({\n checked,\n defaultChecked = false,\n indeterminate,\n disabled,\n onChange,\n label,\n className,\n testID,\n asChild,\n children,\n id,\n name,\n 'aria-labelledby': ariaLabelledBy,\n accessibilityLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n accessibilityDescribedBy,\n 'aria-invalid': ariaInvalid,\n 'aria-required': ariaRequired,\n}: CheckboxProps) => {\n const colors = useThemeColors();\n const [inner, setInner] = useState<boolean>(defaultChecked);\n const isControlled = checked !== undefined;\n const value = isControlled ? Boolean(checked) : inner;\n\n const ariaChecked: 'true' | 'false' | 'mixed' = indeterminate ? 'mixed' : value ? 'true' : 'false';\n const isMarked = value || Boolean(indeterminate);\n\n const toggle = useCallback(() => {\n if (disabled) {\n return;\n }\n const next = !value;\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n }, [disabled, value, isControlled, onChange]);\n\n const Check = useSemanticIcon('checkmark');\n\n const rowStyle: ViewStyle = { ...ROW_LAYOUT_BASE, gap: px(colors.spacing['2']) };\n const boxBaseStyle: ViewStyle = { ...BOX_LAYOUT_BASE, borderRadius: px(colors.radius.sm) };\n\n const commonProps: Record<string, unknown> = {\n role: 'checkbox',\n 'aria-checked': ariaChecked,\n accessibilityRole: 'checkbox' as const,\n accessibilityState: { checked: value, disabled: Boolean(disabled) },\n testID,\n };\n if (id !== undefined) {\n commonProps.id = id;\n commonProps.nativeID = id;\n }\n if (name !== undefined) {\n commonProps.name = name;\n }\n if (disabled) {\n commonProps['aria-disabled'] = true;\n }\n if (label !== undefined) {\n commonProps['aria-label'] = label;\n commonProps.accessibilityLabel = label;\n }\n if (ariaLabelledBy !== undefined) {\n commonProps['aria-labelledby'] = ariaLabelledBy;\n commonProps.accessibilityLabelledBy = ariaLabelledBy;\n }\n if (accessibilityLabelledBy !== undefined) {\n commonProps.accessibilityLabelledBy = accessibilityLabelledBy;\n }\n if (ariaDescribedBy !== undefined) {\n commonProps['aria-describedby'] = ariaDescribedBy;\n commonProps.accessibilityDescribedBy = ariaDescribedBy;\n }\n if (accessibilityDescribedBy !== undefined) {\n commonProps.accessibilityDescribedBy = accessibilityDescribedBy;\n }\n if (ariaInvalid) {\n commonProps['aria-invalid'] = true;\n }\n if (ariaRequired) {\n commonProps['aria-required'] = true;\n }\n\n if (asChild) {\n const slotProps: Record<string, unknown> = {\n role: 'checkbox',\n 'aria-checked': ariaChecked,\n onClick: toggle,\n };\n if (disabled) {\n slotProps['aria-disabled'] = true;\n }\n if (label !== undefined) {\n slotProps['aria-label'] = label;\n }\n if (testID !== undefined) {\n slotProps['data-testid'] = testID;\n }\n if (className !== undefined) {\n slotProps.className = className;\n }\n return <Slot {...slotProps}>{children}</Slot>;\n }\n\n const boxClasses = cn(\n 'w-5 h-5 rounded-sm border items-center justify-center',\n isMarked && !disabled\n ? 'bg-semantic-interactive-primary border-semantic-interactive-primary'\n : 'bg-semantic-background-elevated border-semantic-border-strong'\n );\n const boxFill: ViewStyle =\n isMarked && !disabled\n ? {\n backgroundColor: colors.semantic.interactive.primary,\n borderColor: colors.semantic.interactive.primary,\n }\n : {\n backgroundColor: colors.semantic.background.elevated,\n borderColor: colors.semantic.border.strong,\n };\n\n // The whole row is the interactive element so clicking the label text\n // toggles the checkbox. The visual box is a non-interactive View — one\n // role=\"checkbox\" per logical control, not two competing hit-areas.\n // Indeterminate uses a horizontal dash (the W3C convention) rather than\n // a checkmark, so the user can tell at a glance that the state is\n // \"partial / mixed\", not \"fully checked.\" Clicking still fires onChange\n // — consumers typically toggle indeterminate off and set checked=true\n // in their handler.\n const inverted = colors.semantic.text.inverted;\n return (\n <Pressable\n onPress={toggle}\n {...commonProps}\n className={cn('flex-row items-center gap-2', disabled ? 'opacity-60' : undefined, className)}\n style={[rowStyle, disabled ? { opacity: 0.6 } : null]}\n >\n <View className={boxClasses} style={[boxBaseStyle, boxFill]}>\n {indeterminate && !disabled ? (\n <View style={{ width: 10, height: 2, borderRadius: 1, backgroundColor: inverted }} />\n ) : value && !disabled ? (\n <Check size={14} color={inverted} />\n ) : null}\n </View>\n {children ??\n (label !== undefined ? (\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n }}\n >\n {label}\n </RNText>\n ) : null)}\n </Pressable>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/icons/semantic-context.tsx","../src/icons/use-semantic-icon.ts","../src/components/Checkbox/Checkbox.tsx"],"names":["jsx","RNText"],"mappings":";;;;;;;;;;AAMO,IAAM,oBAAA,GAAuB,cAA6B,oBAAoB,CAAA;AACrF,oBAAA,CAAqB,WAAA,GAAc,sBAAA;AAO5B,SAAS,qBAAA,CAAsB,EAAE,KAAA,EAAO,QAAA,EAAS,EAA+B;AACnF,EAAA,MAAM,SAAwB,KAAA,GAAQ,EAAE,GAAG,oBAAA,EAAsB,GAAG,OAAM,GAAI,oBAAA;AAC9E,EAAA,2BAAQ,oBAAA,CAAqB,QAAA,EAArB,EAA8B,KAAA,EAAO,QAAS,QAAA,EAAS,CAAA;AACnE;AAHgB,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;;;ACRT,SAAS,gBAA+C,IAAA,EAA2B;AACtF,EAAA,MAAM,KAAA,GAAQ,WAAW,oBAAoB,CAAA;AAC7C,EAAA,OAAO,MAAM,IAAI,CAAA;AACrB;AAHgB,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;ACoChB,IAAM,eAAA,GAA6B,EAAE,aAAA,EAAe,KAAA,EAAO,YAAY,QAAA,EAAS;AAChF,IAAM,eAAA,GAA6B;AAAA;AAAA,EAE/B,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,WAAA,EAAa,CAAA;AAAA,EACb,UAAA,EAAY,QAAA;AAAA,EACZ,cAAA,EAAgB;AACpB,CAAA;AAMO,IAAM,2BAAW,MAAA,CAAA,CAAC;AAAA,EACrB,OAAA;AAAA,EACA,cAAA,GAAiB,KAAA;AAAA,EACjB,aAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,EAAA;AAAA,EACA,IAAA;AAAA,EACA,iBAAA,EAAmB,cAAA;AAAA,EACnB,uBAAA;AAAA,EACA,kBAAA,EAAoB,eAAA;AAAA,EACpB,wBAAA;AAAA,EACA,cAAA,EAAgB,WAAA;AAAA,EAChB,eAAA,EAAiB;AACrB,CAAA,KAAqB;AACjB,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAkB,cAAc,CAAA;AAC1D,EAAA,MAAM,eAAe,OAAA,KAAY,MAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,YAAA,GAAe,OAAA,CAAQ,OAAO,CAAA,GAAI,KAAA;AAEhD,EAAA,MAAM,WAAA,GAA0C,aAAA,GAAgB,OAAA,GAAU,KAAA,GAAQ,MAAA,GAAS,OAAA;AAC3F,EAAA,MAAM,QAAA,GAAW,KAAA,IAAS,OAAA,CAAQ,aAAa,CAAA;AAE/C,EAAA,MAAM,MAAA,GAAS,YAAY,MAAM;AAC7B,IAAA,IAAI,QAAA,EAAU;AACV,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,OAAO,CAAC,KAAA;AACd,IAAA,IAAI,CAAC,YAAA,EAAc;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACjB;AACA,IAAA,QAAA,GAAW,IAAI,CAAA;AAAA,EACnB,GAAG,CAAC,QAAA,EAAU,KAAA,EAAO,YAAA,EAAc,QAAQ,CAAC,CAAA;AAE5C,EAAA,MAAM,KAAA,GAAQ,gBAAgB,WAAW,CAAA;AAEzC,EAAA,MAAM,QAAA,GAAsB,EAAE,GAAG,eAAA,EAAiB,GAAA,EAAK,GAAG,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAE;AAC/E,EAAA,MAAM,YAAA,GAA0B,EAAE,GAAG,eAAA,EAAiB,cAAc,EAAA,CAAG,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA,EAAE;AAEzF,EAAA,MAAM,WAAA,GAAuC;AAAA,IACzC,IAAA,EAAM,UAAA;AAAA,IACN,cAAA,EAAgB,WAAA;AAAA,IAChB,iBAAA,EAAmB,UAAA;AAAA,IACnB,oBAAoB,EAAE,OAAA,EAAS,OAAO,QAAA,EAAU,OAAA,CAAQ,QAAQ,CAAA,EAAE;AAAA,IAClE;AAAA,GACJ;AACA,EAAA,IAAI,OAAO,MAAA,EAAW;AAClB,IAAA,WAAA,CAAY,EAAA,GAAK,EAAA;AACjB,IAAA,WAAA,CAAY,QAAA,GAAW,EAAA;AAAA,EAC3B;AACA,EAAA,IAAI,SAAS,MAAA,EAAW;AACpB,IAAA,WAAA,CAAY,IAAA,GAAO,IAAA;AAAA,EACvB;AACA,EAAA,IAAI,QAAA,EAAU;AACV,IAAA,WAAA,CAAY,eAAe,CAAA,GAAI,IAAA;AAAA,EACnC;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACrB,IAAA,WAAA,CAAY,YAAY,CAAA,GAAI,KAAA;AAC5B,IAAA,WAAA,CAAY,kBAAA,GAAqB,KAAA;AAAA,EACrC;AACA,EAAA,IAAI,mBAAmB,MAAA,EAAW;AAC9B,IAAA,WAAA,CAAY,iBAAiB,CAAA,GAAI,cAAA;AACjC,IAAA,WAAA,CAAY,uBAAA,GAA0B,cAAA;AAAA,EAC1C;AACA,EAAA,IAAI,4BAA4B,MAAA,EAAW;AACvC,IAAA,WAAA,CAAY,uBAAA,GAA0B,uBAAA;AAAA,EAC1C;AACA,EAAA,IAAI,oBAAoB,MAAA,EAAW;AAC/B,IAAA,WAAA,CAAY,kBAAkB,CAAA,GAAI,eAAA;AAClC,IAAA,WAAA,CAAY,wBAAA,GAA2B,eAAA;AAAA,EAC3C;AACA,EAAA,IAAI,6BAA6B,MAAA,EAAW;AACxC,IAAA,WAAA,CAAY,wBAAA,GAA2B,wBAAA;AAAA,EAC3C;AACA,EAAA,IAAI,WAAA,EAAa;AACb,IAAA,WAAA,CAAY,cAAc,CAAA,GAAI,IAAA;AAAA,EAClC;AACA,EAAA,IAAI,YAAA,EAAc;AACd,IAAA,WAAA,CAAY,eAAe,CAAA,GAAI,IAAA;AAAA,EACnC;AAEA,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,MAAM,SAAA,GAAqC;AAAA,MACvC,IAAA,EAAM,UAAA;AAAA,MACN,cAAA,EAAgB,WAAA;AAAA,MAChB,OAAA,EAAS;AAAA,KACb;AACA,IAAA,IAAI,QAAA,EAAU;AACV,MAAA,SAAA,CAAU,eAAe,CAAA,GAAI,IAAA;AAAA,IACjC;AACA,IAAA,IAAI,UAAU,MAAA,EAAW;AACrB,MAAA,SAAA,CAAU,YAAY,CAAA,GAAI,KAAA;AAAA,IAC9B;AACA,IAAA,IAAI,WAAW,MAAA,EAAW;AACtB,MAAA,SAAA,CAAU,aAAa,CAAA,GAAI,MAAA;AAAA,IAC/B;AACA,IAAA,IAAI,cAAc,MAAA,EAAW;AACzB,MAAA,SAAA,CAAU,SAAA,GAAY,SAAA;AAAA,IAC1B;AACA,IAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAM,GAAG,WAAY,QAAA,EAAS,CAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,UAAA,GAAa,EAAA;AAAA,IACf,uDAAA;AAAA,IACA,QAAA,IAAY,CAAC,QAAA,GACP,qEAAA,GACA;AAAA,GACV;AACA,EAAA,MAAM,OAAA,GACF,QAAA,IAAY,CAAC,QAAA,GACP;AAAA,IACI,eAAA,EAAiB,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,OAAA;AAAA,IAC7C,WAAA,EAAa,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY;AAAA,GAC7C,GACA;AAAA,IACI,eAAA,EAAiB,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,QAAA;AAAA,IAC5C,WAAA,EAAa,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO;AAAA,GACxC;AAUV,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,QAAA;AACtC,EAAA,uBACI,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACG,OAAA,EAAS,MAAA;AAAA,MACR,GAAG,WAAA;AAAA,MACJ,WAAW,EAAA,CAAG,6BAAA,EAA+B,QAAA,GAAW,YAAA,GAAe,QAAW,SAAS,CAAA;AAAA,MAC3F,KAAA,EAAO,CAAC,QAAA,EAAU,QAAA,GAAW,EAAE,OAAA,EAAS,GAAA,KAAQ,IAAI,CAAA;AAAA,MAEpD,QAAA,EAAA;AAAA,wBAAAA,IAAC,IAAA,EAAA,EAAK,SAAA,EAAW,UAAA,EAAY,KAAA,EAAO,CAAC,YAAA,EAAc,OAAO,CAAA,EACrD,QAAA,EAAA,aAAA,IAAiB,CAAC,QAAA,mBACfA,IAAC,IAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,CAAA,EAAG,cAAc,CAAA,EAAG,eAAA,EAAiB,QAAA,EAAS,EAAG,IACnF,KAAA,IAAS,CAAC,QAAA,mBACVA,IAAC,KAAA,EAAA,EAAM,IAAA,EAAM,IAAI,KAAA,EAAO,QAAA,EAAU,IAClC,IAAA,EACR,CAAA;AAAA,QACC,QAAA,KACI,KAAA,KAAU,MAAA,mBACPA,GAAAA;AAAA,UAACC,IAAA;AAAA,UAAA;AAAA,YACG,KAAA,EAAO;AAAA,cACH,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA;AAAA,cAC5B,UAAA,EAAY,OAAO,UAAA,CAAW,IAAA;AAAA,cAC9B,QAAA,EAAU,EAAA,CAAG,MAAA,CAAO,QAAA,CAAS,EAAE;AAAA,aACnC;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACL,GACA,IAAA;AAAA;AAAA;AAAA,GACZ;AAER,CAAA,EAjKwB,UAAA","file":"chunk-NNFJKRXZ.js","sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport { createContext } from 'react';\nimport { defaultSemanticIcons, type SemanticIcons } from './default-semantic-icons';\n\nexport const SemanticIconsContext = createContext<SemanticIcons>(defaultSemanticIcons);\nSemanticIconsContext.displayName = 'SemanticIconsContext';\n\nexport type SemanticIconsProviderProps = {\n icons?: Partial<SemanticIcons>;\n children?: ReactNode;\n};\n\nexport function SemanticIconsProvider({ icons, children }: SemanticIconsProviderProps) {\n const merged: SemanticIcons = icons ? { ...defaultSemanticIcons, ...icons } : defaultSemanticIcons;\n return <SemanticIconsContext.Provider value={merged}>{children}</SemanticIconsContext.Provider>;\n}\n","'use client';\n\nimport { useContext } from 'react';\nimport type { SemanticIcons } from './default-semantic-icons';\nimport { SemanticIconsContext } from './semantic-context';\n\nexport function useSemanticIcon<K extends keyof SemanticIcons>(name: K): SemanticIcons[K] {\n const icons = useContext(SemanticIconsContext);\n return icons[name];\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useCallback, useState } from 'react';\nimport type { ViewStyle } from 'react-native';\nimport { Pressable, Text as RNText, View } from 'react-native';\nimport { useSemanticIcon } from '../../icons/use-semantic-icon';\nimport { Slot } from '../../slot';\nimport { px } from '../../theme/px';\nimport { useThemeColors } from '../../theme/use-theme-colors';\nimport { cn } from '../../utils/cn';\n\nexport type CheckboxProps = {\n checked?: boolean;\n defaultChecked?: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n onChange?: (next: boolean) => void;\n label?: string;\n className?: string;\n testID?: string;\n asChild?: boolean;\n children?: ReactNode;\n /** DOM id / nativeID forwarded to the Pressable — used by Field.Control */\n id?: string;\n /** HTML name attribute (web only) */\n name?: string;\n /** aria-labelledby forwarded to the Pressable */\n 'aria-labelledby'?: string;\n /** React Native accessibilityLabelledBy forwarded to the Pressable */\n accessibilityLabelledBy?: string;\n /** aria-describedby forwarded to the Pressable */\n 'aria-describedby'?: string;\n /** React Native accessibilityDescribedBy forwarded to the Pressable */\n accessibilityDescribedBy?: string;\n /** Marks the control as invalid — set by Field.Control when there is an error */\n 'aria-invalid'?: boolean;\n /** Marks the control as required — set by Field.Control */\n 'aria-required'?: boolean;\n};\n\n// Layout-only base; theme-driven dimensions are merged inside the component.\nconst ROW_LAYOUT_BASE: ViewStyle = { flexDirection: 'row', alignItems: 'center' };\nconst BOX_LAYOUT_BASE: ViewStyle = {\n // 20×20 box — component-density literal — not from theme\n width: 20,\n height: 20,\n borderWidth: 1,\n alignItems: 'center',\n justifyContent: 'center',\n};\n\n/**\n * Checkbox — supports controlled + uncontrolled state, indeterminate (aria-checked=\"mixed\"),\n * asChild (via Slot), and a visible label that doubles as the accessibility label.\n */\nexport const Checkbox = ({\n checked,\n defaultChecked = false,\n indeterminate,\n disabled,\n onChange,\n label,\n className,\n testID,\n asChild,\n children,\n id,\n name,\n 'aria-labelledby': ariaLabelledBy,\n accessibilityLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n accessibilityDescribedBy,\n 'aria-invalid': ariaInvalid,\n 'aria-required': ariaRequired,\n}: CheckboxProps) => {\n const colors = useThemeColors();\n const [inner, setInner] = useState<boolean>(defaultChecked);\n const isControlled = checked !== undefined;\n const value = isControlled ? Boolean(checked) : inner;\n\n const ariaChecked: 'true' | 'false' | 'mixed' = indeterminate ? 'mixed' : value ? 'true' : 'false';\n const isMarked = value || Boolean(indeterminate);\n\n const toggle = useCallback(() => {\n if (disabled) {\n return;\n }\n const next = !value;\n if (!isControlled) {\n setInner(next);\n }\n onChange?.(next);\n }, [disabled, value, isControlled, onChange]);\n\n const Check = useSemanticIcon('checkmark');\n\n const rowStyle: ViewStyle = { ...ROW_LAYOUT_BASE, gap: px(colors.spacing['2']) };\n const boxBaseStyle: ViewStyle = { ...BOX_LAYOUT_BASE, borderRadius: px(colors.radius.sm) };\n\n const commonProps: Record<string, unknown> = {\n role: 'checkbox',\n 'aria-checked': ariaChecked,\n accessibilityRole: 'checkbox' as const,\n accessibilityState: { checked: value, disabled: Boolean(disabled) },\n testID,\n };\n if (id !== undefined) {\n commonProps.id = id;\n commonProps.nativeID = id;\n }\n if (name !== undefined) {\n commonProps.name = name;\n }\n if (disabled) {\n commonProps['aria-disabled'] = true;\n }\n if (label !== undefined) {\n commonProps['aria-label'] = label;\n commonProps.accessibilityLabel = label;\n }\n if (ariaLabelledBy !== undefined) {\n commonProps['aria-labelledby'] = ariaLabelledBy;\n commonProps.accessibilityLabelledBy = ariaLabelledBy;\n }\n if (accessibilityLabelledBy !== undefined) {\n commonProps.accessibilityLabelledBy = accessibilityLabelledBy;\n }\n if (ariaDescribedBy !== undefined) {\n commonProps['aria-describedby'] = ariaDescribedBy;\n commonProps.accessibilityDescribedBy = ariaDescribedBy;\n }\n if (accessibilityDescribedBy !== undefined) {\n commonProps.accessibilityDescribedBy = accessibilityDescribedBy;\n }\n if (ariaInvalid) {\n commonProps['aria-invalid'] = true;\n }\n if (ariaRequired) {\n commonProps['aria-required'] = true;\n }\n\n if (asChild) {\n const slotProps: Record<string, unknown> = {\n role: 'checkbox',\n 'aria-checked': ariaChecked,\n onClick: toggle,\n };\n if (disabled) {\n slotProps['aria-disabled'] = true;\n }\n if (label !== undefined) {\n slotProps['aria-label'] = label;\n }\n if (testID !== undefined) {\n slotProps['data-testid'] = testID;\n }\n if (className !== undefined) {\n slotProps.className = className;\n }\n return <Slot {...slotProps}>{children}</Slot>;\n }\n\n const boxClasses = cn(\n 'w-5 h-5 rounded-sm border items-center justify-center',\n isMarked && !disabled\n ? 'bg-semantic-interactive-primary border-semantic-interactive-primary'\n : 'bg-semantic-background-elevated border-semantic-border-strong'\n );\n const boxFill: ViewStyle =\n isMarked && !disabled\n ? {\n backgroundColor: colors.semantic.interactive.primary,\n borderColor: colors.semantic.interactive.primary,\n }\n : {\n backgroundColor: colors.semantic.background.elevated,\n borderColor: colors.semantic.border.strong,\n };\n\n // The whole row is the interactive element so clicking the label text\n // toggles the checkbox. The visual box is a non-interactive View — one\n // role=\"checkbox\" per logical control, not two competing hit-areas.\n // Indeterminate uses a horizontal dash (the W3C convention) rather than\n // a checkmark, so the user can tell at a glance that the state is\n // \"partial / mixed\", not \"fully checked.\" Clicking still fires onChange\n // — consumers typically toggle indeterminate off and set checked=true\n // in their handler.\n const inverted = colors.semantic.text.inverted;\n return (\n <Pressable\n onPress={toggle}\n {...commonProps}\n className={cn('flex-row items-center gap-2', disabled ? 'opacity-60' : undefined, className)}\n style={[rowStyle, disabled ? { opacity: 0.6 } : null]}\n >\n <View className={boxClasses} style={[boxBaseStyle, boxFill]}>\n {indeterminate && !disabled ? (\n <View style={{ width: 10, height: 2, borderRadius: 1, backgroundColor: inverted }} />\n ) : value && !disabled ? (\n <Check size={14} color={inverted} />\n ) : null}\n </View>\n {children ??\n (label !== undefined ? (\n <RNText\n style={{\n color: colors.semantic.text.default,\n fontFamily: colors.fontFamily.body,\n fontSize: px(colors.fontSize.md),\n }}\n >\n {label}\n </RNText>\n ) : null)}\n </Pressable>\n );\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  import { Slot } from './chunk-ZIBNLXIV.js';
2
- import { cn } from './chunk-CHXHRJNZ.js';
3
2
  import { px } from './chunk-5A2QOOVN.js';
3
+ import { cn } from './chunk-CHXHRJNZ.js';
4
4
  import { useThemeColors } from './chunk-R5JMDDCB.js';
5
5
  import { __name } from './chunk-WCQVDF3K.js';
6
6
  import { createContext, useState, useCallback, useRef, useEffect, useId, isValidElement, useContext } from 'react';
@@ -406,5 +406,5 @@ var Tooltip = Object.assign(TooltipRoot, {
406
406
  });
407
407
 
408
408
  export { Tooltip };
409
- //# sourceMappingURL=chunk-CGQIVFCN.js.map
410
- //# sourceMappingURL=chunk-CGQIVFCN.js.map
409
+ //# sourceMappingURL=chunk-NRYWNOG5.js.map
410
+ //# sourceMappingURL=chunk-NRYWNOG5.js.map