@duro-app/ui 5.13.0 → 5.15.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 (128) hide show
  1. package/README.md +49 -0
  2. package/dist/{Table-Bms2ftt3.js → Table-DnaoH-h5.js} +747 -635
  3. package/dist/Table-DnaoH-h5.js.map +1 -0
  4. package/dist/components/Button/Button.d.ts.map +1 -1
  5. package/dist/components/ColorMode/ColorMode.d.ts +2 -1
  6. package/dist/components/ColorMode/ColorMode.d.ts.map +1 -1
  7. package/dist/components/ColorMode/storage.d.ts +4 -0
  8. package/dist/components/ColorMode/storage.d.ts.map +1 -0
  9. package/dist/components/ColorMode/styles.css.d.ts +4 -0
  10. package/dist/components/ColorMode/styles.css.d.ts.map +1 -1
  11. package/dist/components/ColorMode/useSystemScheme.d.ts +7 -0
  12. package/dist/components/ColorMode/useSystemScheme.d.ts.map +1 -0
  13. package/dist/components/Combobox/Combobox.d.ts +7 -2
  14. package/dist/components/Combobox/Combobox.d.ts.map +1 -1
  15. package/dist/components/Combobox/comboboxState.d.ts +29 -0
  16. package/dist/components/Combobox/comboboxState.d.ts.map +1 -0
  17. package/dist/components/Combobox/native.css.d.ts +27 -0
  18. package/dist/components/Combobox/native.css.d.ts.map +1 -0
  19. package/dist/components/Combobox/useComboboxRoot.d.ts +6 -10
  20. package/dist/components/Combobox/useComboboxRoot.d.ts.map +1 -1
  21. package/dist/components/Drawer/Drawer.d.ts +5 -2
  22. package/dist/components/Drawer/Drawer.d.ts.map +1 -1
  23. package/dist/components/Drawer/DrawerSnap.stories.d.ts +2 -0
  24. package/dist/components/Drawer/DrawerSnap.stories.d.ts.map +1 -1
  25. package/dist/components/Drawer/native.css.d.ts +4 -0
  26. package/dist/components/Drawer/native.css.d.ts.map +1 -1
  27. package/dist/components/Drawer/styles.css.d.ts +4 -0
  28. package/dist/components/Drawer/styles.css.d.ts.map +1 -1
  29. package/dist/components/Form/FormSubmitContext.d.ts +8 -0
  30. package/dist/components/Form/FormSubmitContext.d.ts.map +1 -0
  31. package/dist/components/Listbox/native.css.d.ts +84 -0
  32. package/dist/components/Listbox/native.css.d.ts.map +1 -0
  33. package/dist/components/QrCode/QrCode.d.ts +8 -0
  34. package/dist/components/QrCode/QrCode.d.ts.map +1 -0
  35. package/dist/components/QrCode/QrCode.meta.d.ts +3 -0
  36. package/dist/components/QrCode/QrCode.meta.d.ts.map +1 -0
  37. package/dist/components/QrCode/QrCode.stories.d.ts +8 -0
  38. package/dist/components/QrCode/QrCode.stories.d.ts.map +1 -0
  39. package/dist/components/QrCode/geometry.d.ts +14 -0
  40. package/dist/components/QrCode/geometry.d.ts.map +1 -0
  41. package/dist/components/QrCode/styles.css.d.ts +9 -0
  42. package/dist/components/QrCode/styles.css.d.ts.map +1 -0
  43. package/dist/components/QrCode/types.d.ts +7 -0
  44. package/dist/components/QrCode/types.d.ts.map +1 -0
  45. package/dist/components/Select/Select.d.ts +9 -2
  46. package/dist/components/Select/Select.d.ts.map +1 -1
  47. package/dist/components/Select/Select.stories.d.ts +11 -0
  48. package/dist/components/Select/Select.stories.d.ts.map +1 -1
  49. package/dist/components/Select/native.css.d.ts +11 -0
  50. package/dist/components/Select/native.css.d.ts.map +1 -0
  51. package/dist/components/Select/selectState.d.ts +21 -0
  52. package/dist/components/Select/selectState.d.ts.map +1 -0
  53. package/dist/components/Select/styles.css.d.ts +10 -0
  54. package/dist/components/Select/styles.css.d.ts.map +1 -1
  55. package/dist/components/Select/useSelectRoot.d.ts +6 -8
  56. package/dist/components/Select/useSelectRoot.d.ts.map +1 -1
  57. package/dist/components/ThemeProvider/ThemeOverrides.stories.d.ts +13 -0
  58. package/dist/components/ThemeProvider/ThemeOverrides.stories.d.ts.map +1 -0
  59. package/dist/components/ThemeProvider/ThemeProvider.d.ts +9 -2
  60. package/dist/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  61. package/dist/components/ThemeProvider/overrideRule.d.ts +7 -0
  62. package/dist/components/ThemeProvider/overrideRule.d.ts.map +1 -0
  63. package/dist/components/ThemeProvider/overrides.d.ts +16 -0
  64. package/dist/components/ThemeProvider/overrides.d.ts.map +1 -0
  65. package/dist/index.css +1 -1
  66. package/dist/index.d.ts +2 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +6230 -4656
  69. package/dist/index.js.map +1 -1
  70. package/dist/shared/textOf.d.ts +7 -0
  71. package/dist/shared/textOf.d.ts.map +1 -0
  72. package/dist/table.js +1 -1
  73. package/package.json +5 -2
  74. package/src/components/Button/Button.tsx +12 -1
  75. package/src/components/ColorMode/ColorMode.meta.ts +1 -1
  76. package/src/components/ColorMode/ColorMode.tsx +16 -37
  77. package/src/components/ColorMode/storage.native.ts +8 -0
  78. package/src/components/ColorMode/storage.ts +19 -0
  79. package/src/components/ColorMode/styles.css.ts +6 -0
  80. package/src/components/ColorMode/useSystemScheme.native.ts +6 -0
  81. package/src/components/ColorMode/useSystemScheme.ts +19 -0
  82. package/src/components/Combobox/Combobox.meta.ts +1 -1
  83. package/src/components/Combobox/Combobox.native.tsx +295 -0
  84. package/src/components/Combobox/Combobox.tsx +14 -8
  85. package/src/components/Combobox/comboboxState.ts +107 -0
  86. package/src/components/Combobox/native.css.ts +33 -0
  87. package/src/components/Combobox/useComboboxRoot.ts +17 -91
  88. package/src/components/Drawer/Drawer.meta.ts +1 -1
  89. package/src/components/Drawer/Drawer.native.tsx +29 -7
  90. package/src/components/Drawer/Drawer.tsx +11 -2
  91. package/src/components/Drawer/DrawerSnap.stories.tsx +22 -2
  92. package/src/components/Drawer/native.css.ts +4 -0
  93. package/src/components/Drawer/styles.css.ts +4 -0
  94. package/src/components/Form/Form.meta.ts +1 -1
  95. package/src/components/Form/Form.native.tsx +120 -0
  96. package/src/components/Form/FormSubmitContext.ts +12 -0
  97. package/src/components/Listbox/Listbox.meta.ts +1 -1
  98. package/src/components/Listbox/Listbox.native.tsx +153 -0
  99. package/src/components/Listbox/native.css.ts +91 -0
  100. package/src/components/QrCode/QrCode.meta.ts +18 -0
  101. package/src/components/QrCode/QrCode.native.tsx +31 -0
  102. package/src/components/QrCode/QrCode.stories.tsx +44 -0
  103. package/src/components/QrCode/QrCode.tsx +30 -0
  104. package/src/components/QrCode/geometry.ts +34 -0
  105. package/src/components/QrCode/styles.css.ts +12 -0
  106. package/src/components/QrCode/types.ts +6 -0
  107. package/src/components/ScrollArea/ScrollArea.meta.ts +1 -1
  108. package/src/components/ScrollArea/ScrollArea.native.tsx +61 -0
  109. package/src/components/Select/Select.meta.ts +1 -1
  110. package/src/components/Select/Select.native.tsx +224 -0
  111. package/src/components/Select/Select.stories.tsx +49 -1
  112. package/src/components/Select/Select.tsx +20 -3
  113. package/src/components/Select/native.css.ts +13 -0
  114. package/src/components/Select/selectState.ts +36 -0
  115. package/src/components/Select/styles.css.ts +11 -0
  116. package/src/components/Select/useSelectRoot.ts +9 -30
  117. package/src/components/ThemeProvider/ThemeOverrides.stories.tsx +113 -0
  118. package/src/components/ThemeProvider/ThemeProvider.meta.ts +1 -1
  119. package/src/components/ThemeProvider/ThemeProvider.native.tsx +36 -7
  120. package/src/components/ThemeProvider/ThemeProvider.tsx +42 -6
  121. package/src/components/ThemeProvider/overrideRule.ts +39 -0
  122. package/src/components/ThemeProvider/overrides.ts +27 -0
  123. package/src/form.native.ts +7 -0
  124. package/src/index.native.ts +16 -0
  125. package/src/index.ts +2 -0
  126. package/src/shared/focusInput.native.ts +18 -0
  127. package/src/shared/textOf.ts +13 -0
  128. package/dist/Table-Bms2ftt3.js.map +0 -1
