@ankhorage/surface 0.1.0 → 0.1.2

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 (84) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +119 -113
  3. package/dist/components/badge/types.d.ts +1 -1
  4. package/dist/components/badge/types.d.ts.map +1 -1
  5. package/dist/components/button/types.d.ts +2 -2
  6. package/dist/components/button/types.d.ts.map +1 -1
  7. package/dist/components/checkbox/Checkbox.d.ts.map +1 -1
  8. package/dist/components/checkbox/Checkbox.js +9 -4
  9. package/dist/components/checkbox/Checkbox.js.map +1 -1
  10. package/dist/components/field/Field.d.ts.map +1 -1
  11. package/dist/components/field/Field.js +6 -9
  12. package/dist/components/field/Field.js.map +1 -1
  13. package/dist/components/helper-text/HelperText.d.ts.map +1 -1
  14. package/dist/components/helper-text/HelperText.js +1 -3
  15. package/dist/components/helper-text/HelperText.js.map +1 -1
  16. package/dist/components/helper-text/types.d.ts +2 -1
  17. package/dist/components/helper-text/types.d.ts.map +1 -1
  18. package/dist/components/icon-button/types.d.ts +2 -2
  19. package/dist/components/icon-button/types.d.ts.map +1 -1
  20. package/dist/components/label/Label.d.ts.map +1 -1
  21. package/dist/components/label/Label.js +2 -4
  22. package/dist/components/label/Label.js.map +1 -1
  23. package/dist/components/label/types.d.ts +2 -1
  24. package/dist/components/label/types.d.ts.map +1 -1
  25. package/dist/components/menu/Menu.d.ts.map +1 -1
  26. package/dist/components/menu/Menu.js +5 -5
  27. package/dist/components/menu/Menu.js.map +1 -1
  28. package/dist/components/radio/Radio.d.ts.map +1 -1
  29. package/dist/components/radio/Radio.js +9 -4
  30. package/dist/components/radio/Radio.js.map +1 -1
  31. package/dist/components/switch/Switch.d.ts.map +1 -1
  32. package/dist/components/switch/Switch.js +9 -4
  33. package/dist/components/switch/Switch.js.map +1 -1
  34. package/dist/components/tabs/Tab.d.ts.map +1 -1
  35. package/dist/components/tabs/Tab.js +4 -2
  36. package/dist/components/tabs/Tab.js.map +1 -1
  37. package/dist/components/tabs/TabList.d.ts.map +1 -1
  38. package/dist/components/tabs/TabList.js +1 -1
  39. package/dist/components/tabs/TabList.js.map +1 -1
  40. package/dist/components/tabs/TabPanel.d.ts.map +1 -1
  41. package/dist/components/tabs/TabPanel.js +5 -2
  42. package/dist/components/tabs/TabPanel.js.map +1 -1
  43. package/dist/components/tabs/Tabs.d.ts.map +1 -1
  44. package/dist/components/tabs/Tabs.js +4 -1
  45. package/dist/components/tabs/Tabs.js.map +1 -1
  46. package/dist/components/tabs/a11y.d.ts +3 -0
  47. package/dist/components/tabs/a11y.d.ts.map +1 -0
  48. package/dist/components/tabs/a11y.js +13 -0
  49. package/dist/components/tabs/a11y.js.map +1 -0
  50. package/dist/components/tabs/context.d.ts +2 -0
  51. package/dist/components/tabs/context.d.ts.map +1 -1
  52. package/dist/components/tabs/context.js.map +1 -1
  53. package/dist/examples/DocsExamples.d.ts +5 -0
  54. package/dist/examples/DocsExamples.d.ts.map +1 -0
  55. package/dist/examples/DocsExamples.js +81 -0
  56. package/dist/examples/DocsExamples.js.map +1 -0
  57. package/dist/internal/focus/useFocusManager.d.ts +8 -0
  58. package/dist/internal/focus/useFocusManager.d.ts.map +1 -1
  59. package/dist/internal/focus/useFocusManager.js +19 -2
  60. package/dist/internal/focus/useFocusManager.js.map +1 -1
  61. package/dist/internal/resolvers/index.d.ts +2 -0
  62. package/dist/internal/resolvers/index.d.ts.map +1 -1
  63. package/dist/internal/resolvers/index.js +2 -0
  64. package/dist/internal/resolvers/index.js.map +1 -1
  65. package/dist/internal/resolvers/resolveFieldPresentation.d.ts +10 -0
  66. package/dist/internal/resolvers/resolveFieldPresentation.d.ts.map +1 -0
  67. package/dist/internal/resolvers/resolveFieldPresentation.js +19 -0
  68. package/dist/internal/resolvers/resolveFieldPresentation.js.map +1 -0
  69. package/dist/internal/resolvers/resolveSelectionControlBehavior.d.ts +8 -0
  70. package/dist/internal/resolvers/resolveSelectionControlBehavior.d.ts.map +1 -0
  71. package/dist/internal/resolvers/resolveSelectionControlBehavior.js +10 -0
  72. package/dist/internal/resolvers/resolveSelectionControlBehavior.js.map +1 -0
  73. package/dist/internal/resolvers/resolveTextColor.d.ts +1 -1
  74. package/dist/internal/resolvers/resolveTextColor.d.ts.map +1 -1
  75. package/dist/internal/resolvers/resolveTextColor.js +6 -0
  76. package/dist/internal/resolvers/resolveTextColor.js.map +1 -1
  77. package/dist/layout/Box.d.ts +5 -1
  78. package/dist/layout/Box.d.ts.map +1 -1
  79. package/dist/layout/Box.js +2 -2
  80. package/dist/layout/Box.js.map +1 -1
  81. package/dist/primitives/icon/resolveExpoIconComponent.d.ts.map +1 -1
  82. package/dist/primitives/icon/resolveExpoIconComponent.js +13 -4
  83. package/dist/primitives/icon/resolveExpoIconComponent.js.map +1 -1
  84. package/package.json +4 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @ankhorage/surface
