@hanzogui/demos 2.0.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 (524) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/AccordionDemo.cjs +111 -0
  3. package/dist/cjs/AccordionDemo.native.js +121 -0
  4. package/dist/cjs/AccordionDemo.native.js.map +1 -0
  5. package/dist/cjs/AddThemeDemo.cjs +71 -0
  6. package/dist/cjs/AddThemeDemo.native.js +74 -0
  7. package/dist/cjs/AddThemeDemo.native.js.map +1 -0
  8. package/dist/cjs/AlertDialogDemo.cjs +96 -0
  9. package/dist/cjs/AlertDialogDemo.native.js +99 -0
  10. package/dist/cjs/AlertDialogDemo.native.js.map +1 -0
  11. package/dist/cjs/AnimationsDelayDemo.cjs +85 -0
  12. package/dist/cjs/AnimationsDelayDemo.native.js +92 -0
  13. package/dist/cjs/AnimationsDelayDemo.native.js.map +1 -0
  14. package/dist/cjs/AnimationsDemo.cjs +100 -0
  15. package/dist/cjs/AnimationsDemo.native.js +107 -0
  16. package/dist/cjs/AnimationsDemo.native.js.map +1 -0
  17. package/dist/cjs/AnimationsEnterDemo.cjs +75 -0
  18. package/dist/cjs/AnimationsEnterDemo.native.js +82 -0
  19. package/dist/cjs/AnimationsEnterDemo.native.js.map +1 -0
  20. package/dist/cjs/AnimationsHoverDemo.cjs +47 -0
  21. package/dist/cjs/AnimationsHoverDemo.native.js +50 -0
  22. package/dist/cjs/AnimationsHoverDemo.native.js.map +1 -0
  23. package/dist/cjs/AnimationsPresenceDemo.cjs +123 -0
  24. package/dist/cjs/AnimationsPresenceDemo.native.js +134 -0
  25. package/dist/cjs/AnimationsPresenceDemo.native.js.map +1 -0
  26. package/dist/cjs/AnimationsTimingDemo.cjs +46 -0
  27. package/dist/cjs/AnimationsTimingDemo.native.js +49 -0
  28. package/dist/cjs/AnimationsTimingDemo.native.js.map +1 -0
  29. package/dist/cjs/AvatarDemo.cjs +53 -0
  30. package/dist/cjs/AvatarDemo.native.js +56 -0
  31. package/dist/cjs/AvatarDemo.native.js.map +1 -0
  32. package/dist/cjs/BoxShadowTokenDemo.cjs +57 -0
  33. package/dist/cjs/BoxShadowTokenDemo.native.js +62 -0
  34. package/dist/cjs/BoxShadowTokenDemo.native.js.map +1 -0
  35. package/dist/cjs/BuildAButtonDemo.cjs +129 -0
  36. package/dist/cjs/BuildAButtonDemo.native.js +132 -0
  37. package/dist/cjs/BuildAButtonDemo.native.js.map +1 -0
  38. package/dist/cjs/ButtonDemo.cjs +89 -0
  39. package/dist/cjs/ButtonDemo.native.js +92 -0
  40. package/dist/cjs/ButtonDemo.native.js.map +1 -0
  41. package/dist/cjs/CardDemo.cjs +89 -0
  42. package/dist/cjs/CardDemo.native.js +92 -0
  43. package/dist/cjs/CardDemo.native.js.map +1 -0
  44. package/dist/cjs/CheckboxDemo.cjs +79 -0
  45. package/dist/cjs/CheckboxDemo.native.js +83 -0
  46. package/dist/cjs/CheckboxDemo.native.js.map +1 -0
  47. package/dist/cjs/CheckboxHeadlessDemo.cjs +87 -0
  48. package/dist/cjs/CheckboxHeadlessDemo.native.js +90 -0
  49. package/dist/cjs/CheckboxHeadlessDemo.native.js.map +1 -0
  50. package/dist/cjs/CheckboxUnstyledDemo.cjs +78 -0
  51. package/dist/cjs/CheckboxUnstyledDemo.native.js +81 -0
  52. package/dist/cjs/CheckboxUnstyledDemo.native.js.map +1 -0
  53. package/dist/cjs/ColorsDemo.cjs +133 -0
  54. package/dist/cjs/ColorsDemo.native.js +143 -0
  55. package/dist/cjs/ColorsDemo.native.js.map +1 -0
  56. package/dist/cjs/ContextMenuDemo.cjs +224 -0
  57. package/dist/cjs/ContextMenuDemo.native.js +230 -0
  58. package/dist/cjs/ContextMenuDemo.native.js.map +1 -0
  59. package/dist/cjs/DialogDemo.cjs +212 -0
  60. package/dist/cjs/DialogDemo.native.js +222 -0
  61. package/dist/cjs/DialogDemo.native.js.map +1 -0
  62. package/dist/cjs/FormsDemo.cjs +85 -0
  63. package/dist/cjs/FormsDemo.native.js +92 -0
  64. package/dist/cjs/FormsDemo.native.js.map +1 -0
  65. package/dist/cjs/Grid.cjs +69 -0
  66. package/dist/cjs/Grid.native.js +75 -0
  67. package/dist/cjs/Grid.native.js.map +1 -0
  68. package/dist/cjs/GroupDemo.cjs +92 -0
  69. package/dist/cjs/GroupDemo.native.js +97 -0
  70. package/dist/cjs/GroupDemo.native.js.map +1 -0
  71. package/dist/cjs/HeadingsDemo.cjs +45 -0
  72. package/dist/cjs/HeadingsDemo.native.js +48 -0
  73. package/dist/cjs/HeadingsDemo.native.js.map +1 -0
  74. package/dist/cjs/ImageDemo.cjs +38 -0
  75. package/dist/cjs/ImageDemo.native.js +41 -0
  76. package/dist/cjs/ImageDemo.native.js.map +1 -0
  77. package/dist/cjs/InputsDemo.cjs +62 -0
  78. package/dist/cjs/InputsDemo.native.js +65 -0
  79. package/dist/cjs/InputsDemo.native.js.map +1 -0
  80. package/dist/cjs/LabelDemo.cjs +65 -0
  81. package/dist/cjs/LabelDemo.native.js +68 -0
  82. package/dist/cjs/LabelDemo.native.js.map +1 -0
  83. package/dist/cjs/LinearGradientDemo.cjs +48 -0
  84. package/dist/cjs/LinearGradientDemo.native.js +53 -0
  85. package/dist/cjs/LinearGradientDemo.native.js.map +1 -0
  86. package/dist/cjs/ListItemDemo.cjs +101 -0
  87. package/dist/cjs/ListItemDemo.native.js +104 -0
  88. package/dist/cjs/ListItemDemo.native.js.map +1 -0
  89. package/dist/cjs/LucideIconsDemo.cjs +93 -0
  90. package/dist/cjs/LucideIconsDemo.native.js +105 -0
  91. package/dist/cjs/LucideIconsDemo.native.js.map +1 -0
  92. package/dist/cjs/MenuDemo.cjs +227 -0
  93. package/dist/cjs/MenuDemo.native.js +233 -0
  94. package/dist/cjs/MenuDemo.native.js.map +1 -0
  95. package/dist/cjs/NewInputsDemo.cjs +63 -0
  96. package/dist/cjs/NewInputsDemo.native.js +66 -0
  97. package/dist/cjs/NewInputsDemo.native.js.map +1 -0
  98. package/dist/cjs/PopoverDemo.cjs +150 -0
  99. package/dist/cjs/PopoverDemo.native.js +157 -0
  100. package/dist/cjs/PopoverDemo.native.js.map +1 -0
  101. package/dist/cjs/ProgressDemo.cjs +88 -0
  102. package/dist/cjs/ProgressDemo.native.js +115 -0
  103. package/dist/cjs/ProgressDemo.native.js.map +1 -0
  104. package/dist/cjs/RadioGroupDemo.cjs +74 -0
  105. package/dist/cjs/RadioGroupDemo.native.js +77 -0
  106. package/dist/cjs/RadioGroupDemo.native.js.map +1 -0
  107. package/dist/cjs/RadioGroupHeadlessDemo.cjs +168 -0
  108. package/dist/cjs/RadioGroupHeadlessDemo.native.js +178 -0
  109. package/dist/cjs/RadioGroupHeadlessDemo.native.js.map +1 -0
  110. package/dist/cjs/RadioGroupUnstyledDemo.cjs +141 -0
  111. package/dist/cjs/RadioGroupUnstyledDemo.native.js +144 -0
  112. package/dist/cjs/RadioGroupUnstyledDemo.native.js.map +1 -0
  113. package/dist/cjs/ReplaceThemeDemo.cjs +78 -0
  114. package/dist/cjs/ReplaceThemeDemo.native.js +81 -0
  115. package/dist/cjs/ReplaceThemeDemo.native.js.map +1 -0
  116. package/dist/cjs/ScrollViewDemo.cjs +74 -0
  117. package/dist/cjs/ScrollViewDemo.native.js +77 -0
  118. package/dist/cjs/ScrollViewDemo.native.js.map +1 -0
  119. package/dist/cjs/SelectDemo.cjs +236 -0
  120. package/dist/cjs/SelectDemo.native.js +252 -0
  121. package/dist/cjs/SelectDemo.native.js.map +1 -0
  122. package/dist/cjs/SeparatorDemo.cjs +60 -0
  123. package/dist/cjs/SeparatorDemo.native.js +63 -0
  124. package/dist/cjs/SeparatorDemo.native.js.map +1 -0
  125. package/dist/cjs/ShapesDemo.cjs +42 -0
  126. package/dist/cjs/ShapesDemo.native.js +45 -0
  127. package/dist/cjs/ShapesDemo.native.js.map +1 -0
  128. package/dist/cjs/SheetDemo.cjs +192 -0
  129. package/dist/cjs/SheetDemo.native.js +221 -0
  130. package/dist/cjs/SheetDemo.native.js.map +1 -0
  131. package/dist/cjs/SliderDemo.cjs +58 -0
  132. package/dist/cjs/SliderDemo.native.js +62 -0
  133. package/dist/cjs/SliderDemo.native.js.map +1 -0
  134. package/dist/cjs/SpinnerDemo.cjs +41 -0
  135. package/dist/cjs/SpinnerDemo.native.js +44 -0
  136. package/dist/cjs/SpinnerDemo.native.js.map +1 -0
  137. package/dist/cjs/StacksDemo.cjs +107 -0
  138. package/dist/cjs/StacksDemo.native.js +111 -0
  139. package/dist/cjs/StacksDemo.native.js.map +1 -0
  140. package/dist/cjs/SwitchDemo.cjs +101 -0
  141. package/dist/cjs/SwitchDemo.native.js +107 -0
  142. package/dist/cjs/SwitchDemo.native.js.map +1 -0
  143. package/dist/cjs/SwitchHeadlessDemo.cjs +103 -0
  144. package/dist/cjs/SwitchHeadlessDemo.native.js +110 -0
  145. package/dist/cjs/SwitchHeadlessDemo.native.js.map +1 -0
  146. package/dist/cjs/SwitchUnstyledDemo.cjs +89 -0
  147. package/dist/cjs/SwitchUnstyledDemo.native.js +92 -0
  148. package/dist/cjs/SwitchUnstyledDemo.native.js.map +1 -0
  149. package/dist/cjs/TabsAdvancedDemo.cjs +340 -0
  150. package/dist/cjs/TabsAdvancedDemo.native.js +388 -0
  151. package/dist/cjs/TabsAdvancedDemo.native.js.map +1 -0
  152. package/dist/cjs/TabsDemo.cjs +214 -0
  153. package/dist/cjs/TabsDemo.native.js +225 -0
  154. package/dist/cjs/TabsDemo.native.js.map +1 -0
  155. package/dist/cjs/TabsHeadlessDemo.cjs +130 -0
  156. package/dist/cjs/TabsHeadlessDemo.native.js +144 -0
  157. package/dist/cjs/TabsHeadlessDemo.native.js.map +1 -0
  158. package/dist/cjs/TextDemo.cjs +49 -0
  159. package/dist/cjs/TextDemo.native.js +52 -0
  160. package/dist/cjs/TextDemo.native.js.map +1 -0
  161. package/dist/cjs/ThemeBuilderDemo.cjs +178 -0
  162. package/dist/cjs/ThemeBuilderDemo.native.js +181 -0
  163. package/dist/cjs/ThemeBuilderDemo.native.js.map +1 -0
  164. package/dist/cjs/ThemeInverseDemo.cjs +99 -0
  165. package/dist/cjs/ThemeInverseDemo.native.js +102 -0
  166. package/dist/cjs/ThemeInverseDemo.native.js.map +1 -0
  167. package/dist/cjs/ToastDemo.cjs +150 -0
  168. package/dist/cjs/ToastDemo.native.js +163 -0
  169. package/dist/cjs/ToastDemo.native.js.map +1 -0
  170. package/dist/cjs/ToastDuplicateDemo.cjs +83 -0
  171. package/dist/cjs/ToastDuplicateDemo.native.js +92 -0
  172. package/dist/cjs/ToastDuplicateDemo.native.js.map +1 -0
  173. package/dist/cjs/ToggleGroupDemo.cjs +120 -0
  174. package/dist/cjs/ToggleGroupDemo.native.js +123 -0
  175. package/dist/cjs/ToggleGroupDemo.native.js.map +1 -0
  176. package/dist/cjs/TokensDemo.cjs +123 -0
  177. package/dist/cjs/TokensDemo.native.js +145 -0
  178. package/dist/cjs/TokensDemo.native.js.map +1 -0
  179. package/dist/cjs/TooltipDemo.cjs +131 -0
  180. package/dist/cjs/TooltipDemo.native.js +135 -0
  181. package/dist/cjs/TooltipDemo.native.js.map +1 -0
  182. package/dist/cjs/UpdateThemeDemo.cjs +80 -0
  183. package/dist/cjs/UpdateThemeDemo.native.js +83 -0
  184. package/dist/cjs/UpdateThemeDemo.native.js.map +1 -0
  185. package/dist/cjs/WebNativeImageDemo.cjs +34 -0
  186. package/dist/cjs/WebNativeImageDemo.native.js +37 -0
  187. package/dist/cjs/WebNativeImageDemo.native.js.map +1 -0
  188. package/dist/cjs/gui.config.cjs +29 -0
  189. package/dist/cjs/gui.config.native.js +32 -0
  190. package/dist/cjs/gui.config.native.js.map +1 -0
  191. package/dist/cjs/index.cjs +79 -0
  192. package/dist/cjs/index.native.js +82 -0
  193. package/dist/cjs/index.native.js.map +1 -0
  194. package/dist/cjs/useOnIntersecting.cjs +68 -0
  195. package/dist/cjs/useOnIntersecting.native.js +105 -0
  196. package/dist/cjs/useOnIntersecting.native.js.map +1 -0
  197. package/dist/esm/AccordionDemo.mjs +88 -0
  198. package/dist/esm/AccordionDemo.mjs.map +1 -0
  199. package/dist/esm/AccordionDemo.native.js +95 -0
  200. package/dist/esm/AccordionDemo.native.js.map +1 -0
  201. package/dist/esm/AddThemeDemo.mjs +37 -0
  202. package/dist/esm/AddThemeDemo.mjs.map +1 -0
  203. package/dist/esm/AddThemeDemo.native.js +37 -0
  204. package/dist/esm/AddThemeDemo.native.js.map +1 -0
  205. package/dist/esm/AlertDialogDemo.mjs +73 -0
  206. package/dist/esm/AlertDialogDemo.mjs.map +1 -0
  207. package/dist/esm/AlertDialogDemo.native.js +73 -0
  208. package/dist/esm/AlertDialogDemo.native.js.map +1 -0
  209. package/dist/esm/AnimationsDelayDemo.mjs +51 -0
  210. package/dist/esm/AnimationsDelayDemo.mjs.map +1 -0
  211. package/dist/esm/AnimationsDelayDemo.native.js +55 -0
  212. package/dist/esm/AnimationsDelayDemo.native.js.map +1 -0
  213. package/dist/esm/AnimationsDemo.mjs +76 -0
  214. package/dist/esm/AnimationsDemo.mjs.map +1 -0
  215. package/dist/esm/AnimationsDemo.native.js +80 -0
  216. package/dist/esm/AnimationsDemo.native.js.map +1 -0
  217. package/dist/esm/AnimationsEnterDemo.mjs +41 -0
  218. package/dist/esm/AnimationsEnterDemo.mjs.map +1 -0
  219. package/dist/esm/AnimationsEnterDemo.native.js +45 -0
  220. package/dist/esm/AnimationsEnterDemo.native.js.map +1 -0
  221. package/dist/esm/AnimationsHoverDemo.mjs +24 -0
  222. package/dist/esm/AnimationsHoverDemo.mjs.map +1 -0
  223. package/dist/esm/AnimationsHoverDemo.native.js +24 -0
  224. package/dist/esm/AnimationsHoverDemo.native.js.map +1 -0
  225. package/dist/esm/AnimationsPresenceDemo.mjs +88 -0
  226. package/dist/esm/AnimationsPresenceDemo.mjs.map +1 -0
  227. package/dist/esm/AnimationsPresenceDemo.native.js +96 -0
  228. package/dist/esm/AnimationsPresenceDemo.native.js.map +1 -0
  229. package/dist/esm/AnimationsTimingDemo.mjs +23 -0
  230. package/dist/esm/AnimationsTimingDemo.mjs.map +1 -0
  231. package/dist/esm/AnimationsTimingDemo.native.js +23 -0
  232. package/dist/esm/AnimationsTimingDemo.native.js.map +1 -0
  233. package/dist/esm/AvatarDemo.mjs +30 -0
  234. package/dist/esm/AvatarDemo.mjs.map +1 -0
  235. package/dist/esm/AvatarDemo.native.js +30 -0
  236. package/dist/esm/AvatarDemo.native.js.map +1 -0
  237. package/dist/esm/BoxShadowTokenDemo.mjs +34 -0
  238. package/dist/esm/BoxShadowTokenDemo.mjs.map +1 -0
  239. package/dist/esm/BoxShadowTokenDemo.native.js +36 -0
  240. package/dist/esm/BoxShadowTokenDemo.native.js.map +1 -0
  241. package/dist/esm/BuildAButtonDemo.mjs +106 -0
  242. package/dist/esm/BuildAButtonDemo.mjs.map +1 -0
  243. package/dist/esm/BuildAButtonDemo.native.js +106 -0
  244. package/dist/esm/BuildAButtonDemo.native.js.map +1 -0
  245. package/dist/esm/ButtonDemo.mjs +66 -0
  246. package/dist/esm/ButtonDemo.mjs.map +1 -0
  247. package/dist/esm/ButtonDemo.native.js +66 -0
  248. package/dist/esm/ButtonDemo.native.js.map +1 -0
  249. package/dist/esm/CardDemo.mjs +65 -0
  250. package/dist/esm/CardDemo.mjs.map +1 -0
  251. package/dist/esm/CardDemo.native.js +65 -0
  252. package/dist/esm/CardDemo.native.js.map +1 -0
  253. package/dist/esm/CheckboxDemo.mjs +55 -0
  254. package/dist/esm/CheckboxDemo.mjs.map +1 -0
  255. package/dist/esm/CheckboxDemo.native.js +56 -0
  256. package/dist/esm/CheckboxDemo.native.js.map +1 -0
  257. package/dist/esm/CheckboxHeadlessDemo.mjs +53 -0
  258. package/dist/esm/CheckboxHeadlessDemo.mjs.map +1 -0
  259. package/dist/esm/CheckboxHeadlessDemo.native.js +53 -0
  260. package/dist/esm/CheckboxHeadlessDemo.native.js.map +1 -0
  261. package/dist/esm/CheckboxUnstyledDemo.mjs +54 -0
  262. package/dist/esm/CheckboxUnstyledDemo.mjs.map +1 -0
  263. package/dist/esm/CheckboxUnstyledDemo.native.js +54 -0
  264. package/dist/esm/CheckboxUnstyledDemo.native.js.map +1 -0
  265. package/dist/esm/ColorsDemo.mjs +110 -0
  266. package/dist/esm/ColorsDemo.mjs.map +1 -0
  267. package/dist/esm/ColorsDemo.native.js +117 -0
  268. package/dist/esm/ColorsDemo.native.js.map +1 -0
  269. package/dist/esm/ContextMenuDemo.mjs +190 -0
  270. package/dist/esm/ContextMenuDemo.mjs.map +1 -0
  271. package/dist/esm/ContextMenuDemo.native.js +193 -0
  272. package/dist/esm/ContextMenuDemo.native.js.map +1 -0
  273. package/dist/esm/DialogDemo.mjs +189 -0
  274. package/dist/esm/DialogDemo.mjs.map +1 -0
  275. package/dist/esm/DialogDemo.native.js +196 -0
  276. package/dist/esm/DialogDemo.native.js.map +1 -0
  277. package/dist/esm/FormsDemo.mjs +51 -0
  278. package/dist/esm/FormsDemo.mjs.map +1 -0
  279. package/dist/esm/FormsDemo.native.js +55 -0
  280. package/dist/esm/FormsDemo.native.js.map +1 -0
  281. package/dist/esm/Grid.mjs +35 -0
  282. package/dist/esm/Grid.mjs.map +1 -0
  283. package/dist/esm/Grid.native.js +38 -0
  284. package/dist/esm/Grid.native.js.map +1 -0
  285. package/dist/esm/GroupDemo.mjs +69 -0
  286. package/dist/esm/GroupDemo.mjs.map +1 -0
  287. package/dist/esm/GroupDemo.native.js +71 -0
  288. package/dist/esm/GroupDemo.native.js.map +1 -0
  289. package/dist/esm/HeadingsDemo.mjs +22 -0
  290. package/dist/esm/HeadingsDemo.mjs.map +1 -0
  291. package/dist/esm/HeadingsDemo.native.js +22 -0
  292. package/dist/esm/HeadingsDemo.native.js.map +1 -0
  293. package/dist/esm/ImageDemo.mjs +15 -0
  294. package/dist/esm/ImageDemo.mjs.map +1 -0
  295. package/dist/esm/ImageDemo.native.js +15 -0
  296. package/dist/esm/ImageDemo.native.js.map +1 -0
  297. package/dist/esm/InputsDemo.mjs +39 -0
  298. package/dist/esm/InputsDemo.mjs.map +1 -0
  299. package/dist/esm/InputsDemo.native.js +39 -0
  300. package/dist/esm/InputsDemo.native.js.map +1 -0
  301. package/dist/esm/LabelDemo.mjs +42 -0
  302. package/dist/esm/LabelDemo.mjs.map +1 -0
  303. package/dist/esm/LabelDemo.native.js +42 -0
  304. package/dist/esm/LabelDemo.native.js.map +1 -0
  305. package/dist/esm/LinearGradientDemo.mjs +25 -0
  306. package/dist/esm/LinearGradientDemo.mjs.map +1 -0
  307. package/dist/esm/LinearGradientDemo.native.js +27 -0
  308. package/dist/esm/LinearGradientDemo.native.js.map +1 -0
  309. package/dist/esm/ListItemDemo.mjs +78 -0
  310. package/dist/esm/ListItemDemo.mjs.map +1 -0
  311. package/dist/esm/ListItemDemo.native.js +78 -0
  312. package/dist/esm/ListItemDemo.native.js.map +1 -0
  313. package/dist/esm/LucideIconsDemo.mjs +59 -0
  314. package/dist/esm/LucideIconsDemo.mjs.map +1 -0
  315. package/dist/esm/LucideIconsDemo.native.js +68 -0
  316. package/dist/esm/LucideIconsDemo.native.js.map +1 -0
  317. package/dist/esm/MenuDemo.mjs +193 -0
  318. package/dist/esm/MenuDemo.mjs.map +1 -0
  319. package/dist/esm/MenuDemo.native.js +196 -0
  320. package/dist/esm/MenuDemo.native.js.map +1 -0
  321. package/dist/esm/NewInputsDemo.mjs +40 -0
  322. package/dist/esm/NewInputsDemo.mjs.map +1 -0
  323. package/dist/esm/NewInputsDemo.native.js +40 -0
  324. package/dist/esm/NewInputsDemo.native.js.map +1 -0
  325. package/dist/esm/PopoverDemo.mjs +126 -0
  326. package/dist/esm/PopoverDemo.mjs.map +1 -0
  327. package/dist/esm/PopoverDemo.native.js +130 -0
  328. package/dist/esm/PopoverDemo.native.js.map +1 -0
  329. package/dist/esm/ProgressDemo.mjs +54 -0
  330. package/dist/esm/ProgressDemo.mjs.map +1 -0
  331. package/dist/esm/ProgressDemo.native.js +78 -0
  332. package/dist/esm/ProgressDemo.native.js.map +1 -0
  333. package/dist/esm/RadioGroupDemo.mjs +50 -0
  334. package/dist/esm/RadioGroupDemo.mjs.map +1 -0
  335. package/dist/esm/RadioGroupDemo.native.js +50 -0
  336. package/dist/esm/RadioGroupDemo.native.js.map +1 -0
  337. package/dist/esm/RadioGroupHeadlessDemo.mjs +134 -0
  338. package/dist/esm/RadioGroupHeadlessDemo.mjs.map +1 -0
  339. package/dist/esm/RadioGroupHeadlessDemo.native.js +141 -0
  340. package/dist/esm/RadioGroupHeadlessDemo.native.js.map +1 -0
  341. package/dist/esm/RadioGroupUnstyledDemo.mjs +118 -0
  342. package/dist/esm/RadioGroupUnstyledDemo.mjs.map +1 -0
  343. package/dist/esm/RadioGroupUnstyledDemo.native.js +118 -0
  344. package/dist/esm/RadioGroupUnstyledDemo.native.js.map +1 -0
  345. package/dist/esm/ReplaceThemeDemo.mjs +44 -0
  346. package/dist/esm/ReplaceThemeDemo.mjs.map +1 -0
  347. package/dist/esm/ReplaceThemeDemo.native.js +44 -0
  348. package/dist/esm/ReplaceThemeDemo.native.js.map +1 -0
  349. package/dist/esm/ScrollViewDemo.mjs +51 -0
  350. package/dist/esm/ScrollViewDemo.mjs.map +1 -0
  351. package/dist/esm/ScrollViewDemo.native.js +51 -0
  352. package/dist/esm/ScrollViewDemo.native.js.map +1 -0
  353. package/dist/esm/SelectDemo.mjs +201 -0
  354. package/dist/esm/SelectDemo.mjs.map +1 -0
  355. package/dist/esm/SelectDemo.native.js +214 -0
  356. package/dist/esm/SelectDemo.native.js.map +1 -0
  357. package/dist/esm/SeparatorDemo.mjs +37 -0
  358. package/dist/esm/SeparatorDemo.mjs.map +1 -0
  359. package/dist/esm/SeparatorDemo.native.js +37 -0
  360. package/dist/esm/SeparatorDemo.native.js.map +1 -0
  361. package/dist/esm/ShapesDemo.mjs +19 -0
  362. package/dist/esm/ShapesDemo.mjs.map +1 -0
  363. package/dist/esm/ShapesDemo.native.js +19 -0
  364. package/dist/esm/ShapesDemo.native.js.map +1 -0
  365. package/dist/esm/SheetDemo.mjs +158 -0
  366. package/dist/esm/SheetDemo.mjs.map +1 -0
  367. package/dist/esm/SheetDemo.native.js +184 -0
  368. package/dist/esm/SheetDemo.native.js.map +1 -0
  369. package/dist/esm/SliderDemo.mjs +35 -0
  370. package/dist/esm/SliderDemo.mjs.map +1 -0
  371. package/dist/esm/SliderDemo.native.js +36 -0
  372. package/dist/esm/SliderDemo.native.js.map +1 -0
  373. package/dist/esm/SpinnerDemo.mjs +18 -0
  374. package/dist/esm/SpinnerDemo.mjs.map +1 -0
  375. package/dist/esm/SpinnerDemo.native.js +18 -0
  376. package/dist/esm/SpinnerDemo.native.js.map +1 -0
  377. package/dist/esm/StacksDemo.mjs +84 -0
  378. package/dist/esm/StacksDemo.mjs.map +1 -0
  379. package/dist/esm/StacksDemo.native.js +84 -0
  380. package/dist/esm/StacksDemo.native.js.map +1 -0
  381. package/dist/esm/SwitchDemo.mjs +77 -0
  382. package/dist/esm/SwitchDemo.mjs.map +1 -0
  383. package/dist/esm/SwitchDemo.native.js +80 -0
  384. package/dist/esm/SwitchDemo.native.js.map +1 -0
  385. package/dist/esm/SwitchHeadlessDemo.mjs +69 -0
  386. package/dist/esm/SwitchHeadlessDemo.mjs.map +1 -0
  387. package/dist/esm/SwitchHeadlessDemo.native.js +73 -0
  388. package/dist/esm/SwitchHeadlessDemo.native.js.map +1 -0
  389. package/dist/esm/SwitchUnstyledDemo.mjs +65 -0
  390. package/dist/esm/SwitchUnstyledDemo.mjs.map +1 -0
  391. package/dist/esm/SwitchUnstyledDemo.native.js +65 -0
  392. package/dist/esm/SwitchUnstyledDemo.native.js.map +1 -0
  393. package/dist/esm/TabsAdvancedDemo.mjs +306 -0
  394. package/dist/esm/TabsAdvancedDemo.mjs.map +1 -0
  395. package/dist/esm/TabsAdvancedDemo.native.js +351 -0
  396. package/dist/esm/TabsAdvancedDemo.native.js.map +1 -0
  397. package/dist/esm/TabsDemo.mjs +180 -0
  398. package/dist/esm/TabsDemo.mjs.map +1 -0
  399. package/dist/esm/TabsDemo.native.js +188 -0
  400. package/dist/esm/TabsDemo.native.js.map +1 -0
  401. package/dist/esm/TabsHeadlessDemo.mjs +105 -0
  402. package/dist/esm/TabsHeadlessDemo.mjs.map +1 -0
  403. package/dist/esm/TabsHeadlessDemo.native.js +114 -0
  404. package/dist/esm/TabsHeadlessDemo.native.js.map +1 -0
  405. package/dist/esm/TextDemo.mjs +26 -0
  406. package/dist/esm/TextDemo.mjs.map +1 -0
  407. package/dist/esm/TextDemo.native.js +26 -0
  408. package/dist/esm/TextDemo.native.js.map +1 -0
  409. package/dist/esm/ThemeBuilderDemo.mjs +155 -0
  410. package/dist/esm/ThemeBuilderDemo.mjs.map +1 -0
  411. package/dist/esm/ThemeBuilderDemo.native.js +155 -0
  412. package/dist/esm/ThemeBuilderDemo.native.js.map +1 -0
  413. package/dist/esm/ThemeInverseDemo.mjs +76 -0
  414. package/dist/esm/ThemeInverseDemo.mjs.map +1 -0
  415. package/dist/esm/ThemeInverseDemo.native.js +76 -0
  416. package/dist/esm/ThemeInverseDemo.native.js.map +1 -0
  417. package/dist/esm/ToastDemo.mjs +116 -0
  418. package/dist/esm/ToastDemo.mjs.map +1 -0
  419. package/dist/esm/ToastDemo.native.js +126 -0
  420. package/dist/esm/ToastDemo.native.js.map +1 -0
  421. package/dist/esm/ToastDuplicateDemo.mjs +49 -0
  422. package/dist/esm/ToastDuplicateDemo.mjs.map +1 -0
  423. package/dist/esm/ToastDuplicateDemo.native.js +55 -0
  424. package/dist/esm/ToastDuplicateDemo.native.js.map +1 -0
  425. package/dist/esm/ToggleGroupDemo.mjs +97 -0
  426. package/dist/esm/ToggleGroupDemo.mjs.map +1 -0
  427. package/dist/esm/ToggleGroupDemo.native.js +97 -0
  428. package/dist/esm/ToggleGroupDemo.native.js.map +1 -0
  429. package/dist/esm/TokensDemo.mjs +89 -0
  430. package/dist/esm/TokensDemo.mjs.map +1 -0
  431. package/dist/esm/TokensDemo.native.js +108 -0
  432. package/dist/esm/TokensDemo.native.js.map +1 -0
  433. package/dist/esm/TooltipDemo.mjs +108 -0
  434. package/dist/esm/TooltipDemo.mjs.map +1 -0
  435. package/dist/esm/TooltipDemo.native.js +109 -0
  436. package/dist/esm/TooltipDemo.native.js.map +1 -0
  437. package/dist/esm/UpdateThemeDemo.mjs +46 -0
  438. package/dist/esm/UpdateThemeDemo.mjs.map +1 -0
  439. package/dist/esm/UpdateThemeDemo.native.js +46 -0
  440. package/dist/esm/UpdateThemeDemo.native.js.map +1 -0
  441. package/dist/esm/WebNativeImageDemo.mjs +11 -0
  442. package/dist/esm/WebNativeImageDemo.mjs.map +1 -0
  443. package/dist/esm/WebNativeImageDemo.native.js +11 -0
  444. package/dist/esm/WebNativeImageDemo.native.js.map +1 -0
  445. package/dist/esm/gui.config.mjs +6 -0
  446. package/dist/esm/gui.config.mjs.map +1 -0
  447. package/dist/esm/gui.config.native.js +6 -0
  448. package/dist/esm/gui.config.native.js.map +1 -0
  449. package/dist/esm/index.js +63 -0
  450. package/dist/esm/index.js.map +1 -0
  451. package/dist/esm/index.mjs +63 -0
  452. package/dist/esm/index.mjs.map +1 -0
  453. package/dist/esm/index.native.js +63 -0
  454. package/dist/esm/index.native.js.map +1 -0
  455. package/dist/esm/useOnIntersecting.mjs +44 -0
  456. package/dist/esm/useOnIntersecting.mjs.map +1 -0
  457. package/dist/esm/useOnIntersecting.native.js +78 -0
  458. package/dist/esm/useOnIntersecting.native.js.map +1 -0
  459. package/package.json +68 -0
  460. package/src/AccordionDemo.tsx +73 -0
  461. package/src/AddThemeDemo.tsx +35 -0
  462. package/src/AlertDialogDemo.tsx +56 -0
  463. package/src/AnimationsDelayDemo.tsx +49 -0
  464. package/src/AnimationsDemo.tsx +85 -0
  465. package/src/AnimationsEnterDemo.tsx +43 -0
  466. package/src/AnimationsHoverDemo.tsx +23 -0
  467. package/src/AnimationsPresenceDemo.tsx +93 -0
  468. package/src/AnimationsTimingDemo.tsx +22 -0
  469. package/src/AvatarDemo.tsx +23 -0
  470. package/src/BoxShadowTokenDemo.tsx +35 -0
  471. package/src/BuildAButtonDemo.tsx +72 -0
  472. package/src/ButtonDemo.tsx +49 -0
  473. package/src/CardDemo.tsx +44 -0
  474. package/src/CheckboxDemo.tsx +39 -0
  475. package/src/CheckboxHeadlessDemo.tsx +47 -0
  476. package/src/CheckboxUnstyledDemo.tsx +49 -0
  477. package/src/ColorsDemo.tsx +133 -0
  478. package/src/ContextMenuDemo.tsx +178 -0
  479. package/src/DialogDemo.tsx +180 -0
  480. package/src/FormsDemo.tsx +60 -0
  481. package/src/Grid.tsx +46 -0
  482. package/src/GroupDemo.tsx +56 -0
  483. package/src/HeadingsDemo.tsx +14 -0
  484. package/src/ImageDemo.tsx +15 -0
  485. package/src/InputsDemo.tsx +27 -0
  486. package/src/LabelDemo.tsx +28 -0
  487. package/src/LinearGradientDemo.tsx +28 -0
  488. package/src/ListItemDemo.tsx +65 -0
  489. package/src/LucideIconsDemo.tsx +59 -0
  490. package/src/MenuDemo.tsx +183 -0
  491. package/src/NewInputsDemo.tsx +28 -0
  492. package/src/PopoverDemo.tsx +130 -0
  493. package/src/ProgressDemo.tsx +76 -0
  494. package/src/RadioGroupDemo.tsx +35 -0
  495. package/src/RadioGroupHeadlessDemo.tsx +129 -0
  496. package/src/RadioGroupUnstyledDemo.tsx +121 -0
  497. package/src/ReplaceThemeDemo.tsx +53 -0
  498. package/src/ScrollViewDemo.tsx +18 -0
  499. package/src/SelectDemo.tsx +189 -0
  500. package/src/SeparatorDemo.tsx +18 -0
  501. package/src/ShapesDemo.tsx +10 -0
  502. package/src/SheetDemo.tsx +156 -0
  503. package/src/SliderDemo.tsx +23 -0
  504. package/src/SpinnerDemo.tsx +10 -0
  505. package/src/StacksDemo.tsx +58 -0
  506. package/src/SwitchDemo.tsx +52 -0
  507. package/src/SwitchHeadlessDemo.tsx +76 -0
  508. package/src/SwitchUnstyledDemo.tsx +58 -0
  509. package/src/TabsAdvancedDemo.tsx +351 -0
  510. package/src/TabsDemo.tsx +171 -0
  511. package/src/TabsHeadlessDemo.tsx +126 -0
  512. package/src/TextDemo.tsx +15 -0
  513. package/src/ThemeBuilderDemo.tsx +124 -0
  514. package/src/ThemeInverseDemo.tsx +37 -0
  515. package/src/ToastDemo.tsx +121 -0
  516. package/src/ToastDuplicateDemo.tsx +47 -0
  517. package/src/ToggleGroupDemo.tsx +82 -0
  518. package/src/TokensDemo.tsx +105 -0
  519. package/src/TooltipDemo.tsx +68 -0
  520. package/src/UpdateThemeDemo.tsx +57 -0
  521. package/src/WebNativeImageDemo.tsx +5 -0
  522. package/src/gui.config.ts +16 -0
  523. package/src/index.tsx +65 -0
  524. package/src/useOnIntersecting.tsx +89 -0
