playbook_ui 7.11.0.pre.alpha1 → 7.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_filter/Filter/FilterDouble.jsx +20 -3
  3. data/app/pb_kits/playbook/pb_filter/Filter/FilterSingle.jsx +51 -32
  4. data/app/pb_kits/playbook/pb_filter/Filter/FiltersPopover.jsx +3 -4
  5. data/app/pb_kits/playbook/pb_filter/Filter/index.jsx +17 -16
  6. data/app/pb_kits/playbook/pb_filter/_filter.html.erb +1 -1
  7. data/app/pb_kits/playbook/pb_filter/docs/_filter_min_width.html.erb +41 -0
  8. data/app/pb_kits/playbook/pb_filter/docs/_filter_min_width.jsx +57 -0
  9. data/app/pb_kits/playbook/pb_filter/docs/_filter_no_sort.html.erb +2 -2
  10. data/app/pb_kits/playbook/pb_filter/docs/_filter_no_sort.md +1 -0
  11. data/app/pb_kits/playbook/pb_filter/docs/_filter_only.html.erb +1 -1
  12. data/app/pb_kits/playbook/pb_filter/docs/example.yml +2 -0
  13. data/app/pb_kits/playbook/pb_filter/docs/index.js +1 -0
  14. data/app/pb_kits/playbook/pb_filter/filter.rb +1 -0
  15. data/app/pb_kits/playbook/pb_filter/templates/_core.html.erb +3 -1
  16. data/app/pb_kits/playbook/pb_filter/templates/_default.html.erb +1 -1
  17. data/app/pb_kits/playbook/pb_radio/_radio.jsx +4 -3
  18. data/app/pb_kits/playbook/pb_radio/docs/_radio_default.jsx +3 -0
  19. data/app/pb_kits/playbook/pb_radio/docs/index.js +1 -0
  20. data/app/pb_kits/playbook/pb_radio/radio.test.js +71 -0
  21. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_preview.html.erb +25 -0
  22. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_preview.jsx +45 -0
  23. data/app/pb_kits/playbook/pb_rich_text_editor/docs/example.yml +3 -1
  24. data/app/pb_kits/playbook/pb_rich_text_editor/docs/index.js +1 -0
  25. data/app/pb_kits/playbook/pb_select/_select.jsx +4 -3
  26. data/app/pb_kits/playbook/pb_select/select.test.js +51 -0
  27. data/app/pb_kits/playbook/pb_text_input/_text_input.jsx +8 -4
  28. data/app/pb_kits/playbook/pb_text_input/docs/_description.md +2 -1
  29. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_custom.jsx +7 -1
  30. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_default.jsx +78 -56
  31. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_error.jsx +19 -11
  32. data/app/pb_kits/playbook/pb_text_input/text_input.test.js +77 -0
  33. data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +5 -5
  34. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +10 -6
  35. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_default.html.erb +4 -4
  36. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_selectors.html.erb +17 -0
  37. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_selectors.md +3 -0
  38. data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +1 -0
  39. data/app/pb_kits/playbook/pb_tooltip/index.js +87 -37
  40. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +3 -1
  41. data/lib/playbook.rb +0 -1
  42. data/lib/playbook/version.rb +1 -1
  43. metadata +14 -5
  44. data/lib/playbook/markdown/template_handler.rb +0 -45
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 875a00d88f5cdc23fcad3e3c3cefff43a6ed592326b17da87f8bd3605f499d69
4
- data.tar.gz: 67302126b0b27666a56fc59ec4bcdc22fd523dbab3a8c9fb376d18f9fdcb67fd
3
+ metadata.gz: 7c5a4821bfce0e6bc6e695a4ff74d9872e3277dca2731cc3e729bb0c6d1975e0
4
+ data.tar.gz: '08f1d6bf254d950192ace6ce03f12db92a93ad9408550187a79d7dba119bd85a'
5
5
  SHA512:
6
- metadata.gz: 5e3ed66b3c3866de080032ed635e3b141486b3e7de8ee0b2f8a96dd588937e407ab6a44af189e2ad949aa5bee02c134e07791dd297e2877369a8db99c2ec5570
7
- data.tar.gz: 21aaff84c5f705ac6461287a27878dc34c7286f0290b55cb902f66d736633f73652d1a404c3bd36e427010371b7487fcd41e2e7cfd7934c52c548d003aaa6fec
6
+ metadata.gz: 16975af2a287902b301e43d4d071e5d290fa1e7650416cb01609e7b28e2b5c409c681fa449cba9be6d0471284574da665bd10e004852d5c41f5f654cc0bcb811
7
+ data.tar.gz: 42086dc050de63c48bac1d86fa4358320e6f7481162ad5791ca821bffefd8a8755032a55cf5cceb8617c78c39a11eeb717243618959bb21c47d3de858529df05
@@ -7,7 +7,11 @@ import CurrentFilters, { FilterDescription } from './CurrentFilters'
7
7
  import FilterBackground, { FilterBackgroundProps } from './FilterBackground'
8
8
  import FiltersPopover from './FiltersPopover'
9
9
  import ResultsCount from './ResultsCount'
10
- import SortMenu, { SortingChangeCallback, SortOptions, SortValue } from './SortMenu'
10
+ import SortMenu, {
11
+ SortingChangeCallback,
12
+ SortOptions,
13
+ SortValue,
14
+ } from './SortMenu'
11
15
 