2
2
 
3
+ ## 0.1.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Fix Expo Web icon loading by removing the `import.meta`-based runtime require path so Metro can bundle the package correctly.
8
+
9
+ ## 0.1.1
10
+
11
+ ### Patch Changes
12
+
13
+ - 5aea65c: Stabilize the public package surface for Phase 4 by rewriting the adoption docs, broadening shared tone and variant coverage, tightening read-only control semantics, hardening menu and tab accessibility behavior, and adding regression tests for exports and state contracts.
14
+
3
15
  ## 0.1.0
4
16
 
5
17
  ### Minor Changes
package/README.md CHANGED
@@ -1,39 +1,34 @@
1
1
  # @ankhorage/surface
2
2
 
3
- A cross-platform UI foundation for **React Native + Web**.
3
+ Stable UI foundation for React Native and React Native Web.
4
4
 
5
- Build consistent, themeable apps with:
6
- - layout primitives
7
- - design tokens & theming
8
- - responsive helpers
9
- - accessible components
10
- - overlay + interaction systems
11
-
12
- ---
13
-
14
- ## Why use this?
15
-
16
- React Native gives you primitives.
17
- Surface gives you **a system**.
5
+ Surface gives application packages a consistent layer for layout, typography, theming, forms, and overlays without turning the foundation into a full product UI kit. It is intended to be the reusable base beneath ZORA and other RN/RN-web packages.
18
6
 
19
- - consistent spacing, typography, and colors
20
- - unified interaction states (hover, press, focus)
21
- - works across native + web
22
- - no design-system setup required
23
- - no runtime / no-code abstractions
7
+ ## Why Surface?
24
8
 
25
- ---
9
+ - Cross-platform primitives and components with one API for React Native and React Native Web.
10
+ - Semantic theming instead of ad hoc component colors.
11
+ - Shared interaction, field-state, and overlay patterns.
12
+ - Small but complete foundation layer: enough to build on, not a product-pattern kit.
26
13
 
27
- ## Quick start
14
+ ## Install
28
15
 
29
16
  ```bash
30
17
  bun add @ankhorage/surface @ankhorage/contracts
31
18
  ```
32
19
 
33
- Wrap your app:
20
+ Peer dependencies:
21
+
22
+ - `react`
23
+ - `react-native`
24
+ - `@expo/vector-icons` for icon rendering
25
+ - `expo-font` when using runtime font registration
26
+
27
+ ## Quick Start
34
28
 
35
29
  ```tsx
36
- import { ThemeProvider } from '@ankhorage/surface'
30
+ import React from 'react';
31
+ import { Button, Stack, Text, ThemeProvider } from '@ankhorage/surface';
37
32
 
38
33
  const themeConfig = {
39
34
  id: 'app',
@@ -48,142 +43,153 @@ const themeConfig = {
48
43
  harmony: 'monochromatic',
49
44
  systemTone: 'neutral',
50
45
  },
51
- }
46
+ };
52
47
 
53
- export default function App() {
48
+ export function App() {
54
49
  return (
55
50
  <ThemeProvider initialConfig={themeConfig}>
56
- <Main />
51
+ <Stack gap="m" p="l">
52
+ <Text variant="body">Surface is ready.</Text>
53
+ <Button>Continue</Button>
54
+ </Stack>
57
55
  </ThemeProvider>
58
- )
56
+ );
59
57
  }
60
58
  ```
61
59
 
62
- Use components:
60
+ ## Real-World Example
63
61
 
64
62
  ```tsx
65
- import { Stack, Text, Button, Card, TextInput } from '@ankhorage/surface'
66
-
67
- export function Example() {
63
+ import React from 'react';
64
+ import {
65
+ Button,
66
+ Field,
67
+ HelperText,
68
+ Modal,
69
+ Stack,
70
+ Text,
71
+ TextInput,
72
+ ThemeProvider,
73
+ } from '@ankhorage/surface';
74
+
75
+ export function SignInCard() {
68
76
  return (
69
- <Stack gap="m">
70
- <Text variant="body">Welcome</Text>
77
+ <ThemeProvider initialConfig={themeConfig}>
78
+ <Stack gap="m" p="l">
79
+ <Field helperText="We only use this for sign-in." label="Email">
80
+ <TextInput autoCapitalize="none" keyboardType="email-address" />
81
+ </Field>
71
82
 
72
- <TextInput placeholder="Email" />
83
+ <Field errorText="Password is required." invalid label="Password">
84
+ <TextInput secureTextEntry />
85
+ </Field>
73
86
 
74
- <Button tone="primary">Sign in</Button>
87
+ <Button fullWidth>Sign in</Button>
75
88
 
76
- <Card>
77
- <Text variant="bodySmall">Content</Text>
78
- </Card>
79
- </Stack>
80
- )
89
+ <Modal visible={false}>
90
+ <Text variant="body">Overlay content uses the same theme + spacing system.</Text>
91
+ </Modal>
92
+
93
+ <HelperText tone="muted">
94
+ Forms, controls, and overlays are meant to compose without extra glue code.
95
+ </HelperText>
96
+ </Stack>
97
+ </ThemeProvider>
98
+ );
81
99
  }
82
100
  ```
