playbook_ui 15.2.0 → 15.3.0.pre.alpha.PLAY2577reactpopoverappendToPOC11730
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 +5 -5
- data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +3 -1
- data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableActions.ts +18 -3
- data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +56 -14
- data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableHeader.tsx +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +12 -3
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +59 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_control_rails.html.erb +39 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_control_rails.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta.md +3 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta_sort.html.erb +3 -3
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta_subrow_headers.html.erb +3 -3
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_collapsible_trail_rails.html.erb +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling.md +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_column_headers_rails.html.erb +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_rails.html.erb +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_rails.md +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_row_loading.jsx +28 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_row_loading.md +11 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_padding_control_per_row_rails.html.erb +51 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_padding_control_per_row_rails.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_padding_control_rails.html.erb +40 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_padding_control_rails.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling_rails.md +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling_react.md +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_rails.html.erb +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_mock_data_inline_loading_empty_children.js +42 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/index.js +5 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +6 -6
- data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +6 -6
- data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +3 -2
- data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +49 -5
- data/app/pb_kits/playbook/pb_bread_crumbs/docs/_bread_crumbs_default.html.erb +4 -4
- data/app/pb_kits/playbook/pb_bread_crumbs/docs/_bread_crumbs_default.jsx +4 -0
- data/app/pb_kits/playbook/pb_button/_button.scss +6 -0
- data/app/pb_kits/playbook/pb_button/docs/_button_loading.html.erb +7 -3
- data/app/pb_kits/playbook/pb_button/docs/_button_loading.jsx +29 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range_pattern.jsx +1 -1
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_quick_pick_styles.scss +11 -30
- data/app/pb_kits/playbook/pb_draggable/_draggable.scss +8 -0
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss +0 -1
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.tsx +5 -3
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_description.md +2 -0
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.rb +4 -1
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.test.js +10 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_loading.html.erb +1 -1
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -1
- data/app/pb_kits/playbook/pb_form/formHelper.js +1 -1
- data/app/pb_kits/playbook/pb_pb_bar_graph/_pb_bar_graph.tsx +8 -6
- data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_description.md +3 -0
- data/app/pb_kits/playbook/pb_pb_bar_graph/pb_bar_graph.rb +7 -10
- data/app/pb_kits/playbook/pb_pb_bar_graph/pbbargraph.test.jsx +73 -1
- data/app/pb_kits/playbook/pb_pb_circle_chart/_pb_circle_chart.tsx +1 -1
- data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_description.md +3 -0
- data/app/pb_kits/playbook/pb_pb_circle_chart/pb_circle_chart.rb +7 -10
- data/app/pb_kits/playbook/pb_pb_circle_chart/pb_circle_chart.test.jsx +47 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/_pb_gauge_chart.scss +3 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/_pb_gauge_chart.tsx +69 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_description.md +3 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_color.html.erb +12 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_color.jsx +24 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_color.md +5 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_complex.html.erb +45 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_complex.jsx +119 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_complex.md +1 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_default.html.erb +5 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_default.jsx +17 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_disable_animation.html.erb +12 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_disable_animation.jsx +24 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_full_circle.html.erb +23 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_full_circle.jsx +37 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_height.html.erb +40 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_height.jsx +56 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_live_data.jsx +64 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_min_max.html.erb +27 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_min_max.jsx +40 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_min_max.md +1 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_sizing.html.erb +19 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_sizing.jsx +65 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_sizing.md +3 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_title.html.erb +14 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_title.jsx +27 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_units.html.erb +39 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_units.jsx +58 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_units.md +1 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/example.yml +29 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/index.js +11 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/pbGaugeGraphTheme.ts +91 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/pb_gauge_chart.html.erb +1 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/pb_gauge_chart.rb +25 -0
- data/app/pb_kits/playbook/pb_pb_gauge_chart/pb_gauge_chart.test.jsx +80 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/_pb_line_graph.scss +3 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/_pb_line_graph.tsx +61 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_description.md +3 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_colors.html.erb +34 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_colors.jsx +52 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_colors.md +5 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_default.html.erb +34 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_default.jsx +45 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_height.html.erb +47 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_height.jsx +64 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_height.md +3 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend.html.erb +24 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend.jsx +37 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend_nonclickable.html.erb +39 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend_nonclickable.jsx +45 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend_position.html.erb +86 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend_position.jsx +116 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend_position.md +11 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/example.yml +20 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/docs/index.js +6 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/pbLineGraphTheme.ts +125 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/pb_line_graph.html.erb +1 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/pb_line_graph.rb +25 -0
- data/app/pb_kits/playbook/pb_pb_line_graph/pb_line_graph.test.jsx +110 -0
- data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +130 -28
- data/app/pb_kits/playbook/pb_popover/_popover.tsx +26 -5
- data/app/pb_kits/playbook/pb_popover/docs/_popover_append_to.jsx +68 -0
- data/app/pb_kits/playbook/pb_popover/docs/_popover_append_to_react.md +1 -0
- data/app/pb_kits/playbook/pb_popover/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_popover/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_popover/popover.test.js +80 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/TipTap/Toolbar.tsx +41 -2
- data/app/pb_kits/playbook/pb_rich_text_editor/TipTap/ToolbarDropdown.tsx +1 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.tsx +60 -20
- data/app/pb_kits/playbook/pb_rich_text_editor/_tiptap_styles.scss +36 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_attributes.jsx +38 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_attributes.md +1 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_focus.jsx +34 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_focus.md +1 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_inline.jsx +37 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_inline.md +1 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_simple.jsx +37 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_sticky.jsx +38 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_sticky.md +1 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_templates.jsx +69 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_templates.md +1 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/example.yml +8 -2
- data/app/pb_kits/playbook/pb_rich_text_editor/docs/index.js +6 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor.test.js +127 -1
- data/app/pb_kits/playbook/pb_timeline/_timeline.scss +250 -233
- data/app/pb_kits/playbook/pb_timeline/_timeline.tsx +1 -1
- data/app/pb_kits/playbook/pb_timeline/timeline.test.js +2 -2
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +35 -1
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +71 -2
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default_options.html.erb +36 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default_options.md +1 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default_value.jsx +41 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default_value.md +1 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/index.js +1 -0
- data/app/pb_kits/playbook/tokens/_positioning.scss +1 -0
- data/app/pb_kits/playbook/utilities/_positioning.scss +6 -1
- data/app/pb_kits/playbook/utilities/globalProps.ts +3 -1
- data/dist/chunks/{_line_graph-ByLTvO72.js → _line_graph-BzjyTvYN.js} +1 -1
- data/dist/chunks/_typeahead-esKmpSrF.js +6 -0
- data/dist/chunks/{_weekday_stacked-CB1Sm0pQ.js → _weekday_stacked-aFv39NoP.js} +3 -3
- data/dist/chunks/{lib-izYrkvOQ.js → lib-CGxXTQ75.js} +2 -2
- data/dist/chunks/{pb_form_validation-Cah5Z5J3.js → pb_form_validation-DebqlUKZ.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/menu.yml +12 -0
- data/dist/playbook-doc.js +2 -2
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/pb_forms_helper.rb +7 -6
- data/lib/playbook/version.rb +2 -2
- data/lib/playbook/z_index.rb +1 -1
- metadata +93 -8
- data/dist/chunks/_typeahead-DXZQU3hC.js +0 -6
- /data/app/pb_kits/playbook/pb_popover/docs/{_popover_append_to.md → _popover_append_to_rails.md} +0 -0
| @@ -24,6 +24,7 @@ import { uniqueId } from '../utilities/object'; | |
| 24 24 | 
             
            type ModifiedGlobalProps = Omit<GlobalProps, 'minWidth' | 'maxHeight' | 'minHeight'>
         | 
| 25 25 |  | 
| 26 26 | 
             
            type PbPopoverProps = {
         | 
| 27 | 
            +
              appendTo?: string;
         | 
| 27 28 | 
             
              aria?: { [key: string]: string };
         | 
| 28 29 | 
             
              className?: string;
         | 
| 29 30 | 
             
              closeOnClick?: "outside" | "inside" | "any";
         | 
| @@ -62,6 +63,25 @@ const popoverModifiers = ({ | |
| 62 63 | 
             
              return offset ? modifiers.concat([POPOVER_MODIFIERS.offset]) : modifiers;
         | 
| 63 64 | 
             
            };
         | 
| 64 65 |  | 
| 66 | 
            +
            const getAppendTarget = (
         | 
| 67 | 
            +
              appendTo: string | undefined,
         | 
| 68 | 
            +
              targetId: string
         | 
| 69 | 
            +
            ): HTMLElement => {
         | 
| 70 | 
            +
              if (!appendTo || appendTo === "body") return document.body;
         | 
| 71 | 
            +
             | 
| 72 | 
            +
              if (appendTo === "parent") {
         | 
| 73 | 
            +
                const referenceWrapper = document.querySelector(`#reference-${targetId}`);
         | 
| 74 | 
            +
                if (referenceWrapper?.parentElement) {
         | 
| 75 | 
            +
                  return referenceWrapper.parentElement;
         | 
| 76 | 
            +
                }
         | 
| 77 | 
            +
              }
         | 
| 78 | 
            +
             | 
| 79 | 
            +
              const selectorMatch = document.querySelector(appendTo);
         | 
| 80 | 
            +
              if (selectorMatch instanceof HTMLElement) return selectorMatch;
         | 
| 81 | 
            +
             | 
| 82 | 
            +
              return document.body;
         | 
| 83 | 
            +
            };
         | 
| 84 | 
            +
             | 
| 65 85 | 
             
            const Popover = (props: PbPopoverProps) => {
         | 
| 66 86 | 
             
              const {
         | 
| 67 87 | 
             
                aria = {},
         | 
| @@ -113,7 +133,7 @@ const Popover = (props: PbPopoverProps) => { | |
| 113 133 |  | 
| 114 134 | 
             
              return (
         | 
| 115 135 | 
             
                <Popper
         | 
| 116 | 
            -
                    modifiers={popoverModifiers({ modifiers, offset })}
         | 
| 136 | 
            +
                    modifiers={popoverModifiers({ modifiers, offset: offset || false })}
         | 
| 117 137 | 
             
                    placement={placement}
         | 
| 118 138 | 
             
                    referenceElement={referenceElement}
         | 
| 119 139 | 
             
                >
         | 
| @@ -154,6 +174,7 @@ const Popover = (props: PbPopoverProps) => { | |
| 154 174 | 
             
            const PbReactPopover = (props: PbPopoverProps): React.ReactElement => {
         | 
| 155 175 | 
             
              const [targetId] = useState(uniqueId('id-'))
         | 
| 156 176 | 
             
              const {
         | 
| 177 | 
            +
                appendTo,
         | 
| 157 178 | 
             
                className,
         | 
| 158 179 | 
             
                children,
         | 
| 159 180 | 
             
                modifiers = [],
         | 
| @@ -246,10 +267,10 @@ const PbReactPopover = (props: PbPopoverProps): React.ReactElement => { | |
| 246 267 | 
             
                    {show &&
         | 
| 247 268 | 
             
                      (usePortal ? (
         | 
| 248 269 | 
             
                        <>
         | 
| 249 | 
            -
             | 
| 250 | 
            -
             | 
| 251 | 
            -
             | 
| 252 | 
            -
             | 
| 270 | 
            +
                            {ReactDOM.createPortal(
         | 
| 271 | 
            +
                              popoverComponent,
         | 
| 272 | 
            +
                              getAppendTarget(appendTo, targetId)
         | 
| 273 | 
            +
                            )}
         | 
| 253 274 | 
             
                        </>
         | 
| 254 275 | 
             
                      ) : (
         | 
| 255 276 | 
             
                        { popoverComponent }
         | 
| @@ -0,0 +1,68 @@ | |
| 1 | 
            +
            import React, { useState } from "react";
         | 
| 2 | 
            +
            import { PbReactPopover, CircleIconButton, Body, Flex } from "playbook-ui";
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            const PopoverAppendTo = (props) => {
         | 
| 5 | 
            +
              const [showParentPopover, setShowParentPopover] = useState(false);
         | 
| 6 | 
            +
              const [showSelectorPopover, setShowSelectorPopover] = useState(false);
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              const parentPopoverReference = (
         | 
| 9 | 
            +
                <CircleIconButton
         | 
| 10 | 
            +
                    icon="info"
         | 
| 11 | 
            +
                    onClick={() => setShowParentPopover(!showParentPopover)}
         | 
| 12 | 
            +
                    variant="secondary"
         | 
| 13 | 
            +
                />
         | 
| 14 | 
            +
              );
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              const selectorPopoverReference = (
         | 
| 17 | 
            +
                <CircleIconButton
         | 
| 18 | 
            +
                    icon="info"
         | 
| 19 | 
            +
                    onClick={() => setShowSelectorPopover(!showSelectorPopover)}
         | 
| 20 | 
            +
                    variant="secondary"
         | 
| 21 | 
            +
                />
         | 
| 22 | 
            +
              );
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              return (
         | 
| 25 | 
            +
                <>
         | 
| 26 | 
            +
                  <Flex
         | 
| 27 | 
            +
                      marginBottom="md"
         | 
| 28 | 
            +
                      orientation="row"
         | 
| 29 | 
            +
                      vertical="center"
         | 
| 30 | 
            +
                      {...props}
         | 
| 31 | 
            +
                  >
         | 
| 32 | 
            +
                    <Body text="Click info for more details" />
         | 
| 33 | 
            +
                     
         | 
| 34 | 
            +
                    <PbReactPopover
         | 
| 35 | 
            +
                        appendTo="parent"
         | 
| 36 | 
            +
                        offset
         | 
| 37 | 
            +
                        placement="top"
         | 
| 38 | 
            +
                        reference={parentPopoverReference}
         | 
| 39 | 
            +
                        show={showParentPopover}
         | 
| 40 | 
            +
                        {...props}
         | 
| 41 | 
            +
                    >
         | 
| 42 | 
            +
                      {'I\'m a popover. I have been appended to my parent element.'}
         | 
| 43 | 
            +
                    </PbReactPopover>
         | 
| 44 | 
            +
                  </Flex>
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  <Flex
         | 
| 47 | 
            +
                      orientation="row"
         | 
| 48 | 
            +
                      vertical="center"
         | 
| 49 | 
            +
                      {...props}
         | 
| 50 | 
            +
                  >
         | 
| 51 | 
            +
                    <Body text="Click info for more details" />
         | 
| 52 | 
            +
                     
         | 
| 53 | 
            +
                    <PbReactPopover
         | 
| 54 | 
            +
                        appendTo=".kit-show-wrapper"
         | 
| 55 | 
            +
                        offset
         | 
| 56 | 
            +
                        placement="top"
         | 
| 57 | 
            +
                        reference={selectorPopoverReference}
         | 
| 58 | 
            +
                        show={showSelectorPopover}
         | 
| 59 | 
            +
                        {...props}
         | 
| 60 | 
            +
                    >
         | 
| 61 | 
            +
                      {'I\'m a popover. I have been appended to the .kit-show-wrapper.'}
         | 
| 62 | 
            +
                    </PbReactPopover>
         | 
| 63 | 
            +
                  </Flex>
         | 
| 64 | 
            +
                </>
         | 
| 65 | 
            +
              );
         | 
| 66 | 
            +
            };
         | 
| 67 | 
            +
             | 
| 68 | 
            +
            export default PopoverAppendTo;
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            By default, the popover tooltip attaches to the `<body>`. To attach it elsewhere, use the `appendTo` prop. Set it to `"parent"` to place the tooltip inside its parent element, or pass any CSS selector (`#id` or `.class`) to specify a custom container.
         | 
| @@ -4,3 +4,4 @@ export { default as PopoverClose } from './_popover_close.jsx' | |
| 4 4 | 
             
            export { default as PopoverZIndex } from './_popover_z_index.jsx'
         | 
| 5 5 | 
             
            export { default as PopoverScrollHeight } from './_popover_scroll_height.jsx'
         | 
| 6 6 | 
             
            export { default as PopoverActionableContent } from './_popover_actionable_content.jsx'
         | 
| 7 | 
            +
            export { default as PopoverAppendTo } from './_popover_append_to.jsx'
         | 
| @@ -159,6 +159,62 @@ const PopoverTestClicktoClose3 = () => { | |
| 159 159 | 
             
              )
         | 
| 160 160 | 
             
            };
         | 
| 161 161 |  | 
| 162 | 
            +
            //Test Popover with appendTo="parent"
         | 
| 163 | 
            +
            const PopoverTestAppendToParent = () => {
         | 
| 164 | 
            +
              const [mockState, setMockState] = React.useState(false)
         | 
| 165 | 
            +
              const togglePopover = () => {
         | 
| 166 | 
            +
                setMockState(!mockState)
         | 
| 167 | 
            +
              }
         | 
| 168 | 
            +
             | 
| 169 | 
            +
              const popoverReference = (
         | 
| 170 | 
            +
                <Button onClick={togglePopover}
         | 
| 171 | 
            +
                    text="Click Me"
         | 
| 172 | 
            +
                />
         | 
| 173 | 
            +
              );
         | 
| 174 | 
            +
              return (
         | 
| 175 | 
            +
                <div data-testid="parent-container"
         | 
| 176 | 
            +
                    id="parent-container"
         | 
| 177 | 
            +
                >
         | 
| 178 | 
            +
                  <PbReactPopover
         | 
| 179 | 
            +
                      appendTo="parent"
         | 
| 180 | 
            +
                      offset
         | 
| 181 | 
            +
                      reference={popoverReference}
         | 
| 182 | 
            +
                      show={mockState}
         | 
| 183 | 
            +
                  >
         | 
| 184 | 
            +
                    {"Appended to parent"}
         | 
| 185 | 
            +
                  </PbReactPopover>
         | 
| 186 | 
            +
                </div>
         | 
| 187 | 
            +
              )
         | 
| 188 | 
            +
            };
         | 
| 189 | 
            +
             | 
| 190 | 
            +
            //Test Popover with appendTo CSS selector
         | 
| 191 | 
            +
            const PopoverTestAppendToSelector = () => {
         | 
| 192 | 
            +
              const [mockState, setMockState] = React.useState(false)
         | 
| 193 | 
            +
              const togglePopover = () => {
         | 
| 194 | 
            +
                setMockState(!mockState)
         | 
| 195 | 
            +
              }
         | 
| 196 | 
            +
             | 
| 197 | 
            +
              const popoverReference = (
         | 
| 198 | 
            +
                <Button onClick={togglePopover}
         | 
| 199 | 
            +
                    text="Click Me"
         | 
| 200 | 
            +
                />
         | 
| 201 | 
            +
              );
         | 
| 202 | 
            +
              return (
         | 
| 203 | 
            +
                <div data-testid="custom-container"
         | 
| 204 | 
            +
                    id="custom-container"
         | 
| 205 | 
            +
                >
         | 
| 206 | 
            +
                  <PbReactPopover
         | 
| 207 | 
            +
                      appendTo="#custom-container"
         | 
| 208 | 
            +
                      offset
         | 
| 209 | 
            +
                      reference={popoverReference}
         | 
| 210 | 
            +
                      show={mockState}
         | 
| 211 | 
            +
                  >
         | 
| 212 | 
            +
                    {"Appended to custom container"}
         | 
| 213 | 
            +
                  </PbReactPopover>
         | 
| 214 | 
            +
                </div>
         | 
| 215 | 
            +
              )
         | 
| 216 | 
            +
            };
         | 
| 217 | 
            +
             | 
| 162 218 |  | 
| 163 219 | 
             
              test("renders Popover", () => {
         | 
| 164 220 | 
             
                render(<PopoverTest data={{ testid: testId}}/>)
         | 
| @@ -217,4 +273,28 @@ const PopoverTestClicktoClose3 = () => { | |
| 217 273 | 
             
                fireEvent.click(btn);
         | 
| 218 274 |  | 
| 219 275 | 
             
                expect(kit).not.toBeInTheDocument;
         | 
| 276 | 
            +
              });
         | 
| 277 | 
            +
             | 
| 278 | 
            +
              test("renders Popover with appendTo parent", () => {
         | 
| 279 | 
            +
                render(<PopoverTestAppendToParent data={{ testid: testId}}/>)
         | 
| 280 | 
            +
                const btn = screen.getByText(/click me/i)
         | 
| 281 | 
            +
                fireEvent.click(btn);
         | 
| 282 | 
            +
                const kit = screen.getByText("Appended to parent");
         | 
| 283 | 
            +
                expect(kit).toBeInTheDocument();
         | 
| 284 | 
            +
                
         | 
| 285 | 
            +
                // Check that the popover is rendered inside the parent container
         | 
| 286 | 
            +
                const parentContainer = screen.getByTestId("parent-container");
         | 
| 287 | 
            +
                expect(parentContainer).toContainElement(kit);
         | 
| 288 | 
            +
              });
         | 
| 289 | 
            +
             | 
| 290 | 
            +
              test("renders Popover with appendTo CSS selector", () => {
         | 
| 291 | 
            +
                render(<PopoverTestAppendToSelector data={{ testid: testId}}/>)
         | 
| 292 | 
            +
                const btn = screen.getByText(/click me/i)
         | 
| 293 | 
            +
                fireEvent.click(btn);
         | 
| 294 | 
            +
                const kit = screen.getByText("Appended to custom container");
         | 
| 295 | 
            +
                expect(kit).toBeInTheDocument();
         | 
| 296 | 
            +
                
         | 
| 297 | 
            +
                // Check that the popover is rendered inside the custom container
         | 
| 298 | 
            +
                const customContainer = screen.getByTestId("custom-container");
         | 
| 299 | 
            +
                expect(customContainer).toContainElement(kit);
         | 
| 220 300 | 
             
              });
         | 
| @@ -11,7 +11,7 @@ import { ToolbarTypes } from "./EditorTypes"; | |
| 11 11 | 
             
            import ToolbarHistoryItems from "./ToolbarHistory";
         | 
| 12 12 | 
             
            import MoreExtensionsDropdown from "./MoreExtensionsDropdown";
         | 
| 13 13 |  | 
| 14 | 
            -
            const EditorToolbar = ({ editor, extensions }: any): React.ReactElement => {
         | 
| 14 | 
            +
            const EditorToolbar = ({ editor, extensions, simple, sticky }: any): React.ReactElement => {
         | 
| 15 15 | 
             
              const toolbaritems = [
         | 
| 16 16 | 
             
                {
         | 
| 17 17 | 
             
                    icon: "bold",
         | 
| @@ -33,15 +33,50 @@ const EditorToolbar = ({ editor, extensions }: any): React.ReactElement => { | |
| 33 33 | 
             
                },
         | 
| 34 34 | 
             
              ]
         | 
| 35 35 |  | 
| 36 | 
            +
              const simpleToolbaritems = [
         | 
| 37 | 
            +
                {
         | 
| 38 | 
            +
                    icon: "bold",
         | 
| 39 | 
            +
                    text: "Bold",
         | 
| 40 | 
            +
                    classname:`toolbar_button ${editor.isActive('bold') ? 'is-active' : ''}`,
         | 
| 41 | 
            +
                    onclick:()=>editor.chain().focus().toggleBold().run(),
         | 
| 42 | 
            +
                },
         | 
| 43 | 
            +
                {
         | 
| 44 | 
            +
                    icon: "italic",
         | 
| 45 | 
            +
                    text: "Italic",
         | 
| 46 | 
            +
                    classname:`toolbar_button ${editor.isActive('italic') ? 'is-active' : ''}`,
         | 
| 47 | 
            +
                    onclick:() => editor.chain().focus().toggleItalic().run(),
         | 
| 48 | 
            +
                },
         | 
| 49 | 
            +
              ]
         | 
| 50 | 
            +
             | 
| 36 51 | 
             
              return (
         | 
| 37 52 | 
             
                <Background backgroundColor="white"
         | 
| 38 | 
            -
                    className= | 
| 53 | 
            +
                    className={`toolbar ${sticky ? 'pb_rich_text_editor_tiptap_toolbar_sticky' : ''}`}
         | 
| 54 | 
            +
                    
         | 
| 39 55 | 
             
                >
         | 
| 40 56 | 
             
                  <Flex flex="0"
         | 
| 41 57 | 
             
                      justify="between"
         | 
| 42 58 | 
             
                      paddingX="sm"
         | 
| 43 59 | 
             
                      paddingY="xxs"
         | 
| 44 60 | 
             
                  >
         | 
| 61 | 
            +
                    {
         | 
| 62 | 
            +
                      simple ? (
         | 
| 63 | 
            +
                        <>
         | 
| 64 | 
            +
                          <Flex className="toolbar_block">
         | 
| 65 | 
            +
                            {simpleToolbaritems && simpleToolbaritems.map(
         | 
| 66 | 
            +
                              ({ icon, text, classname, onclick}: ToolbarTypes, index: number) => (
         | 
| 67 | 
            +
                                <EditorButton
         | 
| 68 | 
            +
                                    classname={classname}
         | 
| 69 | 
            +
                                    icon={icon}
         | 
| 70 | 
            +
                                    key={index}
         | 
| 71 | 
            +
                                    onclick={onclick}
         | 
| 72 | 
            +
                                    text={text}
         | 
| 73 | 
            +
                                />
         | 
| 74 | 
            +
                              )
         | 
| 75 | 
            +
                            )}
         | 
| 76 | 
            +
                          </Flex>
         | 
| 77 | 
            +
                        </>
         | 
| 78 | 
            +
                      ) : (
         | 
| 79 | 
            +
                        <>
         | 
| 45 80 | 
             
                    <FlexItem className="toolbar_block"
         | 
| 46 81 | 
             
                        displayFlex
         | 
| 47 82 | 
             
                    >
         | 
| @@ -69,6 +104,10 @@ const EditorToolbar = ({ editor, extensions }: any): React.ReactElement => { | |
| 69 104 | 
             
                        }
         | 
| 70 105 | 
             
                    </FlexItem>
         | 
| 71 106 | 
             
                    <ToolbarHistoryItems editor={editor} />
         | 
| 107 | 
            +
                    </>
         | 
| 108 | 
            +
                      )
         | 
| 109 | 
            +
                    }
         | 
| 110 | 
            +
                   
         | 
| 72 111 | 
             
                  </Flex>
         | 
| 73 112 | 
             
                </Background>
         | 
| 74 113 | 
             
              );
         | 
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            import React, { useEffect, useState } from 'react'
         | 
| 1 | 
            +
            import React, { useEffect, useState, useRef } from 'react'
         | 
| 2 2 | 
             
            import classnames from 'classnames'
         | 
| 3 3 | 
             
            import { TrixEditor } from 'react-trix'
         | 
| 4 4 |  | 
| @@ -77,7 +77,9 @@ const RichTextEditor = (props: RichTextEditorProps): React.ReactElement => { | |
| 77 77 |  | 
| 78 78 | 
             
              const ariaProps = buildAriaProps(aria),
         | 
| 79 79 | 
             
                dataProps = buildDataProps(data),
         | 
| 80 | 
            -
                [editor, setEditor] = useState<Editor>()
         | 
| 80 | 
            +
                [editor, setEditor] = useState<Editor>(),
         | 
| 81 | 
            +
                [showToolbarOnFocus, setShowToolbarOnFocus] = useState(false),
         | 
| 82 | 
            +
                containerRef = useRef<HTMLDivElement>(null)
         | 
| 81 83 |  | 
| 82 84 | 
             
              const htmlProps = buildHtmlProps(htmlOptions)
         | 
| 83 85 |  | 
| @@ -128,6 +130,42 @@ const RichTextEditor = (props: RichTextEditorProps): React.ReactElement => { | |
| 128 130 | 
             
                document.addEventListener('trix-blur', inlineFocus)
         | 
| 129 131 | 
             
              }
         | 
| 130 132 |  | 
| 133 | 
            +
              //===========focus prop with advanced editor=================
         | 
| 134 | 
            +
              const isClickInPopover = (event: Event): boolean => {
         | 
| 135 | 
            +
                return !!(event.target as Element).closest('.pb_tiptap_toolbar_dropdown_popover')
         | 
| 136 | 
            +
              }
         | 
| 137 | 
            +
             | 
| 138 | 
            +
              const isClickInContainer = (event: Event): boolean => {
         | 
| 139 | 
            +
                return !!(containerRef.current && containerRef.current.contains(event.target as Node))
         | 
| 140 | 
            +
              }
         | 
| 141 | 
            +
             | 
| 142 | 
            +
              useEffect(() => {
         | 
| 143 | 
            +
                if (!advancedEditor || !focus) return
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                const handleFocus = () => setShowToolbarOnFocus(true)
         | 
| 146 | 
            +
                
         | 
| 147 | 
            +
                const handleClickOutside = (event: Event) => {
         | 
| 148 | 
            +
                  if (isClickInContainer(event) || isClickInPopover(event)) return
         | 
| 149 | 
            +
                  setShowToolbarOnFocus(false)
         | 
| 150 | 
            +
                }
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                const editorElement = advancedEditor?.view?.dom
         | 
| 153 | 
            +
                if (editorElement) {
         | 
| 154 | 
            +
                  editorElement.addEventListener('focus', handleFocus)
         | 
| 155 | 
            +
                }
         | 
| 156 | 
            +
             | 
| 157 | 
            +
                document.addEventListener('mousedown', handleClickOutside)
         | 
| 158 | 
            +
             | 
| 159 | 
            +
                return () => {
         | 
| 160 | 
            +
                  if (editorElement) {
         | 
| 161 | 
            +
                    editorElement.removeEventListener('focus', handleFocus)
         | 
| 162 | 
            +
                  }
         | 
| 163 | 
            +
                  document.removeEventListener('mousedown', handleClickOutside)
         | 
| 164 | 
            +
                }
         | 
| 165 | 
            +
              }, [advancedEditor, focus])
         | 
| 166 | 
            +
             | 
| 167 | 
            +
              //============= end focus prop with advanced editor=================
         | 
| 168 | 
            +
             | 
| 131 169 | 
             
              useEffect(() => {
         | 
| 132 170 | 
             
                if (!editor || !template) return
         | 
| 133 171 | 
             
                editor.loadHTML('')
         | 
| @@ -148,41 +186,43 @@ const RichTextEditor = (props: RichTextEditorProps): React.ReactElement => { | |
| 148 186 | 
             
                })
         | 
| 149 187 | 
             
              }, [editor])
         | 
| 150 188 |  | 
| 151 | 
            -
               | 
| 152 | 
            -
             | 
| 153 | 
            -
                 | 
| 154 | 
            -
                 | 
| 155 | 
            -
             | 
| 156 | 
            -
             | 
| 157 | 
            -
             | 
| 158 | 
            -
             | 
| 159 | 
            -
             | 
| 160 | 
            -
                 | 
| 161 | 
            -
                 | 
| 162 | 
            -
                 | 
| 163 | 
            -
                stickyClass,
         | 
| 164 | 
            -
                inlineClass,
         | 
| 165 | 
            -
                toolbarBottomClass,
         | 
| 166 | 
            -
                css
         | 
| 189 | 
            +
              // Generate CSS classes
         | 
| 190 | 
            +
              const css = classnames(
         | 
| 191 | 
            +
                'pb_rich_text_editor_kit',
         | 
| 192 | 
            +
                {
         | 
| 193 | 
            +
                  simple: simple,
         | 
| 194 | 
            +
                  'focus-editor-targets': focus,
         | 
| 195 | 
            +
                  sticky: sticky,
         | 
| 196 | 
            +
                  inline: inline,
         | 
| 197 | 
            +
                  'toolbar-bottom': toolbarBottom,
         | 
| 198 | 
            +
                },
         | 
| 199 | 
            +
                globalProps(props, { maxWidth }),
         | 
| 200 | 
            +
                className
         | 
| 167 201 | 
             
              )
         | 
| 168 202 |  | 
| 203 | 
            +
              // Determine if toolbar should be shown
         | 
| 204 | 
            +
              const shouldShowToolbar = focus && advancedEditor ? showToolbarOnFocus : advancedEditorToolbar
         | 
| 205 | 
            +
             | 
| 169 206 | 
             
              return (
         | 
| 170 207 | 
             
                <div
         | 
| 171 208 | 
             
                    {...ariaProps}
         | 
| 172 209 | 
             
                    {...dataProps}
         | 
| 173 210 | 
             
                    {...htmlProps}
         | 
| 174 211 | 
             
                    className={css}
         | 
| 212 | 
            +
                    ref={focus ? containerRef : undefined}
         | 
| 175 213 | 
             
                >
         | 
| 176 214 | 
             
                  {
         | 
| 177 215 | 
             
                    advancedEditor ? (
         | 
| 178 216 | 
             
                      <div 
         | 
| 179 217 | 
             
                          className={classnames("pb_rich_text_editor_advanced_container", { 
         | 
| 180 | 
            -
                          ["toolbar-active"]:  | 
| 218 | 
            +
                          ["toolbar-active"]: shouldShowToolbar,
         | 
| 181 219 | 
             
                          })}
         | 
| 182 220 | 
             
                      >
         | 
| 183 | 
            -
                        { | 
| 221 | 
            +
                        {shouldShowToolbar && (
         | 
| 184 222 | 
             
                          <EditorToolbar editor={advancedEditor}
         | 
| 185 223 | 
             
                              extensions={extensions}
         | 
| 224 | 
            +
                              simple={simple}
         | 
| 225 | 
            +
                              sticky={sticky}
         | 
| 186 226 | 
             
                          />
         | 
| 187 227 | 
             
                        )}
         | 
| 188 228 | 
             
                      { children }
         | 
| @@ -9,6 +9,37 @@ | |
| 9 9 | 
             
            @import "previewer_mixin";
         | 
| 10 10 |  | 
| 11 11 | 
             
            [class^="pb_rich_text_editor_kit"] {
         | 
| 12 | 
            +
                &.inline {
         | 
| 13 | 
            +
                    .toolbar {
         | 
| 14 | 
            +
                      opacity: 0;
         | 
| 15 | 
            +
                      transition: all 0.3s ease-in-out 0s;
         | 
| 16 | 
            +
                    }
         | 
| 17 | 
            +
                
         | 
| 18 | 
            +
                    &:focus-within .toolbar {
         | 
| 19 | 
            +
                      opacity: 100;
         | 
| 20 | 
            +
                    }
         | 
| 21 | 
            +
                
         | 
| 22 | 
            +
                    .ProseMirror {
         | 
| 23 | 
            +
                      border: 1px solid transparent;
         | 
| 24 | 
            +
                      transition: all 0.3s ease-in-out 0s;
         | 
| 25 | 
            +
                    }
         | 
| 26 | 
            +
                
         | 
| 27 | 
            +
                    &:focus-within .ProseMirror {
         | 
| 28 | 
            +
                      border: 1px solid $border_light;
         | 
| 29 | 
            +
                      border-top: none;
         | 
| 30 | 
            +
                    }
         | 
| 31 | 
            +
                
         | 
| 32 | 
            +
                    &:hover {
         | 
| 33 | 
            +
                      .toolbar {
         | 
| 34 | 
            +
                        opacity: 100;
         | 
| 35 | 
            +
                      }
         | 
| 36 | 
            +
                
         | 
| 37 | 
            +
                      .ProseMirror {
         | 
| 38 | 
            +
                        border: 1px solid $border_light;
         | 
| 39 | 
            +
                        border-top: none;
         | 
| 40 | 
            +
                      }
         | 
| 41 | 
            +
                    }
         | 
| 42 | 
            +
                  }
         | 
| 12 43 | 
             
              .toolbar_button {
         | 
| 13 44 | 
             
                display: flex;
         | 
| 14 45 | 
             
                align-items: center;
         | 
| @@ -42,6 +73,11 @@ | |
| 42 73 | 
             
                }
         | 
| 43 74 | 
             
              }
         | 
| 44 75 |  | 
| 76 | 
            +
              .pb_rich_text_editor_tiptap_toolbar_sticky {
         | 
| 77 | 
            +
                position: sticky;
         | 
| 78 | 
            +
                top: 0;
         | 
| 79 | 
            +
                z-index: 10;
         | 
| 80 | 
            +
              }
         | 
| 45 81 | 
             
              .toolbar {
         | 
| 46 82 | 
             
                border-radius: $border_rad_heaviest $border_rad_heaviest 0 0;
         | 
| 47 83 | 
             
                border: 1px solid $border_light;
         | 
| @@ -0,0 +1,38 @@ | |
| 1 | 
            +
            import React from 'react'
         | 
| 2 | 
            +
            import RichTextEditor from '../../pb_rich_text_editor/_rich_text_editor'
         | 
| 3 | 
            +
            import { useEditor, EditorContent } from "@tiptap/react"
         | 
| 4 | 
            +
            import StarterKit from "@tiptap/starter-kit"
         | 
| 5 | 
            +
            import Link from '@tiptap/extension-link'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
             | 
| 8 | 
            +
            const RichTextEditorAdvancedAttributes = (props) => {
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                const editor = useEditor({
         | 
| 11 | 
            +
                    extensions: [
         | 
| 12 | 
            +
                        StarterKit,
         | 
| 13 | 
            +
                        Link
         | 
| 14 | 
            +
                    ],
         | 
| 15 | 
            +
                    content:"Add your text here. You can format your text, add links, quotes, and bullets."
         | 
| 16 | 
            +
                })
         | 
| 17 | 
            +
                  if (!editor) {
         | 
| 18 | 
            +
                    return null
         | 
| 19 | 
            +
                  } 
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  
         | 
| 22 | 
            +
             | 
| 23 | 
            +
             | 
| 24 | 
            +
              return (
         | 
| 25 | 
            +
                <div>
         | 
| 26 | 
            +
                  <RichTextEditor
         | 
| 27 | 
            +
                      advancedEditor={editor}
         | 
| 28 | 
            +
                      aria={{ label: 'I am a rich text editor' }}
         | 
| 29 | 
            +
                      data={{ 'test-data': 'value', 'test-data2': 'value2' }}
         | 
| 30 | 
            +
                      {...props}
         | 
| 31 | 
            +
                  >
         | 
| 32 | 
            +
                    <EditorContent editor={editor}/>
         | 
| 33 | 
            +
                  </RichTextEditor>
         | 
| 34 | 
            +
                </div>
         | 
| 35 | 
            +
              )
         | 
| 36 | 
            +
            }
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            export default RichTextEditorAdvancedAttributes
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            Aria labels and data attributes can also be added to the top level div for the RichTextEditor.
         | 
| @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            import React from 'react'
         | 
| 2 | 
            +
            import RichTextEditor from '../../pb_rich_text_editor/_rich_text_editor'
         | 
| 3 | 
            +
            import { useEditor, EditorContent } from "@tiptap/react"
         | 
| 4 | 
            +
            import StarterKit from "@tiptap/starter-kit"
         | 
| 5 | 
            +
            import Link from '@tiptap/extension-link'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
             | 
| 8 | 
            +
            const RichTextEditorAdvancedFocus = (props) => {
         | 
| 9 | 
            +
                const editor = useEditor({
         | 
| 10 | 
            +
                    extensions: [
         | 
| 11 | 
            +
                        StarterKit,
         | 
| 12 | 
            +
                        Link
         | 
| 13 | 
            +
                    ],
         | 
| 14 | 
            +
                    content:"Click inside to see the toolbar. Click outside to hide it."
         | 
| 15 | 
            +
                })
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                if (!editor) {
         | 
| 18 | 
            +
                    return null
         | 
| 19 | 
            +
                } 
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              return (
         | 
| 22 | 
            +
                <div>
         | 
| 23 | 
            +
                  <RichTextEditor
         | 
| 24 | 
            +
                      advancedEditor={editor}
         | 
| 25 | 
            +
                      focus
         | 
| 26 | 
            +
                      {...props}
         | 
| 27 | 
            +
                  >
         | 
| 28 | 
            +
                    <EditorContent editor={editor}/>
         | 
| 29 | 
            +
                  </RichTextEditor>
         | 
| 30 | 
            +
                </div>
         | 
| 31 | 
            +
              )
         | 
| 32 | 
            +
            }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            export default RichTextEditorAdvancedFocus
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            When the optional `focus` prop is set to true, the toolbar will only show once you click in to the RichTextEditor. 
         | 
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            import React from 'react'
         | 
| 2 | 
            +
            import RichTextEditor from '../../pb_rich_text_editor/_rich_text_editor'
         | 
| 3 | 
            +
            import { useEditor, EditorContent } from "@tiptap/react"
         | 
| 4 | 
            +
            import StarterKit from "@tiptap/starter-kit"
         | 
| 5 | 
            +
            import Link from '@tiptap/extension-link'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
             | 
| 8 | 
            +
            const RichTextEditorAdvancedInline = (props) => {
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                const editor = useEditor({
         | 
| 11 | 
            +
                    extensions: [
         | 
| 12 | 
            +
                        StarterKit,
         | 
| 13 | 
            +
                        Link
         | 
| 14 | 
            +
                    ],
         | 
| 15 | 
            +
                    content:"Add your text here. You can format your text, add links, quotes, and bullets."
         | 
| 16 | 
            +
                })
         | 
| 17 | 
            +
                  if (!editor) {
         | 
| 18 | 
            +
                    return null
         | 
| 19 | 
            +
                  } 
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  
         | 
| 22 | 
            +
             | 
| 23 | 
            +
             | 
| 24 | 
            +
              return (
         | 
| 25 | 
            +
                <div>
         | 
| 26 | 
            +
                  <RichTextEditor
         | 
| 27 | 
            +
                      advancedEditor={editor}
         | 
| 28 | 
            +
                      inline
         | 
| 29 | 
            +
                      {...props}
         | 
| 30 | 
            +
                  >
         | 
| 31 | 
            +
                    <EditorContent editor={editor}/>
         | 
| 32 | 
            +
                  </RichTextEditor>
         | 
| 33 | 
            +
                </div>
         | 
| 34 | 
            +
              )
         | 
| 35 | 
            +
            }
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            export default RichTextEditorAdvancedInline
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            When the optional `inline` prop is set to true, the editor borders and the toolbar will only be visible when hovered or focused on. 
         | 
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            import React from 'react'
         | 
| 2 | 
            +
            import RichTextEditor from '../../pb_rich_text_editor/_rich_text_editor'
         | 
| 3 | 
            +
            import { useEditor, EditorContent } from "@tiptap/react"
         | 
| 4 | 
            +
            import StarterKit from "@tiptap/starter-kit"
         | 
| 5 | 
            +
            import Link from '@tiptap/extension-link'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
             | 
| 8 | 
            +
            const RichTextEditorAdvancedSimple = (props) => {
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                const editor = useEditor({
         | 
| 11 | 
            +
                    extensions: [
         | 
| 12 | 
            +
                        StarterKit,
         | 
| 13 | 
            +
                        Link
         | 
| 14 | 
            +
                    ],
         | 
| 15 | 
            +
                    content:"Add your text here. Use the simple toolbar above to format your text"
         | 
| 16 | 
            +
                })
         | 
| 17 | 
            +
                  if (!editor) {
         | 
| 18 | 
            +
                    return null
         | 
| 19 | 
            +
                  } 
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  
         | 
| 22 | 
            +
             | 
| 23 | 
            +
             | 
| 24 | 
            +
              return (
         | 
| 25 | 
            +
                <div>
         | 
| 26 | 
            +
                  <RichTextEditor
         | 
| 27 | 
            +
                      advancedEditor={editor}
         | 
| 28 | 
            +
                      simple
         | 
| 29 | 
            +
                      {...props}
         | 
| 30 | 
            +
                  >
         | 
| 31 | 
            +
                    <EditorContent editor={editor}/>
         | 
| 32 | 
            +
                  </RichTextEditor>
         | 
| 33 | 
            +
                </div>
         | 
| 34 | 
            +
              )
         | 
| 35 | 
            +
            }
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            export default RichTextEditorAdvancedSimple
         |