@@ -0,0 +1,129 @@
1
+ import type {
2
+ RadioGroupContextValue,
3
+ RadioGroupItemContextValue,
4
+ } from '@hanzogui/radio-headless'
5
+ import {
6
+ useRadioGroup,
7
+ useRadioGroupItem,
8
+ useRadioGroupItemIndicator,
9
+ } from '@hanzogui/radio-headless'
10
+ import { RovingFocusGroup } from '@hanzogui/roving-focus'
11
+ import React from 'react'
12
+ import { Pressable, StyleSheet, Text, View } from 'react-native'
13
+ import { isWeb, useTheme } from '@hanzo/gui'
14
+
15
+ const RadioGroupContext = React.createContext<RadioGroupContextValue>({})
16
+ const RadioGroupItemContext = React.createContext<RadioGroupItemContextValue>({
17
+ checked: false,
18
+ disabled: false,
19
+ })
20
+
21
+ export function RadioGroupHeadlessDemo() {
22
+ const { providerValue, frameAttrs, rovingFocusGroupAttrs } = useRadioGroup({
23
+ orientation: 'vertical',
24
+ name: 'form',
25
+ defaultValue: '3',
26
+ })
27
+ return (
28
+ <RadioGroupContext.Provider value={providerValue}>
29
+ <RovingFocusGroup {...rovingFocusGroupAttrs}>
30
+ <View style={styles.radioGroup} {...frameAttrs}>
31
+ <RadioGroupItem value="2" id="2" label="First Value" />
32
+ <RadioGroupItem value="3" id="3" label="Second Value" />
33
+ <RadioGroupItem value="4" id="4" label="Third Value" />
34
+ </View>
35
+ </RovingFocusGroup>
36
+ </RadioGroupContext.Provider>
37
+ )
38
+ }
39
+
40
+ function RadioGroupItem(props: { value: string; id: string; label: string }) {
41
+ const theme = useTheme()
42
+ const { value, id, label } = props
43
+ const {
44
+ providerValue,
45
+ native,
46
+ bubbleInput,
47
+ rovingFocusGroupAttrs,
48
+ frameAttrs,
49
+ isFormControl,
50
+ checked,
51
+ } = useRadioGroupItem({
52
+ radioGroupContext: RadioGroupContext,
53
+ value,
54
+ id,
55
+ })
56
+
57
+ return (
58
+ <RadioGroupItemContext.Provider value={providerValue}>
59
+ {isWeb && native ? (
60
+ bubbleInput
61
+ ) : (
62
+ <View style={styles.radioGroupItemContainer}>
63
+ <RovingFocusGroup.Item {...rovingFocusGroupAttrs}>
64
+ <Pressable
65
+ style={{
66
+ ...styles.radioGroupItem,
67
+ borderColor: theme.borderColor?.get(),
68
+ ...(checked
69
+ ? { borderWidth: 4 }
70
+ : { backgroundColor: theme.background?.get() }),
71
+ }}
72
+ {...frameAttrs}
73
+ onFocus={frameAttrs.onFocus as any}
74
+ >
75
+ <RadioGroupItemIndicator />
76
+ </Pressable>
77
+ </RovingFocusGroup.Item>
78
+ <Text style={{ color: theme.color?.get() }}>{label}</Text>
79
+ {isFormControl && bubbleInput}
80
+ </View>
81
+ )}
82
+ </RadioGroupItemContext.Provider>
83
+ )
84
+ }
85
+
86
+ function RadioGroupItemIndicator() {
87
+ const theme = useTheme()
88
+ const params = useRadioGroupItemIndicator({
89
+ radioGroupItemContext: RadioGroupItemContext,
90
+ disabled: false,
91
+ })
92
+ if (params.checked) {
93
+ return (
94
+ <View
95
+ style={{
96
+ ...styles.radioGroupItemIndicator,
97
+ backgroundColor: theme.color?.get(),
98
+ }}
99
+ {...params}
100
+ />
101
+ )
102
+ }
103
+ return null
104
+ }
105
+
106
+ const styles = StyleSheet.create({
107
+ radioGroup: {
108
+ flexDirection: 'column',
109
+ gap: 20,
110
+ alignItems: 'flex-start',
111
+ },
112
+ radioGroupItem: {
113
+ borderWidth: 2,
114
+ width: 30,
115
+ height: 30,
116
+ justifyContent: 'center',
117
+ alignItems: 'center',
118
+ },
119
+ radioGroupItemIndicator: {
120
+ width: '35%',
121
+ height: '35%',
122
+ },
123
+ radioGroupItemContainer: {
124
+ justifyContent: 'center',
125
+ alignItems: 'center',
126
+ flexDirection: 'row',
127
+ gap: 12,
128
+ },
129
+ })
@@ -0,0 +1,121 @@
1
+ import { Label, XStack, YStack, styled } from '@hanzo/gui'
2
+
3
+ import { createRadioGroup } from '@hanzogui/radio-group'
4
+
5
+ const RADIO_GROUP_ITEM_NAME = 'RadioGroupItem'
6
+
7
+ const RadioGroupItemFrame = styled(YStack, {
8
+ name: RADIO_GROUP_ITEM_NAME,
9
+ render: 'button',
10
+
11
+ rounded: 1000,
12
+ bg: '$background',
13
+ items: 'center',
14
+ justify: 'center',
15
+ borderWidth: 1,
16
+ borderColor: '$borderColor',
17
+ p: 0,
18
+
19
+ hoverStyle: {
20
+ borderColor: '$borderColorHover',
21
+ bg: '$backgroundHover',
22
+ },
23
+
24
+ focusStyle: {
25
+ borderColor: '$borderColorHover',
26
+ bg: '$backgroundHover',
27
+ },
28
+
29
+ focusVisibleStyle: {
30
+ outlineStyle: 'solid',
31
+ outlineWidth: 2,
32
+ outlineColor: '$outlineColor',
33
+ },
34
+
35
+ pressStyle: {
36
+ borderColor: '$borderColorFocus',
37
+ bg: '$backgroundFocus',
38
+ },
39
+
40
+ variants: {
41
+ disabled: {
42
+ true: {
43
+ pointerEvents: 'none',
44
+ userSelect: 'none',
45
+ cursor: 'not-allowed',
46
+
47
+ hoverStyle: {
48
+ borderColor: '$borderColor',
49
+ bg: '$background',
50
+ },
51
+
52
+ pressStyle: {
53
+ borderColor: '$borderColor',
54
+ bg: '$background',
55
+ },
56
+
57
+ focusVisibleStyle: {
58
+ outlineWidth: 0,
59
+ },
60
+ },
61
+ },
62
+ },
63
+ } as const)
64
+
65
+ const RADIO_GROUP_INDICATOR_NAME = 'RadioGroupIndicator'
66
+
67
+ const RadioGroupIndicatorFrame = styled(YStack, {
68
+ name: RADIO_GROUP_INDICATOR_NAME,
69
+ width: '53%',
70
+ height: '53%',
71
+ rounded: 1000,
72
+ bg: '$color',
73
+ })
74
+
75
+ const RADIO_GROUP_NAME = 'RadioGroup'
76
+
77
+ const RadioGroupFrame = styled(YStack, {
78
+ name: RADIO_GROUP_NAME,
79
+ variants: {
80
+ orientation: {
81
+ horizontal: {
82
+ flexDirection: 'row',
83
+ spaceDirection: 'horizontal',
84
+ },
85
+ vertical: {
86
+ flexDirection: 'column',
87
+ spaceDirection: 'vertical',
88
+ },
89
+ },
90
+ } as const,
91
+ })
92
+
93
+ const RadioGroup = createRadioGroup({
94
+ Frame: RadioGroupFrame,
95
+ Indicator: RadioGroupIndicatorFrame,
96
+ Item: RadioGroupItemFrame,
97
+ })
98
+
99
+ export function RadioGroupUnstyledDemo() {
100
+ return (
101
+ <RadioGroup aria-labelledby="Select one item" defaultValue="3" name="form">
102
+ <YStack width={200} items="center" gap="$2">
103
+ <RadioGroupItemWithLabel value="2" label="Option One" />
104
+ <RadioGroupItemWithLabel value="3" label="Option Two" />
105
+ </YStack>
106
+ </RadioGroup>
107
+ )
108
+ }
109
+
110
+ function RadioGroupItemWithLabel(props: { value: string; label: string }) {
111
+ const id = `radiogroup-${props.value}`
112
+ return (
113
+ <XStack width={300} items="center" gap="$4">
114
+ <RadioGroup.Item value={props.value} id={id}>
115
+ <RadioGroup.Indicator />
116
+ </RadioGroup.Item>
117
+
118
+ <Label htmlFor={id}>{props.label}</Label>
119
+ </XStack>
120
+ )
121
+ }
@@ -0,0 +1,53 @@
1
+ import React from 'react'
2
+ import { addTheme, replaceTheme } from '@hanzogui/theme'
3
+
4
+ import {
5
+ Button,
6
+ Square,
7
+ Theme,
8
+ XStack,
9
+ YStack,
10
+ useForceUpdate,
11
+ useIsomorphicLayoutEffect,
12
+ } from '@hanzo/gui'
13
+
14
+ export function ReplaceThemeDemo() {
15
+ const [theme, setTheme] = React.useState<any>()
16
+ const update = useForceUpdate()
17
+
18
+ useIsomorphicLayoutEffect(() => {
19
+ addTheme({
20
+ name: 'mytheme',
21
+ insertCSS: true,
22
+ theme: {
23
+ color: 'red',
24
+ color2: 'green',
25
+ },
26
+ })
27
+ setTheme('mytheme')
28
+ }, [])
29
+
30
+ return (
31
+ <YStack items="center" gap="$4">
32
+ <XStack gap="$5">
33
+ <Theme name={theme ?? null}>
34
+ <Square rounded="$8" size={100} bg="$color" />
35
+ </Theme>
36
+ </XStack>
37
+
38
+ <Button
39
+ onPress={() => {
40
+ replaceTheme({
41
+ name: 'mytheme',
42
+ theme: {
43
+ color: 'blue',
44
+ },
45
+ })
46
+ update()
47
+ }}
48
+ >
49
+ Replace theme to only have $color: blue
50
+ </Button>
51
+ </YStack>
52
+ )
53
+ }
@@ -0,0 +1,18 @@
1
+ import { Circle, ScrollView, Square, XStack } from '@hanzo/gui'
2
+
3
+ export function ScrollViewDemo() {
4
+ return (
5
+ <ScrollView maxH={250} width="75%" bg="$background" p="$4" rounded="$4">
6
+ <XStack flexWrap="wrap" items="center" justify="center">
7
+ <Square m="$4" size={120} bg="$color5" />
8
+ <Circle m="$4" size={120} bg="$color6" />
9
+ <Square m="$4" size={120} bg="$color7" />
10
+ <Circle m="$4" size={120} bg="$color8" />
11
+ <Square m="$4" size={120} bg="$color9" />
12
+ <Circle m="$4" size={120} bg="$color10" />
13
+ <Square m="$4" size={120} bg="$color11" />
14
+ <Circle m="$4" size={120} bg="$color12" />
15
+ </XStack>
16
+ </ScrollView>
17
+ )
18
+ }
@@ -0,0 +1,189 @@
1
+ import { Check, ChevronDown, ChevronUp } from '@hanzogui/lucide-icons-2'
2
+ import React from 'react'
3
+
4
+ import type { FontSizeTokens, SelectProps } from '@hanzo/gui'
5
+ import { Adapt, Label, Select, Sheet, Theme, XStack, YStack, getFontSize } from '@hanzo/gui'
6
+ import { LinearGradient } from 'gui/linear-gradient'
7
+
8
+ export function SelectDemo() {
9
+ return (
10
+ <Theme name="surface1">
11
+ <YStack gap="$4">
12
+ <XStack width="100%" items="center" gap="$4">
13
+ <Label htmlFor="select-demo-1" flex={1} minW={80}>
14
+ Custom
15
+ </Label>
16
+ <SelectDemoContents id="select-demo-1" />
17
+ </XStack>
18
+
19
+ <XStack width="100%" items="center" gap="$4">
20
+ <Label htmlFor="select-demo-2" flex={1} minW={80}>
21
+ Native
22
+ </Label>
23
+ <SelectDemoContents id="select-demo-2" native />
24
+ </XStack>
25
+ </YStack>
26
+ </Theme>
27
+ )
28
+ }
29
+
30
+ type SelectValue = Lowercase<(typeof items)[number]['name']>
31
+
32
+ // Helper to get item label from value - used by renderValue for SSR
33
+ const getItemLabel = (value: string) =>
34
+ items.find((item) => item.name.toLowerCase() === value)?.name
35
+
36
+ export function SelectDemoContents(
37
+ props: SelectProps<SelectValue> & { trigger?: React.ReactNode }
38
+ ) {
39
+ const [val, setVal] = React.useState<SelectValue>('apple')
40
+
41
+ return (
42
+ <Select
43
+ value={val}
44
+ onValueChange={setVal}
45
+ disablePreventBodyScroll
46
+ {...props}
47
+ // renderValue enables SSR support by providing the label synchronously
48
+ renderValue={getItemLabel}
49
+ >
50
+ {props?.trigger || (
51
+ <Select.Trigger
52
+ maxWidth={220}
53
+ iconAfter={ChevronDown}
54
+ borderRadius="$4"
55
+ backgroundColor="$background"
56
+ >
57
+ <Select.Value placeholder="Something" />
58
+ </Select.Trigger>
59
+ )}
60
+
61
+ <Adapt when="maxMd" platform="touch">
62
+ <Sheet native={!!props.native} modal dismissOnSnapToBottom transition="medium">
63
+ <Sheet.Frame>
64
+ <Sheet.ScrollView>
65
+ <Adapt.Contents />
66
+ </Sheet.ScrollView>
67
+ </Sheet.Frame>
68
+ <Sheet.Overlay
69
+ bg="$shadowColor"
70
+ transition="lazy"
71
+ enterStyle={{ opacity: 0 }}
72
+ exitStyle={{ opacity: 0 }}
73
+ />
74
+ </Sheet>
75
+ </Adapt>
76
+
77
+ <Select.Content>
78
+ <Select.ScrollUpButton
79
+ items="center"
80
+ justify="center"
81
+ position="relative"
82
+ width="100%"
83
+ height="$3"
84
+ >
85
+ <YStack z={10}>
86
+ <ChevronUp size={20} />
87
+ </YStack>
88
+ <LinearGradient
89
+ start={[0, 0]}
90
+ end={[0, 1]}
91
+ fullscreen
92
+ colors={['$background', 'transparent']}
93
+ rounded="$4"
94
+ />
95
+ </Select.ScrollUpButton>
96
+ <Select.Viewport
97
+ minW={200}
98
+ bg="$background"
99
+ rounded="$4"
100
+ borderWidth={1}
101
+ borderColor="$borderColor"
102
+ >
103
+ <Select.Group>
104
+ <Select.Label fontWeight="700">Fruits</Select.Label>
105
+ {/* for longer lists memoizing these is useful */}
106
+ {React.useMemo(
107
+ () =>
108
+ items.map((item, i) => {
109
+ return (
110
+ <Select.Item
111
+ index={i}
112
+ key={item.name}
113
+ value={item.name.toLowerCase()}
114
+ >
115
+ <Select.ItemText>{item.name}</Select.ItemText>
116
+ <Select.ItemIndicator marginLeft="auto">
117
+ <Check size={16} />
118
+ </Select.ItemIndicator>
119
+ </Select.Item>
120
+ )
121
+ }),
122
+ [items]
123
+ )}
124
+ </Select.Group>
125
+ {/* Native gets an extra icon */}
126
+ {props.native && (
127
+ <YStack
128
+ position="absolute"
129
+ r={0}
130
+ t={16}
131
+ items="center"
132
+ justify="center"
133
+ width={'$4'}
134
+ pointerEvents="none"
135
+ >
136
+ <ChevronDown
137
+ size={getFontSize((props.size as FontSizeTokens) ?? '$true')}
138
+ />
139
+ </YStack>
140
+ )}
141
+ </Select.Viewport>
142
+
143
+ <Select.ScrollDownButton
144
+ items="center"
145
+ justify="center"
146
+ position="relative"
147
+ width="100%"
148
+ height="$3"
149
+ >
150
+ <YStack z={10}>
151
+ <ChevronDown size={20} />
152
+ </YStack>
153
+ <LinearGradient
154
+ start={[0, 0]}
155
+ end={[0, 1]}
156
+ fullscreen
157
+ colors={['transparent', '$background']}
158
+ rounded="$4"
159
+ />
160
+ </Select.ScrollDownButton>
161
+ </Select.Content>
162
+ </Select>
163
+ )
164
+ }
165
+
166
+ const items = [
167
+ { name: 'Apple' },
168
+ { name: 'Pear' },
169
+ { name: 'Blackberry' },
170
+ { name: 'Peach' },
171
+ { name: 'Apricot' },
172
+ { name: 'Melon' },
173
+ { name: 'Honeydew' },
174
+ { name: 'Starfruit' },
175
+ { name: 'Blueberry' },
176
+ { name: 'Raspberry' },
177
+ { name: 'Strawberry' },
178
+ { name: 'Mango' },
179
+ { name: 'Pineapple' },
180
+ { name: 'Lime' },
181
+ { name: 'Lemon' },
182
+ { name: 'Coconut' },
183
+ { name: 'Guava' },
184
+ { name: 'Papaya' },
185
+ { name: 'Orange' },
186
+ { name: 'Grape' },
187
+ { name: 'Jackfruit' },
188
+ { name: 'Durian' },
189
+ ] as const
@@ -0,0 +1,18 @@
1
+ import { Paragraph, Separator, XStack, YStack } from '@hanzo/gui'
2
+
3
+ export function SeparatorDemo() {
4
+ return (
5
+ <YStack width="100%" maxW={300} mx={16}>
6
+ <Paragraph fontWeight="800">Gui</Paragraph>
7
+ <Paragraph>A cross-platform component library.</Paragraph>
8
+ <Separator my={15} />
9
+ <XStack height={20} items="center">
10
+ <Paragraph>Blog</Paragraph>
11
+ <Separator self="stretch" vertical mx={16} />
12
+ <Paragraph>Docs</Paragraph>
13
+ <Separator self="stretch" vertical mx={16} />
14
+ <Paragraph>Source</Paragraph>
15
+ </XStack>
16
+ </YStack>
17
+ )
18
+ }
@@ -0,0 +1,10 @@
1
+ import { Circle, Square, XStack } from '@hanzo/gui'
2
+
3
+ export function ShapesDemo() {
4
+ return (
5
+ <XStack p="$2" gap="$4">
6
+ <Square size={100} bg="$color" elevation="$4" />
7
+ <Circle size={100} bg="$color" elevation="$4" />
8
+ </XStack>
9
+ )
10
+ }
@@ -0,0 +1,156 @@
1
+ import { ChevronDown, ChevronUp } from '@hanzogui/lucide-icons-2'
2
+ import type { SheetProps } from '@hanzogui/sheet'
3
+ import { Sheet } from '@hanzogui/sheet'
4
+ import React, { memo } from 'react'
5
+ import { Button, H2, Input, Paragraph, XStack, YStack } from '@hanzo/gui'
6
+
7
+ const spModes = ['percent', 'constant', 'fit', 'mixed'] as const
8
+
9
+ export const SheetDemo = () => {
10
+ const [position, setPosition] = React.useState(0)
11
+ const [open, setOpen] = React.useState(false)
12
+ const [modal, setModal] = React.useState(true)
13
+ const [innerOpen, setInnerOpen] = React.useState(false)
14
+ const [snapPointsMode, setSnapPointsMode] =
15
+ React.useState<(typeof spModes)[number]>('percent')
16
+ const [mixedFitDemo, setMixedFitDemo] = React.useState(false)
17
+
18
+ const isPercent = snapPointsMode === 'percent'
19
+ const isConstant = snapPointsMode === 'constant'
20
+ const isFit = snapPointsMode === 'fit'
21
+ const isMixed = snapPointsMode === 'mixed'
22
+ const snapPoints = isPercent
23
+ ? [85, 50, 25]
24
+ : isConstant
25
+ ? [256, 190]
26
+ : isFit
27
+ ? undefined
28
+ : mixedFitDemo
29
+ ? ['fit', 110]
30
+ : ['80%', 256, 190]
31
+
32
+ return (
33
+ <>
34
+ <YStack gap="$4">
35
+ <XStack gap="$4" $maxMd={{ flexDirection: 'column', items: 'center' }}>
36
+ <Button onPress={() => setOpen(true)}>Open</Button>
37
+ <Button onPress={() => setModal((x) => !x)}>
38
+ {modal ? 'Type: Modal' : 'Type: Inline'}
39
+ </Button>
40
+ <Button
41
+ onPress={() =>
42
+ setSnapPointsMode(
43
+ (prev) => spModes[(spModes.indexOf(prev) + 1) % spModes.length]
44
+ )
45
+ }
46
+ >
47
+ {`Mode: ${
48
+ { percent: 'Percentage', constant: 'Constant', fit: 'Fit', mixed: 'Mixed' }[
49
+ snapPointsMode
50
+ ]
51
+ }`}
52
+ </Button>
53
+ </XStack>
54
+ {isMixed ? (
55
+ <Button onPress={() => setMixedFitDemo((x) => !x)}>
56
+ {`Snap Points: ${JSON.stringify(snapPoints)}`}
57
+ </Button>
58
+ ) : (
59
+ <XStack py="$2.5" justify="center">
60
+ <Paragraph>
61
+ {`Snap Points: ${isFit ? '(none)' : JSON.stringify(snapPoints)}`}
62
+ </Paragraph>
63
+ </XStack>
64
+ )}
65
+ </YStack>
66
+
67
+ <Sheet
68
+ modal={modal}
69
+ open={open}
70
+ onOpenChange={setOpen}
71
+ snapPoints={snapPoints}
72
+ snapPointsMode={snapPointsMode}
73
+ dismissOnSnapToBottom
74
+ position={position}
75
+ onPositionChange={setPosition}
76
+ zIndex={100_000}
77
+ transition="medium"
78
+ >
79
+ <Sheet.Overlay
80
+ transition="lazy"
81
+ bg="$shadow6"
82
+ enterStyle={{ opacity: 0 }}
83
+ exitStyle={{ opacity: 0 }}
84
+ />
85
+
86
+ <Sheet.Handle />
87
+ <Sheet.Frame p="$4" justify="center" items="center" gap="$5">
88
+ <SheetContents {...{ modal, isPercent, innerOpen, setInnerOpen, setOpen }} />
89
+ </Sheet.Frame>
90
+ </Sheet>
91
+ </>
92
+ )
93
+ }
94
+
95
+ // in general good to memoize the contents to avoid expensive renders during animations
96
+ const SheetContents = memo(
97
+ ({ modal, isPercent, innerOpen, setInnerOpen, setOpen }: any) => {
98
+ return (
99
+ <>
100
+ <Button size="$6" circular icon={ChevronDown} onPress={() => setOpen(false)} />
101
+ <Input width={200} />
102
+ {modal && isPercent && (
103
+ <>
104
+ <InnerSheet open={innerOpen} onOpenChange={setInnerOpen} />
105
+ <Button
106
+ size="$6"
107
+ circular
108
+ icon={ChevronUp}
109
+ onPress={() => setInnerOpen(true)}
110
+ />
111
+ </>
112
+ )}
113
+ </>
114
+ )
115
+ }
116
+ )
117
+
118
+ function InnerSheet(props: SheetProps) {
119
+ return (
120
+ <Sheet transition="medium" modal snapPoints={[90]} dismissOnSnapToBottom {...props}>
121
+ <Sheet.Overlay
122
+ transition="medium"
123
+ bg="$shadow2"
124
+ enterStyle={{ opacity: 0 }}
125
+ exitStyle={{ opacity: 0 }}
126
+ />
127
+
128
+ <Sheet.Handle />
129
+ <Sheet.Frame flex={1} justify="center" items="center" gap="$5">
130
+ <Sheet.ScrollView>
131
+ <YStack p="$5" gap="$8">
132
+ <Button
133
+ size="$6"
134
+ circular
135
+ self="center"
136
+ icon={ChevronDown}
137
+ onPress={() => props.onOpenChange?.(false)}
138
+ />
139
+
140
+ <H2>Hello world</H2>
141
+ {[1, 2, 3, 4, 5, 6, 7, 8].map((i) => (
142
+ <Paragraph key={i} size="$8">
143
+ Eu officia sunt ipsum nisi dolore labore est laborum laborum in esse ad
144
+ pariatur. Dolor excepteur esse deserunt voluptate labore ea. Exercitation
145
+ ipsum deserunt occaecat cupidatat consequat est adipisicing velit
146
+ cupidatat ullamco veniam aliquip reprehenderit officia. Officia labore
147
+ culpa ullamco velit. In sit occaecat velit ipsum fugiat esse aliqua dolor
148
+ sint.
149
+ </Paragraph>
150
+ ))}
151
+ </YStack>
152
+ </Sheet.ScrollView>
153
+ </Sheet.Frame>
154
+ </Sheet>
155
+ )
156
+ }