83
101
 
84
- ---
85
-
86
- ## What you get
87
-
88
- ### Layout
89
- - `Box`, `Stack`, `Inline`, `Grid`, `Container`
90
- - `Spacer`, `Divider`, `Center`, `Surface`
91
-
92
- ### Typography
93
- - `Text`, `Heading`
94
-
95
- ### Actions
96
- - `Button`, `IconButton`
97
-
98
- ### Data / display
99
- - `Card`, `Badge`, `ListItem`
100
-
101
- ### Forms
102
- - `TextInput`, `Textarea`
103
- - `Field`, `Label`, `HelperText`
104
- - `Checkbox`, `Radio`, `Switch`
102
+ ## Included APIs
105
103
 
106
- ### Overlays
107
- - `Modal`, `Drawer`
108
- - `Tabs`, `Toast`
109
- - `Tooltip`, `Menu`
104
+ ### Providers and theme
110
105
 
111
- ---
106
+ - `ThemeProvider`, `useTheme`, `useThemeConfig`, `useThemeMode`
107
+ - `FontProvider`, `useFontContext`
108
+ - `TranslationProvider`, `useTranslationContext`
109
+ - `createTheme`, `resolveToken`
112
110
 
113
- ## Core ideas
111
+ ### Responsive helpers
114
112
 
115
- ### 1. Theme-driven
116
- Everything uses semantic tokens:
113
+ - `ResponsiveProvider`, `useResponsiveRuntime`, `useBreakpoint`
114
+ - `BREAKPOINTS`, `BREAKPOINT_ORDER`, `getBreakpointFromWidth`, `resolveResponsive`
117
115
 
118
- ```tsx
119
- <Button tone="primary" variant="solid" />
120
- ```
116
+ ### Layout
121
117
 
122
- No hardcoded colors.
118
+ - `Box`, `Surface`
119
+ - `Stack`, `Inline`, `Grid`, `Template`
120
+ - `Container`, `Center`, `Divider`, `Spacer`, `Show`
123
121
 
124
- ---
122
+ ### Typography and primitives
125
123
 
126
- ### 2. Consistent states
124
+ - `Text`, `Heading`, `Icon`, `ButtonBase`
127
125
 
128
- All interactive components share:
126
+ ### Actions and display
129
127
 
130
- - hover (web)
131
- - press
132
- - focus-visible
133
- - disabled
128
+ - `Button`, `IconButton`
129
+ - `Card`, `Badge`, `ListItem`
134
130
 
135
- No reimplementation per component.
131
+ ### Forms and controls
136
132
 
137
- ---
133
+ - `Field`, `Label`, `HelperText`
134
+ - `TextInput`, `Textarea`
135
+ - `Checkbox`, `Radio`, `Switch`
138
136
 
139
- ### 3. Composable
137
+ ### Overlays and navigation
140
138
 
141
- Everything builds on primitives:
139
+ - `Modal`, `Drawer`, `Tooltip`, `Menu`
140
+ - `Tabs`, `TabList`, `Tab`, `TabPanel`
141
+ - `ToastProvider`, `Toast`, `useToast`
142
142
 
143
- ```tsx
144
- <Field label="Email">
145
- <TextInput />
146
- </Field>
147
- ```
143
+ ### Utilities
148
144
 
149
- ---
145
+ - `deepMerge`, `isDeepEqual`
150
146
 
151
- ### 4. Cross-platform first
147
+ ## Docs-Lite Examples
152
148
 