12
16
  export type FilterDoubleProps = {
13
17
  children: Node,
@@ -18,7 +22,17 @@ export type FilterDoubleProps = {
18
22
  sortValue?: SortValue,
19
23
  } & FilterBackgroundProps
20
24
 
21
- const FilterDouble = ({ onSortChange, sortOptions, sortValue, filters, results, children, dark, ...bgProps }: FilterDoubleProps) => (
25
+ const FilterDouble = ({
26
+ onSortChange,
27
+ sortOptions,
28
+ sortValue,
29
+ filters,
30
+ results,
31
+ children,
32
+ dark,
33
+ minWidth,
34
+ ...bgProps
35
+ }: FilterDoubleProps) => (
22
36
  <FilterBackground
23
37
  dark={dark}
24
38
  {...bgProps}
@@ -27,7 +41,10 @@ const FilterDouble = ({ onSortChange, sortOptions, sortValue, filters, results,
27
41
  orientation="row"
28
42
  vertical="center"
29
43
  >
30
- <FiltersPopover dark={dark}>
44
+ <FiltersPopover
45
+ dark={dark}
46
+ minWidth={minWidth}
47
+ >
31
48
  {children}
32
49
  </FiltersPopover>
33
50
  <CurrentFilters
@@ -8,7 +8,11 @@ import CurrentFilters, { FilterDescription } from './CurrentFilters'
8
8
  import FilterBackground, { FilterBackgroundProps } from './FilterBackground'
9
9
  import FiltersPopover from './FiltersPopover'
10
10
  import ResultsCount from './ResultsCount'
11
- import SortMenu, { SortingChangeCallback, SortOptions, SortValue } from './SortMenu'
11
+ import SortMenu, {
12
+ SortingChangeCallback,
13
+ SortOptions,
14
+ SortValue,
15
+ } from './SortMenu'
12
16
 
13
17
  export type FilterSingleProps = {
14
18
  children?: Node,
@@ -19,39 +23,54 @@ export type FilterSingleProps = {
19
23
  sortValue?: SortValue,
20
24
  } & FilterBackgroundProps
21
25
 
22
- const FilterSingle = ({ onSortChange, sortOptions, sortValue, filters, results, children, dark, ...bgProps }: FilterSingleProps) => (
23
- <FilterBackground
24
- dark={dark}
25
- {...bgProps}
26
- >
27
- <Flex
28
- orientation="row"
29
- paddingRight="lg"
30
- vertical="center"
26
+ const FilterSingle = ({
27
+ onSortChange,
28
+ sortOptions,
29
+ sortValue,
30
+ filters,
31
+ results,
32
+ children,
33
+ dark,
34
+ minWidth,
35
+ ...bgProps
36
+ }: FilterSingleProps) => {
37
+ return (
38
+ <FilterBackground
39
+ dark={dark}
40
+ {...bgProps}
31
41
  >
32
- <If condition={children}>
33
- <FiltersPopover dark={dark}>
34
- {children}
35
- </FiltersPopover>
36
- <CurrentFilters
42
+ <Flex
43
+ orientation="row"
44
+ paddingRight="lg"
45
+ vertical="center"
46
+ >
47
+ <If condition={children}>
48
+ <FiltersPopover
49
+ dark={dark}
50
+ minWidth={minWidth}
51
+ >
52
+ {children}
53
+ </FiltersPopover>
54
+ <CurrentFilters
55
+ dark={dark}
56
+ filters={filters}
57
+ />
58
+ </If>
59
+ <ResultsCount
37
60
  dark={dark}
38
- filters={filters}
61
+ results={results}
39
62
  />
40
- </If>
41
- <ResultsCount
42
- dark={dark}
43
- results={results}
44
- />
45
- <If condition={!isEmpty(sortOptions)}>
46
- <SortMenu
47
- dark={dark}
48
- onChange={onSortChange}
49
- options={sortOptions}
50
- value={sortValue}
51
- />
52
- </If>
53
- </Flex>
54
- </FilterBackground>
55
- )
63
+ <If condition={!isEmpty(sortOptions)}>
64
+ <SortMenu
65
+ dark={dark}
66
+ onChange={onSortChange}
67
+ options={sortOptions}
68
+ value={sortValue}
69
+ />
70
+ </If>
71
+ </Flex>
72
+ </FilterBackground>
73
+ )
74
+ }
56
75
 
57
76
  export default FilterSingle
@@ -4,7 +4,7 @@ import React, { Node, useState } from 'react'
4
4
  import { CircleIconButton, PbReactPopover } from '../../'
5
5
 
6
6
  const FiltersPopoverProps = { children: Node }
7
- const FiltersPopover = ({ children, dark }: FiltersPopoverProps) => {
7
+ const FiltersPopover = ({ children, dark, minWidth }: FiltersPopoverProps) => {
8
8
  const [hide, updateHide] = useState(true)
9
9
  const toggle = () => updateHide(!hide)
10
10
 
@@ -22,14 +22,13 @@ const FiltersPopover = ({ children, dark }: FiltersPopoverProps) => {
22
22
  return (
23
23
  <PbReactPopover
24
24
  closeOnClick="outside"
25
+ minWidth={minWidth}
25
26
  placement="bottom"
26
27
  reference={filterButton}
27
28
  shouldClosePopover={updateHide}
28
29
  show={!hide}
29
30
  >
30
- <div className="pb-form">
31
- {children}
32
- </div>
31
+ <div className="pb-form">{children}</div>
33
32
  </PbReactPopover>
34
33
  )
35
34
  }
@@ -4,22 +4,23 @@ import React from 'react'
4
4
  import FilterSingle, { FilterSingleProps } from './FilterSingle'
5
5
  import FilterDouble, { FilterDoubleProps } from './FilterDouble'
6
6
 
7
- type FilterProps = FilterSingleProps | FilterDoubleProps & {
8
- double?: boolean,
9
- }
7
+ type FilterProps =
8
+ | FilterSingleProps
9
+ | (FilterDoubleProps & {
10
+ double?: boolean,
11
+ })
10
12
 
11
- const Filter = ({
12
- double = false,
13
- ...templateProps
14
- }: FilterProps) => (
15
- <Choose>
16
- <When condition={double}>
17
- <FilterDouble {...templateProps} />
18
- </When>
19
- <Otherwise>
20
- <FilterSingle {...templateProps} />
21
- </Otherwise>
22
- </Choose>
23
- )
13
+ const Filter = ({ double = false, ...templateProps }: FilterProps) => {
14
+ return (
15
+ <Choose>
16
+ <When condition={double}>
17
+ <FilterDouble {...templateProps} />
18
+ </When>
19
+ <Otherwise>
20
+ <FilterSingle {...templateProps} />
21
+ </Otherwise>
22
+ </Choose>
23
+ )
24
+ }
24
25
 
25
26
  export default Filter
@@ -2,5 +2,5 @@
2
2
  id: object.id,
3
3
  data: object.data,
4
4
  class: object.classname) do %>
5
- <%= render partial: "pb_filter/templates/default", locals: {object: object}%>
5
+ <%= render partial: "pb_filter/templates/default", locals: {object: object, min_width: object.min_width}%>
6
6
  <% end %>
@@ -0,0 +1,41 @@
1
+ <%=
2
+ pb_rails("filter", props: {
3
+ min_width: "600px",
4
+ id: "25",
5
+ filters: [
6
+ { name: "name", value: "John Wick" },
7
+ { name: "city", value: "San Francisco"}
8
+ ],
9
+ sort_menu: [
10
+ { item: "Popularity", link: "?q[sorts]=managers_popularity+asc", active: true, direction: "desc" },
11
+ { item: "Mananger's Title", link: "?q[sorts]=managers_title+asc", active: false },
12
+ { item: "Manager's Name", link: "?q[sorts]=managers_name+asc", active: false },
13
+ ],
14
+ template: "default",
15
+ results: 1,
16
+ }) do
17
+ %>
18
+ <%
19
+ example_collection = [
20
+ OpenStruct.new(name: "Alabama", value: 1),
21
+ OpenStruct.new(name: "Alaska", value: 2),
22
+ OpenStruct.new(name: "Arizona", value: 3),
23
+ OpenStruct.new(name: "Arkansas", value: 4),
24
+ OpenStruct.new(name: "California", value: 5),
25
+ OpenStruct.new(name: "Colorado", value: 6),
26
+ OpenStruct.new(name: "Connecticut", value: 7),
27
+ OpenStruct.new(name: "Delaware", value: 8),
28
+ OpenStruct.new(name: "Florida", value: 9),
29
+ OpenStruct.new(name: "Georgia", value: 10),
30
+ ]
31
+ %>
32
+ <%= pb_rails("form", props: { form_system_options: { scope: :example, method: :get } }) do |form| %>
33
+ <%= form.text_field :example_text_field, props: { label: true } %>
34
+ <%= form.collection_select :example_collection_select, example_collection, :value, :name, props: { label: true } %>
35
+
36
+ <%= form.actions do |action| %>
37
+ <%= action.submit props: { text: "Apply", data: { disable_with: "<i class='far fa-spinner fa-spin mr-3'></i>Searching...".html_safe },}%>
38
+ <%= action.button props: { type: "reset", text: "Clear", variant: "secondary" } %>
39
+ <% end %>
40
+ <% end %>
41
+ <% end %>
@@ -0,0 +1,57 @@
1
+ import React from 'react'
2
+ import { Button, Filter, Flex, Select, TextInput } from '../../'
3
+
4
+ const FilterMinWidth = (props) => {
5
+ const options = [
6
+ { value: 'USA' },
7
+ { value: 'Canada' },
8
+ { value: 'Brazil' },
9
+ { value: 'Philippines' },
10
+ { value: 'A Galaxy Far Far Away Like Really Far Away' },
11
+ ]
12
+ return (
13
+ <Filter
14
+ {...props}
15
+ double
16
+ filters={{
17
+ 'Full Name': 'John Wick',
18
+ 'City': 'San Francisco',
19
+ }}
20
+ minWidth="600px"
21
+ results={1}
22
+ sortOptions={{
23
+ popularity: 'Popularity',
24
+ // eslint-disable-next-line
25
+ manager_title: 'Manager\'s Title',
26
+ // eslint-disable-next-line
27
+ manager_name: 'Manager\'s Name',
28
+ }}
29
+ sortValue={[{ name: 'popularity', dir: 'desc' }]}
30
+ >
31
+ <TextInput
32
+ label="Full Name"
33
+ placeholder="Enter name"
34
+ />
35
+
36
+ <Select
37
+ blankSelection="Select One..."
38
+ label="Territory"
39
+ name="location"
40
+ options={options}
41
+ />
42
+ <Flex
43
+ spacing="between"
44
+ >
45
+ <Button
46
+ text="Apply"
47
+ />
48
+ <Button
49
+ text="Clear"
50
+ variant="secondary"
51
+ />
52
+ </Flex>
53
+ </Filter>
54
+ )
55
+ }
56
+
57
+ export default FilterMinWidth
@@ -1,11 +1,11 @@
1
1
  <%=
2
2
  pb_rails("filter", props: {
3
- id: "2",
3
+ id: "nosort",
4
4
  filters: [
5
5
  { name: "name", value: "John Wick" }
6
6
  ],
7
7
  results: 546,
8
- template: "single"
8
+ template: "filter_only",
9
9
  }) do
10
10
  %>
11
11
  <%
@@ -0,0 +1 @@
1
+ To display results, use templates `single` or `default`.
@@ -4,7 +4,7 @@
4
4
  filters: [
5
5
  { name: "name", value: "John Wick" }
6
6
  ],
7
- template:"filter_only"
7
+ template:"filter_only",
8
8
  }) do
9
9
  %>
10
10
  <%
@@ -7,6 +7,7 @@ examples:
7
7
  - filter_no_sort: No Sort
8
8
  - filter_only: Filter Only
9
9
  - sort_only: Sort Only
10
+ - filter_min_width: Min Width for Popover Inside of Filter
10
11
 
11
12
  react:
12
13
  - filter_default: Default
@@ -15,3 +16,4 @@ examples:
15
16
  - filter_no_sort: No Sort
16
17
  - filter_only: Filter Only
17
18
  - sort_only: Sort Only
19
+ - filter_min_width: Min Width for Popover Inside of Filter
@@ -4,3 +4,4 @@ export { default as FilterNoSort } from './_filter_no_sort.jsx'
4
4
  export { default as FilterNoBackground } from './_filter_no_background.jsx'
5
5
  export { default as FilterOnly } from './_filter_only.jsx'
6
6
  export { default as SortOnly } from './_sort_only.jsx'
7
+ export { default as FilterMinWidth } from './_filter_min_width.jsx'
@@ -14,6 +14,7 @@ module Playbook
14
14
  values: %w[default single filter_only sort_only],
15
15
  default: "default"
16
16
  prop :background, type: Playbook::Props::Boolean, default: true
17
+ prop :min_width, default: "auto"
17
18
 
18
19
  def classname
19
20
  generate_classname("pb_filter_kit")
@@ -15,11 +15,13 @@
15
15
  <div class="right_gradient"></div>
16
16
  </div>
17
17
  </div>
18
+ <% if (object.template != "default") %>
19
+ <%= pb_rails("caption", props: {text: object.result_text, size:"xs", classname:"filter-results"})%>
20
+ <% end %>
18
21
  <% end %>
19
22
 
20
23
 
21
24
  <% if (object.template == "single" ) || (object.template == "sort_only") %>
22
- <%= pb_rails("caption", props: {text: object.result_text, size:"xs", classname:"filter-results"})%>
23
25
  <% unless object.sort_menu == [{}] %>
24
26
  <%= pb_rails("button", props: {variant: "link",id: "sort-button#{object.id}",padding_right: "none"}) do %>
25
27
  <% object.sort_menu.each do |item| %>
@@ -7,7 +7,7 @@
7
7
  <% end %>
8
8
 
9
9
  <% if object.template != "sort_only"%>
10
- <%= pb_rails("popover", props: {close_on_click: "outside", trigger_element_id: "filter#{object.id}", tooltip_id: "filter-form#{object.id}", position: 'bottom'}) do %>
10
+ <%= pb_rails("popover", props: {min_width: object.min_width, close_on_click: "outside", trigger_element_id: "filter#{object.id}", tooltip_id: "filter-form#{object.id}", position: 'bottom'}) do %>
11
11
  <%= capture(&object.children) %>
12
12
  <% end %>
13
13
  <%end%>
@@ -1,7 +1,7 @@
1
1
  /* @flow */
2
2
  /*eslint-disable react/no-multi-comp, flowtype/space-before-type-colon */
3
3
 
4
- import React from 'react'
4
+ import React, { forwardRef } from 'react'
5
5
  import Body from '../pb_body/_body.jsx'
6
6
  import classnames from 'classnames'
7
7
  import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
@@ -37,7 +37,7 @@ const Radio = ({
37
37
  value = 'radio_text',
38
38
  onChange = () => {},
39
39
  ...props
40
- }: RadioProps) => {
40
+ }: RadioProps, ref) => {
41
41
  const ariaProps = buildAriaProps(aria)
42
42
  const dataProps = buildDataProps(data)
43
43
  const classes = classnames(buildCss('pb_radio_kit'), { error }, { dark }, globalProps(props), className)
@@ -57,6 +57,7 @@ const Radio = ({
57
57
  id={id}
58
58
  name={name}
59
59
  onChange={onChange}
60
+ ref={ref}
60
61
  text={text}
61
62
  type="radio"
62
63
  value={value}
@@ -72,4 +73,4 @@ const Radio = ({
72
73
  )
73
74
  }
74
75
 
75
- export default Radio
76
+ export default forwardRef(Radio)
@@ -2,12 +2,15 @@ import React from 'react'
2
2
  import { Radio } from '../../'
3
3
 
4
4
  const RadioDefault = () => {
5
+ const ref = React.createRef()
6
+
5
7
  return (
6
8
  <div>
7
9
  <Radio
8
10
  defaultChecked
9
11
  label="Power"
10
12
  name="Group2"
13
+ ref={ref}
11
14
  value="Power"
12
15
  />
13
16
  <br />