playbook_ui 14.25.0.pre.alpha.testingcss9700 → 14.25.0.pre.alpha.testingcss9713

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 (191) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +0 -1
  3. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +6 -6
  4. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +1 -1
  5. data/app/pb_kits/playbook/pb_avatar/_avatar.scss +60 -65
  6. data/app/pb_kits/playbook/pb_background/_background.scss +3 -3
  7. data/app/pb_kits/playbook/pb_badge/_badge.scss +30 -32
  8. data/app/pb_kits/playbook/pb_bread_crumbs/_bread_crumbs.scss +1 -1
  9. data/app/pb_kits/playbook/pb_button/_button.scss +13 -13
  10. data/app/pb_kits/playbook/pb_button/_button_mixins.scss +1 -1
  11. data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar.scss +19 -19
  12. data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar_dark.scss +15 -15
  13. data/app/pb_kits/playbook/pb_caption/_caption.scss +1 -1
  14. data/app/pb_kits/playbook/pb_card/_card.scss +79 -68
  15. data/app/pb_kits/playbook/pb_card/_card_mixin.scss +4 -4
  16. data/app/pb_kits/playbook/pb_checkbox/_checkbox.scss +1 -1
  17. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.scss +5 -5
  18. data/app/pb_kits/playbook/pb_collapsible/__snapshots__/collapsible.test.js.snap +1 -1
  19. data/app/pb_kits/playbook/pb_collapsible/_collapsible.scss +3 -3
  20. data/app/pb_kits/playbook/pb_currency/_currency.scss +30 -30
  21. data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.scss +1 -1
  22. data/app/pb_kits/playbook/pb_date/_date.scss +5 -5
  23. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +1 -1
  24. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +19 -0
  25. data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +1 -0
  26. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_inline_styles.scss +2 -2
  27. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_input_styles.scss +2 -2
  28. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_time_selection_styles.scss +5 -5
  29. data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.scss +13 -13
  30. data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.scss +1 -1
  31. data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.scss +13 -13
  32. data/app/pb_kits/playbook/pb_date_time/_date_time.scss +6 -6
  33. data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.scss +6 -6
  34. data/app/pb_kits/playbook/pb_date_year_stacked/_date_year_stacked.scss +7 -7
  35. data/app/pb_kits/playbook/pb_detail/_detail.scss +2 -2
  36. data/app/pb_kits/playbook/pb_dialog/_dialog.scss +61 -252
  37. data/app/pb_kits/playbook/pb_distribution_bar/_distribution_bar.scss +3 -3
  38. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +1 -1
  39. data/app/pb_kits/playbook/pb_filter/_filter.scss +7 -7
  40. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss +2 -2
  41. data/app/pb_kits/playbook/pb_flex/_flex.scss +106 -100
  42. data/app/pb_kits/playbook/pb_flex/_flex.tsx +38 -28
  43. data/app/pb_kits/playbook/pb_flex/_flex_item.scss +146 -51
  44. data/app/pb_kits/playbook/pb_flex/_flex_item.tsx +19 -8
  45. data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.html.erb +12 -1
  46. data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.jsx +26 -1
  47. data/app/pb_kits/playbook/pb_flex/docs/_flex_gap_rails.md +11 -0
  48. data/app/pb_kits/playbook/pb_flex/docs/_flex_gap_react.md +11 -0
  49. data/app/pb_kits/playbook/pb_flex/flex.rb +73 -39
  50. data/app/pb_kits/playbook/pb_flex/flex_item.rb +51 -6
  51. data/app/pb_kits/playbook/pb_form_group/_error_state_mixin.scss +1 -1
  52. data/app/pb_kits/playbook/pb_form_group/_form_group.scss +47 -47
  53. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +5 -5
  54. data/app/pb_kits/playbook/pb_gauge/_gauge.scss +5 -5
  55. data/app/pb_kits/playbook/pb_hashtag/_hashtag.scss +1 -1
  56. data/app/pb_kits/playbook/pb_highlight/_highlight.scss +1 -1
  57. data/app/pb_kits/playbook/pb_icon/_icon.scss +4 -0
  58. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.scss +2 -2
  59. data/app/pb_kits/playbook/pb_icon_stat_value/_icon_stat_value.scss +15 -15
  60. data/app/pb_kits/playbook/pb_icon_value/_icon_value.scss +6 -6
  61. data/app/pb_kits/playbook/pb_image/_image.scss +1 -1
  62. data/app/pb_kits/playbook/pb_label_pill/_label_pill.scss +1 -1
  63. data/app/pb_kits/playbook/pb_label_value/_label_value.scss +2 -2
  64. data/app/pb_kits/playbook/pb_layout/_layout.scss +330 -305
  65. data/app/pb_kits/playbook/pb_layout/_layout.tsx +14 -11
  66. data/app/pb_kits/playbook/pb_layout/body.rb +1 -1
  67. data/app/pb_kits/playbook/pb_layout/footer.rb +1 -1
  68. data/app/pb_kits/playbook/pb_layout/header.rb +1 -1
  69. data/app/pb_kits/playbook/pb_layout/item.rb +1 -7
  70. data/app/pb_kits/playbook/pb_layout/layout.rb +16 -25
  71. data/app/pb_kits/playbook/pb_layout/layout.test.js +3 -3
  72. data/app/pb_kits/playbook/pb_layout/sidebar.rb +1 -1
  73. data/app/pb_kits/playbook/pb_legend/_legend.scss +1 -1
  74. data/app/pb_kits/playbook/pb_link/_link.scss +4 -4
  75. data/app/pb_kits/playbook/pb_list/_list.scss +8 -8
  76. data/app/pb_kits/playbook/pb_loading_inline/_loading_inline.scss +4 -4
  77. data/app/pb_kits/playbook/pb_message/_message.scss +4 -4
  78. data/app/pb_kits/playbook/pb_message/_message_mixins.scss +2 -2
  79. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +2 -2
  80. data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.scss +2 -2
  81. data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.scss +9 -9
  82. data/app/pb_kits/playbook/pb_nav/_bold_mixin.scss +8 -8
  83. data/app/pb_kits/playbook/pb_online_status/_online_status.scss +2 -2
  84. data/app/pb_kits/playbook/pb_overlay/_overlay.scss +2 -2
  85. data/app/pb_kits/playbook/pb_passphrase/_passphrase.scss +1 -1
  86. data/app/pb_kits/playbook/pb_person/_person.scss +1 -1
  87. data/app/pb_kits/playbook/pb_pill/_pill.scss +3 -3
  88. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss +7 -7
  89. data/app/pb_kits/playbook/pb_progress_simple/_progress_simple.scss +10 -10
  90. data/app/pb_kits/playbook/pb_progress_step/_progress_step.scss +36 -36
  91. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.scss +4 -4
  92. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +12 -12
  93. data/app/pb_kits/playbook/pb_select/_select.scss +3 -3
  94. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +1 -1
  95. data/app/pb_kits/playbook/pb_selectable_card_icon/_selectable_card_icon.scss +7 -7
  96. data/app/pb_kits/playbook/pb_selectable_icon/_selectable_icon.scss +2 -2
  97. data/app/pb_kits/playbook/pb_selectable_list/_selectable_list.scss +5 -5
  98. data/app/pb_kits/playbook/pb_source/_source.scss +7 -7
  99. data/app/pb_kits/playbook/pb_star_rating/_star_rating.scss +1 -1
  100. data/app/pb_kits/playbook/pb_stat_value/_stat_value.scss +2 -2
  101. data/app/pb_kits/playbook/pb_table/styles/_alignment.scss +1 -1
  102. data/app/pb_kits/playbook/pb_table/styles/_content.scss +1 -1
  103. data/app/pb_kits/playbook/pb_table/styles/_desktop_collapse.scss +1 -1
  104. data/app/pb_kits/playbook/pb_table/styles/_headers.scss +1 -1
  105. data/app/pb_kits/playbook/pb_table/styles/_hover.scss +1 -1
  106. data/app/pb_kits/playbook/pb_table/styles/_mobile.scss +1 -1
  107. data/app/pb_kits/playbook/pb_table/styles/_mobile_collapse.scss +1 -1
  108. data/app/pb_kits/playbook/pb_table/styles/_outer_padding.scss +1 -1
  109. data/app/pb_kits/playbook/pb_table/styles/_reset.scss +1 -1
  110. data/app/pb_kits/playbook/pb_table/styles/_scroll.scss +12 -12
  111. data/app/pb_kits/playbook/pb_table/styles/_side_highlight.scss +2 -2
  112. data/app/pb_kits/playbook/pb_table/styles/_single-line.scss +1 -1
  113. data/app/pb_kits/playbook/pb_table/styles/_striped.scss +1 -1
  114. data/app/pb_kits/playbook/pb_table/styles/_structure.scss +1 -1
  115. data/app/pb_kits/playbook/pb_table/styles/_table-card.scss +1 -1
  116. data/app/pb_kits/playbook/pb_table/styles/_table-dark.scss +2 -2
  117. data/app/pb_kits/playbook/pb_table/styles/_table_header.scss +4 -4
  118. data/app/pb_kits/playbook/pb_table/styles/_tablet_collapse.scss +1 -1
  119. data/app/pb_kits/playbook/pb_table/styles/_vertical_border.scss +1 -1
  120. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +1 -1
  121. data/app/pb_kits/playbook/pb_text_input/text_input.rb +15 -0
  122. data/app/pb_kits/playbook/pb_textarea/_textarea.scss +3 -3
  123. data/app/pb_kits/playbook/pb_time/_time.scss +5 -5
  124. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.scss +13 -13
  125. data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.scss +3 -3
  126. data/app/pb_kits/playbook/pb_timeline/_timeline.scss +41 -41
  127. data/app/pb_kits/playbook/pb_timestamp/_timestamp.scss +4 -4
  128. data/app/pb_kits/playbook/pb_title/_title.scss +14 -14
  129. data/app/pb_kits/playbook/pb_title_count/_title_count.scss +3 -3
  130. data/app/pb_kits/playbook/pb_title_detail/_title_detail.scss +7 -7
  131. data/app/pb_kits/playbook/pb_toggle/_toggle.scss +1 -1
  132. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +1 -1
  133. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +10 -10
  134. data/app/pb_kits/playbook/pb_user/_user.scss +13 -13
  135. data/app/pb_kits/playbook/pb_user_badge/_user_badge.scss +1 -1
  136. data/app/pb_kits/playbook/utilities/_gap.scss +12 -24
  137. data/app/pb_kits/playbook/utilities/globalPropNames.mjs +2 -0
  138. data/app/pb_kits/playbook/utilities/globalProps.ts +28 -4
  139. data/dist/chunks/_line_graph-0Y0wuiB9.js +1 -0
  140. data/dist/chunks/_typeahead-B2gV75O0.js +6 -0
  141. data/dist/chunks/_weekday_stacked-Dblcf2V8.js +37 -0
  142. data/dist/chunks/lazysizes-B7xYodB-.js +1 -0
  143. data/dist/chunks/lib-CY5ZPzic.js +29 -0
  144. data/dist/chunks/pb_form_validation-D3b0JKHH.js +1 -0
  145. data/dist/chunks/vendor.js +1 -11
  146. data/dist/menu.yml +0 -6
  147. data/dist/playbook-doc.js +3 -67243
  148. data/dist/playbook-rails-react-bindings.js +1 -112
  149. data/dist/playbook-rails.js +1 -2464
  150. data/dist/playbook.css +2 -92354
  151. data/dist/reset.css +1 -89
  152. data/lib/playbook/classnames.rb +2 -0
  153. data/lib/playbook/spacing.rb +53 -1
  154. data/lib/playbook/version.rb +1 -1
  155. metadata +10 -38
  156. data/app/pb_kits/playbook/pb_drawer/_close_icon.tsx +0 -25
  157. data/app/pb_kits/playbook/pb_drawer/_drawer.scss +0 -381
  158. data/app/pb_kits/playbook/pb_drawer/_drawer.tsx +0 -231
  159. data/app/pb_kits/playbook/pb_drawer/_drawer_context.tsx +0 -3
  160. data/app/pb_kits/playbook/pb_drawer/context.ts +0 -11
  161. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +0 -8
  162. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.jsx +0 -41
  163. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +0 -33
  164. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +0 -78
  165. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +0 -3
  166. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +0 -26
  167. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +0 -20
  168. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.jsx +0 -59
  169. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +0 -24
  170. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +0 -61
  171. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.md +0 -24
  172. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +0 -21
  173. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +0 -54
  174. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +0 -1
  175. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +0 -49
  176. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.jsx +0 -99
  177. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +0 -20
  178. data/app/pb_kits/playbook/pb_drawer/docs/index.js +0 -7
  179. data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +0 -20
  180. data/app/pb_kits/playbook/pb_drawer/drawer.rb +0 -56
  181. data/app/pb_kits/playbook/pb_drawer/drawer.test.jsx +0 -81
  182. data/app/pb_kits/playbook/pb_drawer/hooks/useBreakpoint.tsx +0 -60
  183. data/app/pb_kits/playbook/pb_drawer/hooks/useDrawerAnimation.tsx +0 -21
  184. data/app/pb_kits/playbook/pb_drawer/index.js +0 -257
  185. data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.md +0 -9
  186. data/dist/chunks/_line_graph-DPTwfQR-.js +0 -544
  187. data/dist/chunks/_typeahead-CEqlHw0H.js +0 -30978
  188. data/dist/chunks/_weekday_stacked-D3dG14OB.js +0 -20894
  189. data/dist/chunks/lazysizes-BUUj27EF.js +0 -611
  190. data/dist/chunks/lib-CIetbXpr.js +0 -9609
  191. data/dist/chunks/pb_form_validation-D_g9rOE9.js +0 -60