153
- - React Native
154
- - Expo
155
- - React Native Web
149
+ Small usage references live in
150
+ [docs/examples.md](https://github.com/ankhorage/surface/blob/main/docs/examples.md):
156
151
 
157
- Same API everywhere.
152
+ - provider shell
153
+ - form composition
154
+ - modal and drawer composition
155
+ - tabs and menu usage
156
+ - checkbox, radio, and switch usage
157
+ - theme override example
158
158
 
159
- ---
159
+ ## Scope Boundary
160
160
 
161
- ## What this is NOT
161
+ Surface is for reusable foundation concerns:
162
162
 
163
- - Not a full design system / UI kit
164
- - Not a form engine
165
- - Not a router or app framework
166
- - Not a low-code runtime
163
+ - layout primitives
164
+ - text and icon primitives
165
+ - semantic tokens and theming
166
+ - responsive helpers
167
+ - interaction primitives
168
+ - form controls
169
+ - overlays and navigation primitives
167
170
 
168
- ---
171
+ Surface is not for ready-made product patterns:
169
172
 
170
- ## When to use it
173
+ - auth flows
174
+ - app shells and dashboards
175
+ - data tables and charts
176
+ - settings panels
177
+ - product-specific dialogs and layouts
171
178
 
172
- Use Surface if you want:
179
+ Those belong in ZORA.
173
180
 
174
- - a clean starting point for RN + Web apps
175
- - consistent UI without reinventing components
176
- - a scalable design foundation
181
+ ## Status
177
182
 
178
- ---
183
+ Surface is in the stabilization phase: the goal is to keep the public API deliberate, typed, and dependency-ready for downstream packages.
179
184
 
180
- ## Status
185
+ - Foundation work stays in Surface when it is broadly reusable across RN and RN Web.
186
+ - Product-like patterns should move to ZORA instead of expanding Surface into a UI kit.
187
+ - Release and freeze expectations are tracked in
188
+ [docs/release-checklist.md](https://github.com/ankhorage/surface/blob/main/docs/release-checklist.md).
181
189
 
182
- - Phase 1: primitives + base components ✅
183
- - Phase 2: form + control layer ✅
184
- - Phase 3: overlays + navigation ✅
190
+ ## Changelog
185
191
 
186
- ---
192
+ Version history is maintained in [CHANGELOG.md](./CHANGELOG.md). New release notes should flow through Changesets so the published changelog matches the package surface.
187
193
 
188
194
  ## License
189
195
 
@@ -5,7 +5,7 @@ import type { ComponentTone } from '../../internal/resolvers/resolveTone';
5
5
  export interface BadgeProps {
6
6
  content?: React.ReactNode;
7
7
  variant?: Extract<ButtonVariant, 'solid' | 'soft' | 'outline'>;
8
- tone?: Extract<ComponentTone, 'primary' | 'neutral' | 'danger' | 'success'>;
8
+ tone?: Extract<ComponentTone, 'primary' | 'neutral' | 'danger' | 'success' | 'warning'>;
9
9
  size?: ControlSize;
10
10
  testID?: string;
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/badge/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAE1E,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/D,IAAI,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC;IAC5E,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/badge/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAE1E,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/D,IAAI,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;IACxF,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -10,8 +10,8 @@ export interface ButtonIconSpec {
10
10
  }
11
11
  export interface ButtonProps extends Omit<ButtonBaseProps, 'accessibilityLabel' | 'children' | 'style'> {
12
12
  children?: React.ReactNode;
13
- variant?: Exclude<ButtonVariant, 'soft'>;
14
- tone?: Extract<ComponentTone, 'primary' | 'neutral' | 'danger'>;
13
+ variant?: ButtonVariant;
14
+ tone?: ComponentTone;
15
15
  size?: ControlSize;
16
16
  loading?: boolean;
17
17
  leadingIcon?: ButtonIconSpec;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/button/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,WAAY,SAAQ,IAAI,CACvC,eAAe,EACf,oBAAoB,GAAG,UAAU,GAAG,OAAO,CAC5C;IACC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;IAChE,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/button/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,WAAY,SAAQ,IAAI,CACvC,eAAe,EACf,oBAAoB,GAAG,UAAU,GAAG,OAAO,CAC5C;IACC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,OAAO,EACP,cAAsB,EACtB,eAAe,EACf,IAAgB,EAChB,IAAU,EACV,QAAgB,EAChB,OAAe,EACf,QAAgB,EAChB,kBAAkB,EAClB,MAAM,EACN,GAAG,KAAK,EACT,EAAE,aAAa,qBA6Ef"}
1
+ {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,OAAO,EACP,cAAsB,EACtB,eAAe,EACf,IAAgB,EAChB,IAAU,EACV,QAAgB,EAChB,OAAe,EACf,QAAgB,EAChB,kBAAkB,EAClB,MAAM,EACN,GAAG,KAAK,EACT,EAAE,aAAa,qBAkFf"}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { resolveFieldState, resolveIndicatorSize, resolveSelectionControlColors, } from '../../internal/resolvers';
2
+ import { resolveFieldState, resolveIndicatorSize, resolveSelectionControlColors, resolveSelectionControlNextChecked, } from '../../internal/resolvers';
3
3
  import { useControllableState } from '../../internal/useControllableState';
4
4
  import { Box } from '../../layout';
5
5
  import { ButtonBase } from '../../primitives/button-base';
@@ -7,17 +7,22 @@ import { Text } from '../../primitives/text';
7
7
  import { useTheme } from '../../theme/ThemeContext';
8
8
  export function Checkbox({ children, checked, defaultChecked = false, onCheckedChange, tone = 'primary', size = 'm', disabled = false, invalid = false, readOnly = false, accessibilityLabel, testID, ...props }) {
9
9
  const { theme } = useTheme();
10
- const isDisabled = disabled || readOnly;
11
10
  const [isChecked, setChecked] = useControllableState({
12
11
  value: checked,
13
12
  defaultValue: defaultChecked,
14
13
  onChange: onCheckedChange,
15
14
  });
16
15
  const indicatorSize = resolveIndicatorSize(size);
17
- return (<ButtonBase {...props} accessibilityLabel={accessibilityLabel} accessibilityRole="checkbox" accessibilityState={{ checked: isChecked }} disabled={isDisabled} onPress={readOnly
16
+ const nextChecked = resolveSelectionControlNextChecked({
17
+ checked: isChecked,
18
+ disabled,
19
+ kind: 'checkbox',
20
+ readOnly,
21
+ });
22
+ return (<ButtonBase {...props} accessibilityLabel={accessibilityLabel} accessibilityRole="checkbox" accessibilityState={{ checked: isChecked }} disabled={disabled} onPress={nextChecked === null
18
23
  ? undefined
19
24
  : () => {
20
- setChecked(!isChecked);
25
+ setChecked(nextChecked);
21
26
  }} testID={testID}>
22
27
  {(interactionState) => {
23
28
  const fieldState = resolveFieldState({
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../../src/components/checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,MAAM,UAAU,QAAQ,CAAC,EACvB,QAAQ,EACR,OAAO,EACP,cAAc,GAAG,KAAK,EACtB,eAAe,EACf,IAAI,GAAG,SAAS,EAChB,IAAI,GAAG,GAAG,EACV,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,KAAK,EAChB,kBAAkB,EAClB,MAAM,EACN,GAAG,KAAK,EACM;IACd,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,QAAQ,IAAI,QAAQ,CAAC;IACxC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,oBAAoB,CAAU;QAC5D,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,cAAc;QAC5B,QAAQ,EAAE,eAAe;KAC1B,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAEjD,OAAO,CACL,CAAC,UAAU,CACT,IAAI,KAAK,CAAC,CACV,kBAAkB,CAAC,CAAC,kBAAkB,CAAC,CACvC,iBAAiB,CAAC,UAAU,CAC5B,kBAAkB,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAC3C,QAAQ,CAAC,CAAC,UAAU,CAAC,CACrB,OAAO,CAAC,CACN,QAAQ;YACN,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,GAAG,EAAE;gBACH,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC;YACzB,CACN,CAAC,CACD,MAAM,CAAC,CAAC,MAAM,CAAC,CAEf;MAAA,CAAC,CAAC,gBAAgB,EAAE,EAAE;YACpB,MAAM,UAAU,GAAG,iBAAiB,CAAC;gBACnC,QAAQ;gBACR,OAAO,EAAE,gBAAgB,CAAC,OAAO;gBACjC,OAAO;gBACP,QAAQ;aACT,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,6BAA6B,CAAC,KAAK,EAAE;gBAClD,OAAO,EAAE,SAAS;gBAClB,UAAU;gBACV,OAAO,EAAE,gBAAgB,CAAC,OAAO;gBACjC,OAAO,EAAE,gBAAgB,CAAC,OAAO;gBACjC,IAAI;aACL,CAAC,CAAC;YAEH,OAAO,CACL,CAAC,GAAG,CACF,KAAK,CAAC,CAAC;oBACL,UAAU,EAAE,QAAQ;oBACpB,aAAa,EAAE,KAAK;oBACpB,OAAO,EAAE,MAAM,CAAC,OAAO;iBACxB,CAAC,CAEF;YAAA,CAAC,GAAG,CACF,MAAM,CAAC,GAAG,CACV,KAAK,CAAC,CAAC;oBACL,UAAU,EAAE,QAAQ;oBACpB,eAAe,EAAE,MAAM,CAAC,eAAe;oBACvC,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,WAAW,EAAE,GAAG;oBAChB,MAAM,EAAE,aAAa,CAAC,QAAQ;oBAC9B,cAAc,EAAE,QAAQ;oBACxB,KAAK,EAAE,aAAa,CAAC,QAAQ;iBAC9B,CAAC,CAEF;cAAA,CAAC,SAAS,CAAC,CAAC,CAAC,CACX,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CACjE;;gBACF,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACV;YAAA,EAAE,GAAG,CACL;YAAA,CAAC,QAAQ,CAAC,CAAC,CAAC,CACV,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CACT;gBAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAClD;cAAA,EAAE,GAAG,CAAC,CACP,CAAC,CAAC,CAAC,IAAI,CACV;UAAA,EAAE,GAAG,CAAC,CACP,CAAC;QACJ,CAAC,CACH;IAAA,EAAE,UAAU,CAAC,CACd,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../../src/components/checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,MAAM,UAAU,QAAQ,CAAC,EACvB,QAAQ,EACR,OAAO,EACP,cAAc,GAAG,KAAK,EACtB,eAAe,EACf,IAAI,GAAG,SAAS,EAChB,IAAI,GAAG,GAAG,EACV,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,KAAK,EAChB,kBAAkB,EAClB,MAAM,EACN,GAAG,KAAK,EACM;IACd,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,oBAAoB,CAAU;QAC5D,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,cAAc;QAC5B,QAAQ,EAAE,eAAe;KAC1B,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,kCAAkC,CAAC;QACrD,OAAO,EAAE,SAAS;QAClB,QAAQ;QACR,IAAI,EAAE,UAAU;QAChB,QAAQ;KACT,CAAC,CAAC;IAEH,OAAO,CACL,CAAC,UAAU,CACT,IAAI,KAAK,CAAC,CACV,kBAAkB,CAAC,CAAC,kBAAkB,CAAC,CACvC,iBAAiB,CAAC,UAAU,CAC5B,kBAAkB,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAC3C,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,OAAO,CAAC,CACN,WAAW,KAAK,IAAI;YAClB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,GAAG,EAAE;gBACH,UAAU,CAAC,WAAW,CAAC,CAAC;YAC1B,CACN,CAAC,CACD,MAAM,CAAC,CAAC,MAAM,CAAC,CAEf;MAAA,CAAC,CAAC,gBAAgB,EAAE,EAAE;YACpB,MAAM,UAAU,GAAG,iBAAiB,CAAC;gBACnC,QAAQ;gBACR,OAAO,EAAE,gBAAgB,CAAC,OAAO;gBACjC,OAAO;gBACP,QAAQ;aACT,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,6BAA6B,CAAC,KAAK,EAAE;gBAClD,OAAO,EAAE,SAAS;gBAClB,UAAU;gBACV,OAAO,EAAE,gBAAgB,CAAC,OAAO;gBACjC,OAAO,EAAE,gBAAgB,CAAC,OAAO;gBACjC,IAAI;aACL,CAAC,CAAC;YAEH,OAAO,CACL,CAAC,GAAG,CACF,KAAK,CAAC,CAAC;oBACL,UAAU,EAAE,QAAQ;oBACpB,aAAa,EAAE,KAAK;oBACpB,OAAO,EAAE,MAAM,CAAC,OAAO;iBACxB,CAAC,CAEF;YAAA,CAAC,GAAG,CACF,MAAM,CAAC,GAAG,CACV,KAAK,CAAC,CAAC;oBACL,UAAU,EAAE,QAAQ;oBACpB,eAAe,EAAE,MAAM,CAAC,eAAe;oBACvC,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,WAAW,EAAE,GAAG;oBAChB,MAAM,EAAE,aAAa,CAAC,QAAQ;oBAC9B,cAAc,EAAE,QAAQ;oBACxB,KAAK,EAAE,aAAa,CAAC,QAAQ;iBAC9B,CAAC,CAEF;cAAA,CAAC,SAAS,CAAC,CAAC,CAAC,CACX,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CACjE;;gBACF,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACV;YAAA,EAAE,GAAG,CACL;YAAA,CAAC,QAAQ,CAAC,CAAC,CAAC,CACV,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CACT;gBAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAClD;cAAA,EAAE,GAAG,CAAC,CACP,CAAC,CAAC,CAAC,IAAI,CACV;UAAA,EAAE,GAAG,CAAC,CACP,CAAC;QACJ,CAAC,CACH;IAAA,EAAE,UAAU,CAAC,CACd,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../../src/components/field/Field.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,wBAAgB,KAAK,CAAC,EACpB,QAAQ,EACR,KAAK,EACL,UAAU,EACV,SAAS,EACT,QAAgB,EAChB,QAAgB,EAChB,OAAe,EACf,QAAgB,EAChB,MAAM,GACP,EAAE,UAAU,qBA2BZ"}
1
+ {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../../src/components/field/Field.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,wBAAgB,KAAK,CAAC,EACpB,QAAQ,EACR,KAAK,EACL,UAAU,EACV,SAAS,EACT,QAAgB,EAChB,QAAgB,EAChB,OAAe,EACf,QAAgB,EAChB,MAAM,GACP,EAAE,UAAU,qBAwBZ"}
@@ -1,25 +1,22 @@
1
1
  import React from 'react';
2
- import { resolveFieldState } from '../../internal/resolvers';
2
+ import { resolveFieldPresentation, resolveFieldState } from '../../internal/resolvers';
3
3
  import { Box, Stack } from '../../layout';
4
4
  import { HelperText } from '../helper-text';
5
5
  import { Label } from '../label';
6
6
  export function Field({ children, label, helperText, errorText, required = false, disabled = false, invalid = false, readOnly = false, testID, }) {
7
+ const hasErrorText = Boolean(errorText);
7
8
  const fieldState = resolveFieldState({
8
9
  disabled,
9
- invalid,
10
+ invalid: invalid || hasErrorText,
10
11
  readOnly,
11
12
  });
12
- const labelTone = fieldState.invalid
13
- ? 'danger'
14
- : fieldState.disabled || fieldState.readOnly
15
- ? 'muted'
16
- : 'default';
13
+ const presentation = resolveFieldPresentation(fieldState);
17
14
  return (<Stack gap="xs" testID={testID}>
18
- {label ? (<Label required={required} tone={labelTone}>
15
+ {label ? (<Label required={required} tone={presentation.labelTone}>
19
16
  {label}
20
17
  </Label>) : null}
21
18
  <Box>{children}</Box>
22
- {errorText ? (<HelperText tone="danger">{errorText}</HelperText>) : helperText ? (<HelperText tone={fieldState.disabled ? 'muted' : 'default'}>{helperText}</HelperText>) : null}
19
+ {hasErrorText ? (<HelperText tone={presentation.helperTone}>{errorText}</HelperText>) : helperText ? (<HelperText tone={presentation.helperTone}>{helperText}</HelperText>) : null}
23
20
  </Stack>);
24
21
  }
25
22
  //# sourceMappingURL=Field.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Field.js","sourceRoot":"","sources":["../../../src/components/field/Field.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGjC,MAAM,UAAU,KAAK,CAAC,EACpB,QAAQ,EACR,KAAK,EACL,UAAU,EACV,SAAS,EACT,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,KAAK,EAChB,MAAM,GACK;IACX,MAAM,UAAU,GAAG,iBAAiB,CAAC;QACnC,QAAQ;QACR,OAAO;QACP,QAAQ;KACT,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO;QAClC,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ;YAC1C,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO,CACL,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAC7B;MAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CACP,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CACzC;UAAA,CAAC,KAAK,CACR;QAAA,EAAE,KAAK,CAAC,CACT,CAAC,CAAC,CAAC,IAAI,CACR;MAAA,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CACpB;MAAA,CAAC,SAAS,CAAC,CAAC,CAAC,CACX,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,CACnD,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CACf,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CACvF,CAAC,CAAC,CAAC,IAAI,CACV;IAAA,EAAE,KAAK,CAAC,CACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Field.js","sourceRoot":"","sources":["../../../src/components/field/Field.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGjC,MAAM,UAAU,KAAK,CAAC,EACpB,QAAQ,EACR,KAAK,EACL,UAAU,EACV,SAAS,EACT,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,KAAK,EAChB,MAAM,GACK;IACX,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,iBAAiB,CAAC;QACnC,QAAQ;QACR,OAAO,EAAE,OAAO,IAAI,YAAY;QAChC,QAAQ;KACT,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;IAE1D,OAAO,CACL,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAC7B;MAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CACP,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CACtD;UAAA,CAAC,KAAK,CACR;QAAA,EAAE,KAAK,CAAC,CACT,CAAC,CAAC,CAAC,IAAI,CACR;MAAA,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CACpB;MAAA,CAAC,YAAY,CAAC,CAAC,CAAC,CACd,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,CACpE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CACf,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CACrE,CAAC,CAAC,CAAC,IAAI,CACV;IAAA,EAAE,KAAK,CAAC,CACT,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"HelperText.d.ts","sourceRoot":"","sources":["../../../src/components/helper-text/HelperText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAc,EAAE,MAAM,EAAE,EAAE,eAAe,qBAa/E"}
1
+ {"version":3,"file":"HelperText.d.ts","sourceRoot":"","sources":["../../../src/components/helper-text/HelperText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAc,EAAE,MAAM,EAAE,EAAE,eAAe,qBAM/E"}
@@ -1,9 +1,7 @@
1
1
  import React from 'react';
2
2
  import { Text } from '../../primitives/text';
3
- import { useTheme } from '../../theme/ThemeContext';
4
3
  export function HelperText({ children, tone = 'muted', testID }) {
5
- const { theme } = useTheme();
6
- return (<Text color={tone === 'danger' ? theme.semantics.danger.base : undefined} testID={testID} tone={tone === 'danger' ? 'default' : tone} variant="caption">
4
+ return (<Text testID={testID} tone={tone} variant="caption">
7
5
  {children}
8
6
  </Text>);
9
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"HelperText.js","sourceRoot":"","sources":["../../../src/components/helper-text/HelperText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,MAAM,UAAU,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAG,OAAO,EAAE,MAAM,EAAmB;IAC9E,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAE7B,OAAO,CACL,CAAC,IAAI,CACH,KAAK,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CACnE,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAC3C,OAAO,CAAC,SAAS,CAEjB;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"HelperText.js","sourceRoot":"","sources":["../../../src/components/helper-text/HelperText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAG7C,MAAM,UAAU,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAG,OAAO,EAAE,MAAM,EAAmB;IAC9E,OAAO,CACL,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CACjD;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import type React from 'react';
2
+ import type { TextTone } from '../../internal/resolvers/resolveTextColor';
2
3
  export interface HelperTextProps {
3
4
  children?: React.ReactNode;
4
- tone?: 'default' | 'muted' | 'danger';
5
+ tone?: Extract<TextTone, 'default' | 'muted' | 'danger'>;
5
6
  testID?: string;
6
7
  }
7
8
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/helper-text/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/helper-text/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -9,8 +9,8 @@ export interface IconButtonProps extends Omit<ButtonBaseProps, 'children' | 'sty
9
9
  provider?: IconProps['provider'];
10
10
  };
11
11
  accessibilityLabel: string;
12
- variant?: Exclude<ButtonVariant, 'soft'>;
13
- tone?: Extract<ComponentTone, 'primary' | 'neutral' | 'danger'>;
12
+ variant?: ButtonVariant;
13
+ tone?: ComponentTone;
14
14
  size?: ControlSize;
15
15
  }
16
16
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/icon-button/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,eAAe,EACf,UAAU,GAAG,OAAO,GAAG,oBAAoB,CAC5C;IACC,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACxB,QAAQ,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;KAClC,CAAC;IACF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;IAChE,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/icon-button/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,eAAe,EACf,UAAU,GAAG,OAAO,GAAG,oBAAoB,CAC5C;IACC,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACxB,QAAQ,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;KAClC,CAAC;IACF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"Label.d.ts","sourceRoot":"","sources":["../../../src/components/label/Label.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,wBAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAgB,EAAE,IAAgB,EAAE,MAAM,EAAE,EAAE,UAAU,qBAmBzF"}
1
+ {"version":3,"file":"Label.d.ts","sourceRoot":"","sources":["../../../src/components/label/Label.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,wBAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAgB,EAAE,IAAgB,EAAE,MAAM,EAAE,EAAE,UAAU,qBAWzF"}
@@ -1,11 +1,9 @@
1
1
  import React from 'react';
2
2
  import { Text } from '../../primitives/text';
3
- import { useTheme } from '../../theme/ThemeContext';
4
3
  export function Label({ children, required = false, tone = 'default', testID }) {
5
- const { theme } = useTheme();
6
- return (<Text color={tone === 'danger' ? theme.semantics.danger.base : undefined} testID={testID} tone={tone === 'danger' ? 'default' : tone} variant="label" weight="medium">
4
+ return (<Text testID={testID} tone={tone} variant="label" weight="medium">
7
5
  {children}
8
- {required ? (<Text color={theme.semantics.danger.base} variant="label" weight="medium">
6
+ {required ? (<Text tone="danger" variant="label" weight="medium">
9
7
  {' *'}
10
8
  </Text>) : null}
11
9
  </Text>);
@@ -1 +1 @@
1
- {"version":3,"file":"Label.js","sourceRoot":"","sources":["../../../src/components/label/Label.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,MAAM,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAE,IAAI,GAAG,SAAS,EAAE,MAAM,EAAc;IACxF,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAE7B,OAAO,CACL,CAAC,IAAI,CACH,KAAK,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CACnE,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAC3C,OAAO,CAAC,OAAO,CACf,MAAM,CAAC,QAAQ,CAEf;MAAA,CAAC,QAAQ,CACT;MAAA,CAAC,QAAQ,CAAC,CAAC,CAAC,CACV,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CACvE;UAAA,CAAC,IAAI,CACP;QAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACV;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Label.js","sourceRoot":"","sources":["../../../src/components/label/Label.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAG7C,MAAM,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAE,IAAI,GAAG,SAAS,EAAE,MAAM,EAAc;IACxF,OAAO,CACL,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAC/D;MAAA,CAAC,QAAQ,CACT;MAAA,CAAC,QAAQ,CAAC,CAAC,CAAC,CACV,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CACjD;UAAA,CAAC,IAAI,CACP;QAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACV;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import type React from 'react';
2
+ import type { TextTone } from '../../internal/resolvers/resolveTextColor';
2
3
  export interface LabelProps {
3
4
  children?: React.ReactNode;
4
5
  required?: boolean;
5
- tone?: 'default' | 'muted' | 'danger';
6
+ tone?: Extract<TextTone, 'default' | 'muted' | 'danger'>;
6
7
  testID?: string;
7
8
  }
8
9
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/label/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/label/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAE1E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../src/components/menu/Menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAezC,wBAAgB,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,aAAoB,EAAE,MAAM,EAAE,EAAE,SAAS,qBAqJ1F"}
1
+ {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../src/components/menu/Menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAezC,wBAAgB,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,aAAoB,EAAE,MAAM,EAAE,EAAE,SAAS,qBAwJ1F"}
@@ -84,7 +84,7 @@ export function Menu({ trigger, items, onDismiss, closeOnSelect = true, testID }
84
84
  position: 'absolute',
85
85
  top: (layout?.y ?? 0) + (layout?.height ?? 0) + animation.offset,
86
86
  }}>
87
- <Surface p="xs" style={{
87
+ <Surface accessibilityRole="menu" p="xs" style={{
88
88
  minWidth: Math.max(layout?.width ?? 0, 180),
89
89
  shadowOpacity: 0.12,
90
90
  shadowRadius: 12,
@@ -92,7 +92,7 @@ export function Menu({ trigger, items, onDismiss, closeOnSelect = true, testID }
92
92
  }} testID={testID} variant="raised">
93
93
  {items.map((item, index) => {
94
94
  const selected = index === activeIndex;
95
- return (<Pressable accessibilityRole="menuitem" disabled={item.disabled} key={item.id} onPress={() => {
95
+ return (<Pressable accessibilityRole="menuitem" accessibilityState={{ disabled: item.disabled, selected }} disabled={item.disabled} key={item.id} onPress={() => {
96
96
  if (item.disabled) {
97
97
  return;
98
98
  }
@@ -103,12 +103,12 @@ export function Menu({ trigger, items, onDismiss, closeOnSelect = true, testID }
103
103
  }}>
104
104
  <Box px="m" py="s" style={{
105
105
  backgroundColor: selected
106
- ? theme.semantics.action.primary.softBg
106
+ ? theme.semantics.action.neutral.softBg
107
107
  : 'transparent',
108
108
  opacity: item.disabled ? 0.56 : 1,
109
- }}>
109
+ }} testID={testID ? `${testID}-item-${item.id}` : undefined}>
110
110
  <Text color={selected
111
- ? theme.semantics.action.primary.base
111
+ ? theme.semantics.action.neutral.base
112
112
  : theme.semantics.content.default} variant="bodySmall">
113
113
  {item.label}
114
114
  </Text>