playbook_ui 14.25.0.pre.alpha.testingcss9700 → 14.25.0.pre.alpha.testingcss9751
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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/_playbook.scss +0 -1
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +6 -6
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +1 -1
- data/app/pb_kits/playbook/pb_avatar/_avatar.scss +60 -65
- data/app/pb_kits/playbook/pb_avatar/avatar.test.js +1 -1
- data/app/pb_kits/playbook/pb_background/_background.scss +3 -3
- data/app/pb_kits/playbook/pb_badge/_badge.scss +135 -29
- data/app/pb_kits/playbook/pb_body/_body.scss +108 -35
- data/app/pb_kits/playbook/pb_body/_body_mixins.scss +1 -1
- data/app/pb_kits/playbook/pb_bread_crumbs/_bread_crumbs.scss +17 -30
- data/app/pb_kits/playbook/pb_button/_button.scss +39 -31
- data/app/pb_kits/playbook/pb_button/_button.tsx +12 -12
- data/app/pb_kits/playbook/pb_button/_button_mixins.scss +1 -1
- data/app/pb_kits/playbook/pb_button/button.rb +11 -18
- data/app/pb_kits/playbook/pb_button/button.test.js +3 -3
- data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar.scss +82 -73
- data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar_dark.scss +32 -33
- data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar_mixins.scss +1 -1
- data/app/pb_kits/playbook/pb_button_toolbar/button_toolbar.test.js +2 -2
- data/app/pb_kits/playbook/pb_caption/_caption.scss +100 -17
- data/app/pb_kits/playbook/pb_caption/_caption_mixin.scss +1 -8
- data/app/pb_kits/playbook/pb_card/_card.scss +79 -68
- data/app/pb_kits/playbook/pb_card/_card_mixin.scss +4 -4
- data/app/pb_kits/playbook/pb_checkbox/_checkbox.scss +11 -2
- data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.scss +7 -7
- data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.test.js +1 -1
- data/app/pb_kits/playbook/pb_collapsible/__snapshots__/collapsible.test.js.snap +1 -1
- data/app/pb_kits/playbook/pb_collapsible/_collapsible.scss +4 -4
- data/app/pb_kits/playbook/pb_copy_button/copy_button.test.jsx +19 -19
- data/app/pb_kits/playbook/pb_currency/_currency.scss +124 -39
- data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.scss +16 -6
- data/app/pb_kits/playbook/pb_date/_date.scss +16 -18
- data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +1 -1
- data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +19 -0
- data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +1 -0
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_inline_styles.scss +12 -12
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_input_styles.scss +2 -2
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_time_selection_styles.scss +5 -5
- data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.scss +29 -23
- data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.tsx +1 -1
- data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.scss +1 -1
- data/app/pb_kits/playbook/pb_date_range_stacked/date_range_stacked.test.js +2 -2
- data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.scss +66 -26
- data/app/pb_kits/playbook/pb_date_stacked/date_stacked.test.js +2 -2
- data/app/pb_kits/playbook/pb_date_time/_date_time.scss +8 -15
- data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.scss +6 -7
- data/app/pb_kits/playbook/pb_date_year_stacked/_date_year_stacked.scss +17 -14
- data/app/pb_kits/playbook/pb_date_year_stacked/date_year_stacked.test.js +1 -1
- data/app/pb_kits/playbook/pb_detail/_detail.scss +86 -21
- data/app/pb_kits/playbook/pb_dialog/_dialog.scss +330 -123
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_loading.html.erb +16 -2
- data/app/pb_kits/playbook/pb_distribution_bar/_distribution_bar.scss +10 -7
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +1 -1
- data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +6 -6
- data/app/pb_kits/playbook/pb_empty_state/_empty_state.scss +4 -4
- data/app/pb_kits/playbook/pb_file_upload/_file_upload.scss +20 -9
- data/app/pb_kits/playbook/pb_file_upload/file_upload.html.erb +1 -1
- data/app/pb_kits/playbook/pb_filter/_filter.scss +8 -8
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss +65 -29
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.tsx +1 -2
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.test.js +1 -1
- data/app/pb_kits/playbook/pb_flex/_flex.scss +106 -100
- data/app/pb_kits/playbook/pb_flex/_flex.tsx +38 -28
- data/app/pb_kits/playbook/pb_flex/_flex_item.scss +146 -51
- data/app/pb_kits/playbook/pb_flex/_flex_item.tsx +19 -8
- data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.html.erb +12 -1
- data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.jsx +26 -1
- data/app/pb_kits/playbook/pb_flex/docs/_flex_gap_rails.md +11 -0
- data/app/pb_kits/playbook/pb_flex/docs/_flex_gap_react.md +11 -0
- data/app/pb_kits/playbook/pb_flex/flex.rb +73 -39
- data/app/pb_kits/playbook/pb_flex/flex_item.rb +51 -6
- data/app/pb_kits/playbook/pb_form_group/_form_group.scss +1 -1
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +381 -344
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.test.jsx +4 -4
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +8 -7
- data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +9 -2
- data/app/pb_kits/playbook/pb_gauge/_gauge.scss +5 -5
- data/app/pb_kits/playbook/pb_hashtag/_hashtag.scss +1 -1
- data/app/pb_kits/playbook/pb_highlight/_highlight.scss +1 -1
- data/app/pb_kits/playbook/pb_home_address_street/home_adress_street.test.js +2 -2
- data/app/pb_kits/playbook/pb_icon/_icon.scss +4 -0
- data/app/pb_kits/playbook/pb_icon_button/_icon_button.scss +4 -4
- data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.scss +40 -39
- data/app/pb_kits/playbook/pb_icon_circle/icon_circle.rb +1 -1
- data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.test.js +1 -1
- data/app/pb_kits/playbook/pb_icon_value/_icon_value.scss +16 -15
- data/app/pb_kits/playbook/pb_image/_image.scss +41 -36
- data/app/pb_kits/playbook/pb_label_pill/_label_pill.scss +1 -1
- data/app/pb_kits/playbook/pb_label_value/_label_value.scss +3 -2
- data/app/pb_kits/playbook/pb_label_value/label_value.test.js +2 -2
- data/app/pb_kits/playbook/pb_layout/_layout.scss +330 -305
- data/app/pb_kits/playbook/pb_layout/_layout.tsx +14 -11
- data/app/pb_kits/playbook/pb_layout/body.rb +1 -1
- data/app/pb_kits/playbook/pb_layout/footer.rb +1 -1
- data/app/pb_kits/playbook/pb_layout/header.rb +1 -1
- data/app/pb_kits/playbook/pb_layout/item.rb +1 -7
- data/app/pb_kits/playbook/pb_layout/layout.rb +16 -25
- data/app/pb_kits/playbook/pb_layout/layout.test.js +3 -3
- data/app/pb_kits/playbook/pb_layout/sidebar.rb +1 -1
- data/app/pb_kits/playbook/pb_legend/_legend.scss +66 -16
- data/app/pb_kits/playbook/pb_legend/legend.test.js +1 -1
- data/app/pb_kits/playbook/pb_lightbox/lightbox.scss +4 -4
- data/app/pb_kits/playbook/pb_lightbox/lightbox.test.jsx +1 -1
- data/app/pb_kits/playbook/pb_link/_link.scss +113 -19
- data/app/pb_kits/playbook/pb_list/_list.scss +1 -1
- data/app/pb_kits/playbook/pb_loading_inline/_loading_inline.scss +13 -11
- data/app/pb_kits/playbook/pb_map/_map.scss +1 -1
- data/app/pb_kits/playbook/pb_map/docs/_map_default.jsx +1 -1
- data/app/pb_kits/playbook/pb_map/docs/_map_with_custom_button.jsx +1 -1
- data/app/pb_kits/playbook/pb_map/docs/_map_with_plugin.jsx +1 -1
- data/app/pb_kits/playbook/pb_message/_message.scss +21 -16
- data/app/pb_kits/playbook/pb_message/_message.tsx +1 -0
- data/app/pb_kits/playbook/pb_message/_message_mixins.scss +5 -12
- data/app/pb_kits/playbook/pb_message/message.html.erb +1 -1
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +6 -3
- data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.scss +16 -15
- data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.scss +1 -1
- data/app/pb_kits/playbook/pb_nav/_bold_mixin.scss +1 -1
- data/app/pb_kits/playbook/pb_nav/_collapsible_nav.scss +1 -1
- data/app/pb_kits/playbook/pb_online_status/_online_status.scss +19 -15
- data/app/pb_kits/playbook/pb_online_status/_online_status.tsx +1 -1
- data/app/pb_kits/playbook/pb_online_status/online_status.rb +5 -4
- data/app/pb_kits/playbook/pb_online_status/online_status.test.js +2 -2
- data/app/pb_kits/playbook/pb_overlay/_overlay.scss +1 -1
- data/app/pb_kits/playbook/pb_overlay/overlay.rb +1 -1
- data/app/pb_kits/playbook/pb_passphrase/_passphrase.scss +5 -2
- data/app/pb_kits/playbook/pb_person/_person.scss +1 -1
- data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +1 -1
- data/app/pb_kits/playbook/pb_pill/_pill.scss +23 -21
- data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss +15 -13
- data/app/pb_kits/playbook/pb_progress_simple/_progress_simple.scss +108 -33
- data/app/pb_kits/playbook/pb_progress_step/_progress_step.scss +1 -1
- data/app/pb_kits/playbook/pb_radio/_radio.scss +71 -52
- data/app/pb_kits/playbook/pb_radio/_radio.tsx +1 -1
- data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +0 -3
- data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.scss +4 -4
- data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +81 -70
- data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +9 -1
- data/app/pb_kits/playbook/pb_section_separator/_section_separator_mixin.scss +1 -1
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_color.jsx +3 -1
- data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +7 -1
- data/app/pb_kits/playbook/pb_select/_select.scss +4 -4
- data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +6 -2
- data/app/pb_kits/playbook/pb_selectable_card_icon/_selectable_card_icon.scss +17 -8
- data/app/pb_kits/playbook/pb_selectable_icon/_selectable_icon.scss +39 -29
- data/app/pb_kits/playbook/pb_selectable_list/_item.tsx +2 -0
- data/app/pb_kits/playbook/pb_selectable_list/_selectable_list.scss +8 -11
- data/app/pb_kits/playbook/pb_selectable_list/selectable_list.test.js +24 -25
- data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.html.erb +2 -2
- data/app/pb_kits/playbook/pb_source/_source.scss +8 -8
- data/app/pb_kits/playbook/pb_star_rating/_star_rating.scss +1 -1
- data/app/pb_kits/playbook/pb_star_rating/star_rating.test.js +1 -1
- data/app/pb_kits/playbook/pb_stat_value/_stat_value.scss +2 -2
- data/app/pb_kits/playbook/pb_text_input/_text_input.scss +5 -5
- data/app/pb_kits/playbook/pb_text_input/text_input.rb +15 -0
- data/app/pb_kits/playbook/pb_textarea/_textarea.scss +6 -6
- data/app/pb_kits/playbook/pb_time/_time.scss +44 -17
- data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.scss +1 -1
- data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.scss +5 -8
- data/app/pb_kits/playbook/pb_title/_title.scss +42 -39
- data/app/pb_kits/playbook/pb_title/_title.tsx +17 -8
- data/app/pb_kits/playbook/pb_title/_title_mixin.scss +2 -2
- data/app/pb_kits/playbook/pb_title/title.rb +20 -10
- data/app/pb_kits/playbook/pb_title/title.test.js +4 -4
- data/app/pb_kits/playbook/pb_title_count/_title_count.scss +19 -8
- data/app/pb_kits/playbook/pb_title_detail/_title_detail.scss +10 -11
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +3 -3
- data/app/pb_kits/playbook/pb_user/user.test.js +1 -1
- data/app/pb_kits/playbook/pb_user_badge/_user_badge.scss +23 -8
- data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.scss +10 -10
- data/app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.test.jsx +3 -3
- data/app/pb_kits/playbook/utilities/_gap.scss +12 -24
- data/app/pb_kits/playbook/utilities/globalPropNames.mjs +2 -0
- data/app/pb_kits/playbook/utilities/globalProps.ts +28 -4
- data/dist/chunks/_line_graph-Dv_ODxW3.js +1 -0
- data/dist/chunks/_typeahead-CD5RAaaP.js +6 -0
- data/dist/chunks/_weekday_stacked-Bv6tOPKC.js +37 -0
- data/dist/chunks/lazysizes-B7xYodB-.js +1 -0
- data/dist/chunks/lib-CY5ZPzic.js +29 -0
- data/dist/chunks/pb_form_validation-D3b0JKHH.js +1 -0
- data/dist/chunks/vendor.js +1 -11
- data/dist/menu.yml +0 -6
- data/dist/playbook-doc.js +3 -67243
- data/dist/playbook-rails-react-bindings.js +1 -112
- data/dist/playbook-rails.js +1 -2464
- data/dist/playbook.css +2 -92354
- data/dist/reset.css +1 -89
- data/lib/playbook/classnames.rb +2 -0
- data/lib/playbook/spacing.rb +53 -1
- data/lib/playbook/version.rb +1 -1
- metadata +10 -38
- data/app/pb_kits/playbook/pb_drawer/_close_icon.tsx +0 -25
- data/app/pb_kits/playbook/pb_drawer/_drawer.scss +0 -381
- data/app/pb_kits/playbook/pb_drawer/_drawer.tsx +0 -231
- data/app/pb_kits/playbook/pb_drawer/_drawer_context.tsx +0 -3
- data/app/pb_kits/playbook/pb_drawer/context.ts +0 -11
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +0 -8
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.jsx +0 -41
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +0 -33
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +0 -78
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +0 -3
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +0 -26
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +0 -20
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.jsx +0 -59
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +0 -24
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +0 -61
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.md +0 -24
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +0 -21
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +0 -54
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +0 -1
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +0 -49
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.jsx +0 -99
- data/app/pb_kits/playbook/pb_drawer/docs/example.yml +0 -20
- data/app/pb_kits/playbook/pb_drawer/docs/index.js +0 -7
- data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +0 -20
- data/app/pb_kits/playbook/pb_drawer/drawer.rb +0 -56
- data/app/pb_kits/playbook/pb_drawer/drawer.test.jsx +0 -81
- data/app/pb_kits/playbook/pb_drawer/hooks/useBreakpoint.tsx +0 -60
- data/app/pb_kits/playbook/pb_drawer/hooks/useDrawerAnimation.tsx +0 -21
- data/app/pb_kits/playbook/pb_drawer/index.js +0 -257
- data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.md +0 -9
- data/dist/chunks/_line_graph-DPTwfQR-.js +0 -544
- data/dist/chunks/_typeahead-CEqlHw0H.js +0 -30978
- data/dist/chunks/_weekday_stacked-D3dG14OB.js +0 -20894
- data/dist/chunks/lazysizes-BUUj27EF.js +0 -611
- data/dist/chunks/lib-CIetbXpr.js +0 -9609
- 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,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
|
-
|