@@ -1,231 +0,0 @@
1
- import React, { useState, useEffect, useRef } from "react"
2
- import classnames from "classnames"
3
-
4
- import {
5
- buildAriaProps,
6
- buildCss,
7
- buildDataProps,
8
- buildHtmlProps,
9
- } from "../utilities/props"
10
- import { globalProps, globalInlineProps } from "../utilities/globalProps"
11
- import { DrawerContext } from "./context"
12
- import { useBreakpoint } from "./hooks/useBreakpoint"
13
-
14
- type DrawerProps = {
15
- aria?: { [key: string]: string }
16
- behavior?: "floating" | "push"
17
- border?: "full" | "none" | "right" | "left"
18
- breakpoint?: "none" | "xs" | "sm" | "md" | "lg" | "xl"
19
- children: React.ReactNode | React.ReactNode[] | string
20
- className?: string
21
- data?: { [key: string]: string }
22
- htmlOptions?: { [key: string]: string | number | boolean | (() => void) }
23
- id?: string
24
- triggerId?: string
25
- onClose?: () => void
26
- opened: boolean
27
- overlay: boolean
28
- placement?: "left" | "right" | "top" | "bottom"
29
- size?: "xs" | "sm" | "md" | "lg" | "xl" | "full"
30
- text?: string
31
- withinElement?: boolean
32
- }
33
-
34
- const Drawer = (props: DrawerProps): React.ReactElement | null => {
35
- const {
36
- aria = {},
37
- behavior = "floating",
38
- border = "none",
39
- breakpoint = "none",
40
- className,
41
- data = {},
42
- htmlOptions = {},
43
- id,
44
- size = "md",
45
- children,
46
- triggerId,
47
- opened,
48
- onClose,
49
- overlay = true,
50
- placement = "left",
51
- withinElement = false,
52
- } = props
53
-
54
- const drawerRef = useRef<HTMLDivElement>(null)
55
- const [menuButtonOpened, setMenuButtonOpened] = useState(false)
56
- const [shouldRender, setShouldRender] = useState(false)
57
- const [isAnimating, setIsAnimating] = useState(false)
58
-
59
- const { isOpenBreakpointOpen, isUserClosed, setIsUserClosed } = useBreakpoint(
60
- {
61
- breakpoint: breakpoint,
62
- triggerId,
63
- }
64
- )
65
-
66
- const modalIsOpened =
67
- (isOpenBreakpointOpen && !isUserClosed) || menuButtonOpened || opened
68
-
69
- useEffect(() => {
70
- if (withinElement) return;
71
-
72
- const sizeMap: { [key: string]: string } = {
73
- xl: "365px",
74
- lg: "300px",
75
- md: "250px",
76
- sm: "200px",
77
- xs: "64px",
78
- full: "100%",
79
- };
80
- const body = document.querySelector("body");
81
- if (modalIsOpened && behavior === "push" && body) {
82
- if (placement === "left") {
83
- body.style.cssText = `margin-left: ${sizeMap[size]} !important; margin-right: '' !important;`;
84
- } else if (placement === "right") {
85
- body.style.cssText = `margin-right: ${sizeMap[size]} !important; margin-left: '' !important;`;
86
- }
87
-
88
- body.classList.add("PBDrawer__Body--open");
89
- } else if (body) {
90
- if (body.classList.contains("PBDrawer__Body--open")) {
91
- body.classList.add("PBDrawer__Body--close");
92
- }
93
- body.style.cssText = "";
94
- body.classList.remove("PBDrawer__Body--open");
95
- }
96
- }, [modalIsOpened]);
97
-
98
- // Helper functions
99
- const updateDrawerHeight = () => {
100
- if (drawerRef.current) {
101
- const height = drawerRef.current.scrollHeight;
102
- drawerRef.current.style.setProperty('--drawer-height', `${height}px`);
103
- }
104
- }
105
-
106
- useEffect(() => {
107
- if (modalIsOpened) {
108
- setShouldRender(true)
109
- if (withinElement) {
110
- const timer = setTimeout(() => {
111
- updateDrawerHeight()
112
- setIsAnimating(true)
113
- }, 10)
114
- return () => clearTimeout(timer)
115
- } else {
116
- setIsAnimating(true)
117
- }
118
- } else {
119
- setIsAnimating(false)
120
- const timer = setTimeout(() => {
121
- setShouldRender(false)
122
- }, 250)
123
- return () => clearTimeout(timer)
124
- }
125
- }, [modalIsOpened])
126
-
127
-
128
-
129
- const handleMenuButtonClick = () => {
130
- if (modalIsOpened) {
131
- setMenuButtonOpened(false)
132
- setIsUserClosed(true)
133
- } else {
134
- setMenuButtonOpened(true)
135
- setIsUserClosed(false)
136
- }
137
- }
138
-
139
- // Setup menu button click handler
140
- useEffect(() => {
141
- if (!triggerId) return;
142
-
143
- const menuButton = document.getElementById(triggerId)
144
- if (menuButton) {
145
- menuButton.addEventListener("click", handleMenuButtonClick)
146
- return () => menuButton.removeEventListener("click", handleMenuButtonClick)
147
- }
148
- }, [modalIsOpened])
149
-
150
- const ariaProps = buildAriaProps(aria)
151
- const dataProps = buildDataProps(data)
152
- const htmlProps = buildHtmlProps(htmlOptions)
153
- const dynamicInlineProps = globalInlineProps(props)
154
-
155
- const drawerClasses = classnames(
156
- "pb_drawer",
157
- buildCss("pb_drawer", size as string, placement as string),
158
- {
159
- "drawer_border-full": border === "full",
160
- "drawer_border-right": border === "right",
161
- "drawer_border-left": border === "left",
162
- pb_drawer_within_element: withinElement,
163
- pb_drawer_after_open: isAnimating,
164
- pb_drawer_before_close: !isAnimating && shouldRender,
165
- },
166
- withinElement ? "shadow_none" : "shadow_deepest",
167
- globalProps(props),
168
- className
169
- )
170
-
171
- const overlayClasses = classnames(
172
- `pb_drawer${overlay ? "_overlay" : "_no_overlay"}`,
173
- `drawer_content_${placement}`,
174
- !overlay && "no-background",
175
- {
176
- pb_drawer_overlay_after_open: isAnimating,
177
- pb_drawer_overlay_before_close: !isAnimating && shouldRender,
178
- }
179
- )
180
-
181
- const api = {
182
- onClose: () => {
183
- if (triggerId) {
184
- setMenuButtonOpened(false)
185
- }
186
- setIsUserClosed(true)
187
- if (onClose) {
188
- onClose()
189
- }
190
- },
191
- }
192
-
193
- const drawerContent = (
194
- <div
195
- className={drawerClasses}
196
- onClick={(e) => e.stopPropagation()}
197
- ref={drawerRef}
198
- >
199
- {children}
200
- </div>
201
- )
202
-
203
- // Step 5: Only render when shouldRender is true
204
- if (!shouldRender) return null
205
-
206
- return (
207
- <DrawerContext.Provider value={api}>
208
- {withinElement ? (
209
- drawerContent
210
- ) : (
211
- <div
212
- {...ariaProps}
213
- {...dataProps}
214
- {...htmlProps}
215
- className={classnames(buildCss("pb_drawer_wrapper"), className)}
216
- style={dynamicInlineProps}
217
- >
218
- <div
219
- className={overlayClasses}
220
- id={id}
221
- onClick={overlay ? api.onClose : undefined}
222
- >
223
- {drawerContent}
224
- </div>
225
- </div>
226
- )}
227
- </DrawerContext.Provider>
228
- )
229
- }
230
-
231
- export default Drawer
@@ -1,3 +0,0 @@
1
- import React from "react";
2
-
3
- export const DrawerContext = React.createContext(null);
@@ -1,11 +0,0 @@
1
- import React from 'react'
2
-
3
- const noop = (): void => void 0
4
-
5
- type DrawerContextType = {
6
- onClose: () => void
7
- }
8
-
9
- export const DrawerContext = React.createContext<DrawerContextType>({
10
- onClose: noop,
11
- })
@@ -1,8 +0,0 @@
1
- <%= pb_rails("button", props: { text: "Push Drawer", margin_right: "sm", data: {"open-drawer": "drawer-3"} }) %>
2
-
3
- <%= pb_rails("drawer", props: {
4
- id:"drawer-3",
5
- behavior: "push"
6
- }) do %>
7
- Test me (Push Behavior)
8
- <% end %>
@@ -1,41 +0,0 @@
1
- import React, { useState } from "react"
2
-
3
- import Button from '../../pb_button/_button'
4
- import Drawer from '../../pb_drawer/_drawer'
5
- import Flex from '../../pb_flex/_flex'
6
-
7
- const useDrawer = (visible = false) => {
8
- const [opened, setOpened] = useState(visible)
9
- const toggle = () => setOpened(!opened)
10
-
11
- return [opened, toggle]
12
- }
13
-
14
- const DrawerBehavior = () => {
15
- const [drawerOpen, toggleDrawerOpen] = useDrawer()
16
-
17
- return (
18
- <>
19
- <Flex wrap>
20
- <Button id='sm'
21
- marginRight='md'
22
- onClick={toggleDrawerOpen}
23
- >
24
- {"Push Behavior"}
25
- </Button>
26
- </Flex>
27
- <Flex>
28
- <Drawer
29
- behavior={"push"}
30
- onClose={toggleDrawerOpen}
31
- opened={drawerOpen}
32
- size={"lg"}
33
- >
34
- Test me (Push Behavior)
35
- </Drawer>
36
- </Flex>
37
- </>
38
- )
39
- }
40
-
41
- export default DrawerBehavior
@@ -1,33 +0,0 @@
1
- <%= pb_rails("flex") do %>
2
- <%= pb_rails("button", props: { text: "Drawer with border right", margin_right: "sm", data: {"open-drawer": "drawer-12"} }) %>
3
-
4
- <%= pb_rails("drawer", props: {
5
- id:"drawer-12",
6
- overlay: false,
7
- border: "right"
8
- }) do %>
9
- Test me (Border Right)
10
- <% end %>
11
-
12
-
13
- <%= pb_rails("button", props: { text: "Drawer with border left", margin_right: "sm", data: {"open-drawer": "drawer-13"} }) %>
14
-
15
- <%= pb_rails("drawer", props: {
16
- id:"drawer-13",
17
- overlay: false,
18
- border: "left"
19
- }) do %>
20
- Test me (Border Left)
21
- <% end %>
22
-
23
- <%= pb_rails("button", props: { text: "Drawer with border full", data: {"open-drawer": "drawer-14"} }) %>
24
-
25
- <%= pb_rails("drawer", props: {
26
- id:"drawer-14",
27
- overlay: false,
28
- border: "full"
29
- }) do %>
30
- Test me (Border Full)
31
- <% end %>
32
- <% end %>
33
-
@@ -1,78 +0,0 @@
1
- import React, { useState } from "react";
2
-
3
- import Button from '../../pb_button/_button'
4
- import Drawer from '../../pb_drawer/_drawer'
5
- import Flex from '../../pb_flex/_flex'
6
-
7
- const DrawerBorders = () => {
8
- // Individual state variables for each drawer size
9
- const [openedBRightDrawer, setOpenedBRightDrawer] = useState(false);
10
- const [openedBLeftDrawer, setOpenedBLeftDrawer] = useState(false);
11
- const [openedBFullDrawer, setOpenedBFullDrawer] = useState(false);
12
-
13
- // Toggle functions for each drawer
14
- const toggleBRightDrawer = () => setOpenedBRightDrawer(!openedBRightDrawer);
15
- const toggleBLeftDrawer = () => setOpenedBLeftDrawer(!openedBLeftDrawer);
16
- const toggleBFullDrawer = () => setOpenedBFullDrawer(!openedBFullDrawer);
17
-
18
- return (
19
- <>
20
- <Flex
21
- wrap
22
- >
23
- <Button marginRight="md"
24
- onClick={toggleBRightDrawer}
25
- >
26
- Drawer with border right
27
- </Button>
28
- <Button marginRight="md"
29
- onClick={toggleBLeftDrawer}
30
- >
31
- Drawer with border left
32
- </Button>
33
- <Button marginRight="md"
34
- onClick={toggleBFullDrawer}
35
- >
36
- Drawer with border full
37
- </Button>
38
- </Flex>
39
-
40
- {/* Drawers for each size */}
41
- <Drawer
42
- behavior="float"
43
- border="right"
44
- onClose={toggleBRightDrawer}
45
- opened={openedBRightDrawer}
46
- overlay={false}
47
- placement="right"
48
- size="lg"
49
- >
50
- This is a Drawer with border right
51
- </Drawer>
52
- <Drawer
53
- behavior="float"
54
- border="left"
55
- onClose={toggleBLeftDrawer}
56
- opened={openedBLeftDrawer}
57
- overlay={false}
58
- placement="right"
59
- size="lg"
60
- >
61
- This is a Drawer with border left
62
- </Drawer>
63
- <Drawer
64
- behavior="float"
65
- border="full"
66
- onClose={toggleBFullDrawer}
67
- opened={openedBFullDrawer}
68
- overlay={false}
69
- placement="right"
70
- size="lg"
71
- >
72
- This is a Drawer with border full
73
- </Drawer>
74
- </>
75
- );
76
- };
77
-
78
- export default DrawerBorders;
@@ -1,3 +0,0 @@
1
-
2
- <%= pb_rails("body", props: { text: " The breakpoint prop determines when the Drawer is always visible. Above the specified breakpoint, the Drawer remains open on the page. Below it, only the trigger element is shown, allowing you to toggle the drawer open and closed. To see this in action, click the button below and resize your window.", padding_bottom: "md" }) %>
3
- <%= pb_rails("button", props: { text: "Open Doc Example in New Tab", new_window: true, link: "/drawer_page", margin_right: "lg" }) %>
@@ -1,26 +0,0 @@
1
- import React from "react"
2
- import Button from '../../pb_button/_button'
3
- import Body from "../../pb_body/_body"
4
-
5
- const DrawerMenu = () => {
6
- return (
7
- <>
8
- <Body>
9
- The breakpoint prop determines when the Drawer is always visible. Above
10
- the specified breakpoint, the Drawer remains open on the page. Below it,
11
- only the trigger element is shown, allowing you to toggle the drawer
12
- open and closed. To see this in action, click the button below and
13
- resize your window.
14
- </Body>
15
- <Button
16
- link='https://8njdkc.csb.app/'
17
- marginTop='md'
18
- newWindow
19
- >
20
- Open Doc Example in New Tab
21
- </Button>
22
- </>
23
- )
24
- }
25
-
26
- export default DrawerMenu
@@ -1,20 +0,0 @@
1
- <%= pb_rails("flex") do %>
2
- <%= pb_rails("button", props: { text: "Left Drawer", margin_right: "sm", data: {"open-drawer": "drawer-1"} }) %>
3
-
4
- <%= pb_rails("drawer", props: {
5
- id:"drawer-1",
6
- }) do %>
7
- Test me (Left Drawer)
8
- <% end %>
9
-
10
-
11
- <%= pb_rails("button", props: { text: "Right Drawer", data: {"open-drawer": "drawer-2"} }) %>
12
-
13
- <%= pb_rails("drawer", props: {
14
- id:"drawer-2",
15
- placement: "right"
16
- }) do %>
17
- Test me (Right Drawer)
18
- <% end %>
19
- <% end %>
20
-
@@ -1,59 +0,0 @@
1
- import React, { useState } from "react";
2
-
3
- import Button from '../../pb_button/_button'
4
- import Drawer from '../../pb_drawer/_drawer'
5
- import Flex from '../../pb_flex/_flex'
6
-
7
- const useDrawer = (visible = false) => {
8
- const [opened, setOpened] = useState(visible);
9
- const toggle = () => setOpened(!opened);
10
-
11
- return [opened, toggle];
12
- };
13
-
14
- const DrawerDefault = () => {
15
- const [drawerLeftOpen, toggleDrawerLeftOpen] = useDrawer();
16
- const [drawerRightOpen, toggleDrawerRightOpen ] = useDrawer();
17
-
18
- return (
19
- <>
20
- <Flex wrap>
21
- <Button
22
- id="sm"
23
- marginRight="md"
24
- onClick={toggleDrawerLeftOpen}
25
- >
26
- {"Left Drawer"}
27
- </Button>
28
- <Button
29
- marginRight="xl"
30
- onClick={toggleDrawerRightOpen}
31
- >
32
- {"Right Drawer"}
33
- </Button>
34
- </Flex>
35
- <Flex>
36
- {/* Left Drawer */}
37
- <Drawer
38
- onClose={toggleDrawerLeftOpen}
39
- opened={drawerLeftOpen}
40
- size={"lg"}
41
- >
42
- Test me (Left Drawer)
43
- </Drawer>
44
-
45
- {/* Right Drawer */}
46
- <Drawer
47
- onClose={toggleDrawerRightOpen}
48
- opened={drawerRightOpen}
49
- placement={"right"}
50
- size={"lg"}
51
- >
52
- Test me (Right Drawer)
53
- </Drawer>
54
- </Flex>
55
- </>
56
- );
57
- };
58
-
59
- export default DrawerDefault;
@@ -1,24 +0,0 @@
1
- <%= pb_rails("button", props: { padding: "xs", margin_right: "sm", data: {"open-drawer": "drawer-4"} }) do %>
2
- <%= pb_rails("icon", props: { icon: "bars", size: "2x" }) %>
3
- <% end %>
4
-
5
- <%= pb_rails("drawer", props: {
6
- id:"drawer-4",
7
- within_element: true,
8
- placement: "bottom",
9
- breakpoint: "md",
10
- size: "full"
11
- }) do %>
12
- <%= pb_rails("nav", props: { display: {xl: "none", lg: "none", md: "none", sm: "block" } }) do %>
13
- <%= pb_rails("nav/item", props: { text: "Photos", link: "#" }) %>
14
- <%= pb_rails("nav/item", props: { text: "Music", link: "#" }) %>
15
- <%= pb_rails("nav/item", props: { text: "Video", link: "#", active: true }) %>
16
- <%= pb_rails("nav/item", props: { text: "Files", link: "#" }) %>
17
- <% end %>
18
- <%= pb_rails("nav", props: { display: {md: "block", sm: "none", xs: "none" }, orientation: "horizontal" }) do %>
19
- <%= pb_rails("nav/item", props: { text: "About", link: "#" }) %>
20
- <%= pb_rails("nav/item", props: { text: "Case Studies", link: "#", active: true }) %>
21
- <%= pb_rails("nav/item", props: { text: "Service ", link: "#" }) %>
22
- <%= pb_rails("nav/item", props: { text: "Contacts", link: "#" }) %>
23
- <% end %>
24
- <% end %>
@@ -1,61 +0,0 @@
1
- import React, { useState, useEffect } from "react"
2
-
3
- import Button from '../../pb_button/_button'
4
- import Drawer from '../../pb_drawer/_drawer'
5
- import Icon from '../../pb_icon/_icon'
6
- import Nav from '../../pb_nav/_nav'
7
- import NavItem from '../../pb_nav/_item'
8
-
9
- const DrawerMenu = () => {
10
- const [isSmallScreen, setIsSmallScreen] = useState(false)
11
-
12
- useEffect(() => {
13
- const mediaQuery = window.matchMedia("(max-width: 600px)")
14
- setIsSmallScreen(mediaQuery.matches)
15
- const handler = (e) => setIsSmallScreen(e.matches)
16
- mediaQuery.addEventListener("change", handler)
17
- return () => mediaQuery.removeEventListener("change", handler)
18
- }, [])
19
-
20
- return (
21
- <div>
22
- <Button id='menuButton'
23
- padding='xs'
24
- >
25
- <Icon icon='bars'
26
- size='2x'
27
- />
28
- </Button>
29
- <Drawer
30
- breakpoint='md'
31
- placement='bottom'
32
- size='full'
33
- triggerId='menuButton'
34
- withinElement
35
- >
36
- <Nav
37
- highlight={false}
38
- link='#'
39
- orientation={isSmallScreen ? "vertical" : "horizontal"}
40
- padding={isSmallScreen ? "none" : "sm"}
41
- >
42
- <NavItem link='#'
43
- text='About'
44
- />
45
- <NavItem active
46
- link='#'
47
- text='Case Studies'
48
- />
49
- <NavItem link='#'
50
- text='Service'
51
- />
52
- <NavItem link='#'
53
- text='Contacts'
54
- />
55
- </Nav>
56
- </Drawer>
57
- </div>
58
- )
59
- }
60
-
61
- export default DrawerMenu
@@ -1,24 +0,0 @@
1
- The Drawer component can be used to create responsive navigation menus and sidebars. It provides flexible options for controlling when and how the drawer appears based on screen size.
2
-
3
- ### Within Element
4
- The `withinElement` prop allows you to render the drawer within its parent container:
5
- - The drawer will be positioned relative to its parent element
6
- - Useful for creating nested navigation structures
7
- - This must be used in conjunction with the `triggerId` prop
8
-
9
- This provides a clean way to create responsive navigation patterns that adapt to different screen sizes while maintaining a consistent user experience.
10
-
11
- ### Trigger Id
12
- The `triggerId` prop allows you to connect an element to control the drawer:
13
- - The specified element will toggle the drawer open/closed
14
- - The element is automatically hidden when the drawer is opened via breakpoint
15
- - The element reappears when the drawer is closed via breakpoint
16
-
17
- ### Breakpoint
18
- Use the `breakpoint` prop to control when the drawer automatically opens or closes based on screen size. For example, setting `breakpoint="md"` will:
19
- - Close the drawer on screens smaller than the medium breakpoint (992px)
20
- - Automatically open the drawer on screens larger than or equal to the medium breakpoint
21
-
22
-
23
-
24
-
@@ -1,21 +0,0 @@
1
- <%= pb_rails("flex") do %>
2
- <%= pb_rails("button", props: { text: "No Overlay Drawer", margin_right: "sm", data: {"open-drawer": "drawer-10"} }) %>
3
-
4
- <%= pb_rails("drawer", props: {
5
- id:"drawer-10",
6
- overlay: false
7
- }) do %>
8
- Test me (No Overlay)
9
- <% end %>
10
-
11
-
12
- <%= pb_rails("button", props: { text: "Overlay Drawer", data: {"open-drawer": "drawer-11"} }) %>
13
-
14
- <%= pb_rails("drawer", props: {
15
- id:"drawer-11",
16
- placement: "right"
17
- }) do %>
18
- Test me (Has Overlay)
19
- <% end %>
20
- <% end %>
21
-