package/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # @duro-app/ui
2
+
3
+ Duro's components, written with [react-strict-dom](https://github.com/facebook/react-strict-dom):
4
+ one source for the web and for React Native. Component docs, props and
5
+ recipes: `npx @duro-app/cli <Name>`, or the repository's `CLAUDE.md`.
6
+
7
+ ```sh
8
+ pnpm add @duro-app/ui @duro-app/tokens react-strict-dom react-hook-form
9
+ ```
10
+
11
+ ## React Native
12
+
13
+ Metro resolves the package's `react-native` export condition to
14
+ `src/index.native.ts`, a barrel of the components that have a native
15
+ variant (`npx @duro-app/cli <Name>` says `native: true`); `@duro-app/ui/form`
16
+ resolves to `src/form.native.ts`. babel-preset-expo compiles the source.
17
+
18
+ **Peers.** Metro does not tree-shake, so on native every one of these is
19
+ required, though npm lists them as optional (they are the web build's
20
+ optional peers):
21
+
22
+ | Peer | For |
23
+ | -------------------------------------------------------------- | ------------------------------------------------------- |
24
+ | `react-native` ≥ 0.81 | the platform |
25
+ | `react-native-gesture-handler` ^2.28 | sheet drags, Toast swipe |
26
+ | `react-native-reanimated` ≥ 4.1, `react-native-worklets` ≥ 0.5 | gestures and Spinner on the UI thread |
27
+ | `react-native-safe-area-context` ^5.6 | insets (mount its `SafeAreaProvider`; expo-router does) |
28
+ | `react-native-svg` ^15.12 | Icon and the glyphs |
29
+ | `react-hook-form` ^7.55 | Field binding (a required peer on both platforms) |
30
+ | `@hookform/resolvers` ^5, `effect` ^3 | only for `@duro-app/ui/form` |
31
+
32
+ **One copy of each.** Resolve `react`, `react-native`, the native peers,
33
+ `react-strict-dom`, `react-hook-form`, `@hookform/resolvers`, `effect` and
34
+ `@duro-app/*` from the app, so the bundle has one React renderer and one
35
+ react-strict-dom. With a linked or workspace copy of Duro, a Metro
36
+ `resolveRequest` that resolves those names from the app's `package.json`
37
+ does it; `examples/native/metro.config.mjs` in this repository is one.
38
+
39
+ **What differs on native.**
40
+
41
+ - Dialog, Drawer, Menu, Popover and the Select and Combobox sheets render in
42
+ an RN `Modal`; Toast draws through a portal host. Mount `PortalHost` inside a
43
+ natively presented route so toasts draw above it.
44
+ - Select and Combobox open a bottom sheet; Tooltip draws nothing and gives its
45
+ text to the trigger as an accessibility hint.
46
+ - A `type="submit"` Button inside `Form` submits it (there is no DOM submit
47
+ event).
48
+ - There are no arrow keys: keyboard navigation is the web's; native gets the
49
+ screen-reader roles and states.