__init__.py 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. """Import all the components."""
  2. from __future__ import annotations
  3. from typing import TYPE_CHECKING
  4. from pynecone import utils
  5. from .component import Component
  6. from .datadisplay import *
  7. from .disclosure import *
  8. from .feedback import *
  9. from .forms import *
  10. from .graphing import *
  11. from .layout import *
  12. from .media import *
  13. from .navigation import *
  14. from .overlay import *
  15. from .typography import *
  16. if TYPE_CHECKING:
  17. from typing import Any
  18. # Add the convenience methods for all the components.
  19. # locals().update(
  20. # {
  21. # utils.to_snake_case(name): value.create
  22. # for name, value in locals().items()
  23. # if isinstance(value, type) and issubclass(value, Component)
  24. # }
  25. # )
  26. component = Component.create
  27. badge = Badge.create
  28. code = Code.create
  29. code_block = CodeBlock.create
  30. data_table = DataTable.create
  31. divider = Divider.create
  32. list = List.create
  33. list_item = ListItem.create
  34. ordered_list = OrderedList.create
  35. unordered_list = UnorderedList.create
  36. stat = Stat.create
  37. stat_arrow = StatArrow.create
  38. stat_group = StatGroup.create
  39. stat_help_text = StatHelpText.create
  40. stat_label = StatLabel.create
  41. stat_number = StatNumber.create
  42. table = Table.create
  43. table_caption = TableCaption.create
  44. table_container = TableContainer.create
  45. tbody = Tbody.create
  46. td = Td.create
  47. tfoot = Tfoot.create
  48. th = Th.create
  49. thead = Thead.create
  50. tr = Tr.create
  51. accordion = Accordion.create
  52. accordion_button = AccordionButton.create
  53. accordion_icon = AccordionIcon.create
  54. accordion_item = AccordionItem.create
  55. accordion_panel = AccordionPanel.create
  56. tab = Tab.create
  57. tab_list = TabList.create
  58. tab_panel = TabPanel.create
  59. tab_panels = TabPanels.create
  60. tabs = Tabs.create
  61. visually_hidden = VisuallyHidden.create
  62. alert = Alert.create
  63. alert_description = AlertDescription.create
  64. alert_icon = AlertIcon.create
  65. alert_title = AlertTitle.create
  66. circular_progress = CircularProgress.create
  67. circular_progress_label = CircularProgressLabel.create
  68. progress = Progress.create
  69. skeleton = Skeleton.create
  70. skeleton_circle = SkeletonCircle.create
  71. skeleton_text = SkeletonText.create
  72. spinner = Spinner.create
  73. button = Button.create
  74. button_group = ButtonGroup.create
  75. checkbox = Checkbox.create
  76. checkbox_group = CheckboxGroup.create
  77. copy_to_clipboard = CopyToClipboard.create
  78. editable = Editable.create
  79. editable_input = EditableInput.create
  80. editable_preview = EditablePreview.create
  81. editable_textarea = EditableTextarea.create
  82. form_control = FormControl.create
  83. form_error_message = FormErrorMessage.create
  84. form_helper_text = FormHelperText.create
  85. form_label = FormLabel.create
  86. icon_button = IconButton.create
  87. input = Input.create
  88. input_group = InputGroup.create
  89. input_left_addon = InputLeftAddon.create
  90. input_right_addon = InputRightAddon.create
  91. number_decrement_stepper = NumberDecrementStepper.create
  92. number_increment_stepper = NumberIncrementStepper.create
  93. number_input = NumberInput.create
  94. number_input_field = NumberInputField.create
  95. number_input_stepper = NumberInputStepper.create
  96. option = Option.create
  97. password = Password.create
  98. pin_input = PinInput.create
  99. pin_input_field = PinInputField.create
  100. radio = Radio.create
  101. radio_group = RadioGroup.create
  102. range_slider = RangeSlider.create
  103. range_slider_filled_track = RangeSliderFilledTrack.create
  104. range_slider_thumb = RangeSliderThumb.create
  105. range_slider_track = RangeSliderTrack.create
  106. select = Select.create
  107. slider = Slider.create
  108. slider_filled_track = SliderFilledTrack.create
  109. slider_mark = SliderMark.create
  110. slider_thumb = SliderThumb.create
  111. slider_track = SliderTrack.create
  112. switch = Switch.create
  113. text_area = TextArea.create
  114. area = Area.create
  115. bar = Bar.create
  116. box_plot = BoxPlot.create
  117. candlestick = Candlestick.create
  118. chart = Chart.create
  119. chart_group = ChartGroup.create
  120. chart_stack = ChartStack.create
  121. error_bar = ErrorBar.create
  122. histogram = Histogram.create
  123. line = Line.create
  124. pie = Pie.create
  125. plotly = Plotly.create
  126. polar = Polar.create
  127. scatter = Scatter.create
  128. voronoi = Voronoi.create
  129. box = Box.create
  130. center = Center.create
  131. circle = Circle.create
  132. container = Container.create
  133. flex = Flex.create
  134. foreach = Foreach.create
  135. fragment = Fragment.create
  136. grid = Grid.create
  137. grid_item = GridItem.create
  138. hstack = Hstack.create
  139. html = Html.create
  140. responsive_grid = ResponsiveGrid.create
  141. spacer = Spacer.create
  142. square = Square.create
  143. stack = Stack.create
  144. vstack = Vstack.create
  145. wrap = Wrap.create
  146. wrap_item = WrapItem.create
  147. avatar = Avatar.create
  148. avatar_badge = AvatarBadge.create
  149. avatar_group = AvatarGroup.create
  150. icon = Icon.create
  151. image = Image.create
  152. breadcrumb = Breadcrumb.create
  153. breadcrumb_item = BreadcrumbItem.create
  154. breadcrumb_link = BreadcrumbLink.create
  155. breadcrumb_separator = BreadcrumbSeparator.create
  156. link = Link.create
  157. link_box = LinkBox.create
  158. link_overlay = LinkOverlay.create
  159. next_link = NextLink.create
  160. alert_dialog = AlertDialog.create
  161. alert_dialog_body = AlertDialogBody.create
  162. alert_dialog_content = AlertDialogContent.create
  163. alert_dialog_footer = AlertDialogFooter.create
  164. alert_dialog_header = AlertDialogHeader.create
  165. alert_dialog_overlay = AlertDialogOverlay.create
  166. drawer = Drawer.create
  167. drawer_body = DrawerBody.create
  168. drawer_close_button = DrawerCloseButton.create
  169. drawer_content = DrawerContent.create
  170. drawer_footer = DrawerFooter.create
  171. drawer_header = DrawerHeader.create
  172. drawer_overlay = DrawerOverlay.create
  173. menu = Menu.create
  174. menu_button = MenuButton.create
  175. menu_divider = MenuDivider.create
  176. menu_group = MenuGroup.create
  177. menu_item = MenuItem.create
  178. menu_item_option = MenuItemOption.create
  179. menu_list = MenuList.create
  180. menu_option_group = MenuOptionGroup.create
  181. modal = Modal.create
  182. modal_body = ModalBody.create
  183. modal_close_button = ModalCloseButton.create
  184. modal_content = ModalContent.create
  185. modal_footer = ModalFooter.create
  186. modal_header = ModalHeader.create
  187. modal_overlay = ModalOverlay.create
  188. popover = Popover.create
  189. popover_anchor = PopoverAnchor.create
  190. popover_arrow = PopoverArrow.create
  191. popover_body = PopoverBody.create
  192. popover_close_button = PopoverCloseButton.create
  193. popover_content = PopoverContent.create
  194. popover_footer = PopoverFooter.create
  195. popover_header = PopoverHeader.create
  196. popover_trigger = PopoverTrigger.create
  197. tooltip = Tooltip.create
  198. heading = Heading.create
  199. markdown = Markdown.create
  200. span = Span.create
  201. text = Text.create
  202. # Add responsive styles shortcuts.
  203. def mobile_only(*children, **props):
  204. """Create a component that is only visible on mobile.
  205. Args:
  206. *children: The children to pass to the component.
  207. **props: The props to pass to the component.
  208. Returns:
  209. The component.
  210. """
  211. return Box.create(*children, **props, display=["block", "none", "none", "none"])
  212. def tablet_only(*children, **props):
  213. """Create a component that is only visible on tablet.
  214. Args:
  215. *children: The children to pass to the component.
  216. **props: The props to pass to the component.
  217. Returns:
  218. The component.
  219. """
  220. return Box.create(*children, **props, display=["none", "block", "block", "none"])
  221. def desktop_only(*children, **props):
  222. """Create a component that is only visible on desktop.
  223. Args:
  224. *children: The children to pass to the component.
  225. **props: The props to pass to the component.
  226. Returns:
  227. The component.
  228. """
  229. return Box.create(*children, **props, display=["none", "none", "none", "block"])
  230. def tablet_and_desktop(*children, **props):
  231. """Create a component that is only visible on tablet and desktop.
  232. Args:
  233. *children: The children to pass to the component.
  234. **props: The props to pass to the component.
  235. Returns:
  236. The component.
  237. """
  238. return Box.create(*children, **props, display=["none", "block", "block", "block"])
  239. def mobile_and_tablet(*children, **props):
  240. """Create a component that is only visible on mobile and tablet.
  241. Args:
  242. *children: The children to pass to the component.
  243. **props: The props to pass to the component.
  244. Returns:
  245. The component.
  246. """
  247. return Box.create(*children, **props, display=["block", "block", "block", "none"])
  248. def cond(condition: Any, c1: Any, c2: Any = None):
  249. """Create a conditional component or Prop.
  250. Args:
  251. condition: The cond to determine which component to render.
  252. c1: The component or prop to render if the cond_var is true.
  253. c2: The component or prop to render if the cond_var is false.
  254. Returns:
  255. The conditional component.
  256. Raises:
  257. ValueError: If the arguments are invalid.
  258. """
  259. # Import here to avoid circular imports.
  260. from pynecone.var import BaseVar, Var
  261. # Convert the condition to a Var.
  262. cond_var = Var.create(condition)
  263. assert cond_var is not None, "The condition must be set."
  264. # If the first component is a component, create a Cond component.
  265. if isinstance(c1, Component):
  266. assert c2 is None or isinstance(
  267. c2, Component
  268. ), "Both arguments must be components."
  269. return Cond.create(cond_var, c1, c2)
  270. # Otherwise, create a conditionl Var.
  271. # Check that the second argument is valid.
  272. if isinstance(c2, Component):
  273. raise ValueError("Both arguments must be props.")
  274. if c2 is None:
  275. raise ValueError("For conditional vars, the second argument must be set.")
  276. # Create the conditional var.
  277. return BaseVar(
  278. name=utils.format_cond(
  279. cond=cond_var.full_name,
  280. true_value=c1,
  281. false_value=c2,
  282. is_prop=True,
  283. ),
  284. type_=c1.type_ if isinstance(c1, BaseVar) else type(c1),
  285. )