playbook_ui 4.3.1 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/playbook/pb_doc_helper.rb +23 -0
  3. data/app/pb_kits/playbook/_playbook.scss +1 -0
  4. data/app/pb_kits/playbook/config/_kit_ui.html.erb +40 -0
  5. data/app/pb_kits/playbook/data/menu.yml +2 -1
  6. data/app/pb_kits/playbook/index.js +2 -0
  7. data/app/pb_kits/playbook/packs/examples.js +5 -0
  8. data/app/pb_kits/playbook/packs/kits/pb_date_range_stacked.js +1 -0
  9. data/app/pb_kits/playbook/packs/site_styles/docs/_kit_doc.scss +4 -1
  10. data/app/pb_kits/playbook/packs/site_styles/docs/_markdown.scss +3 -3
  11. data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.html.erb +24 -0
  12. data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.jsx +68 -0
  13. data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.scss +7 -0
  14. data/app/pb_kits/playbook/pb_date_range_stacked/date_range_stacked.rb +19 -0
  15. data/app/pb_kits/playbook/pb_date_range_stacked/docs/_date_range_stacked_dark.html.erb +1 -0
  16. data/app/pb_kits/playbook/pb_date_range_stacked/docs/_date_range_stacked_dark.jsx +14 -0
  17. data/app/pb_kits/playbook/pb_date_range_stacked/docs/_date_range_stacked_default.html.erb +1 -0
  18. data/app/pb_kits/playbook/pb_date_range_stacked/docs/_date_range_stacked_default.jsx +13 -0
  19. data/app/pb_kits/playbook/pb_date_range_stacked/docs/example.yml +11 -0
  20. data/app/pb_kits/playbook/pb_date_range_stacked/docs/index.js +2 -0
  21. data/app/pb_kits/playbook/pb_popover/_popover.html.erb +0 -17
  22. data/app/pb_kits/playbook/pb_popover/docs/_popover_with_button.jsx +1 -0
  23. data/app/pb_kits/playbook/pb_popover/index.js +50 -0
  24. data/app/pb_kits/playbook/pb_popover/popover.rb +10 -4
  25. data/app/pb_kits/playbook/pb_section_separator/docs/_description.md +3 -0
  26. data/app/pb_kits/playbook/pb_section_separator/docs/_footer.md +2 -0
  27. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.md +1 -0
  28. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text_background.md +1 -0
  29. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_context.html.erb +51 -0
  30. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +1 -0
  31. data/app/pb_kits/playbook/pb_typeahead/index.js +35 -8
  32. data/app/pb_kits/playbook/vendor.js +0 -4
  33. data/app/views/playbook/pages/kit_show.html.slim +9 -0
  34. data/lib/playbook/version.rb +1 -1
  35. metadata +20 -4
  36. data/app/pb_kits/playbook/config/_kit_ui.html.slim +0 -34
  37. data/app/pb_kits/playbook/pb_popover/_popover.js +0 -46
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2511d44a10345d1827a31ca450fbc31170726b201a87de90ec7ecf005826cbb7
4
- data.tar.gz: d14f6540f660c158d3722f38614e1efc9489906034323584a34801c7a359c7db
3
+ metadata.gz: e9e67b7c641a97dec35678810ee27d5b1d81d107387628f195e22c0cd1c8b85a
4
+ data.tar.gz: bf29ef64507bbf6c46cf63589ef0756a9c136041f62dbe981f8d7265365d415f
5
5
  SHA512:
6
- metadata.gz: 31b86ad405494ebbe3a19923a41b48af7227617416f41690602761b7a762096c77853f4ef9ebce3e2c72b9f40e802c1b90529025cb23632d27bc83176cad2e8d
7
- data.tar.gz: d1e5c82bc28edcfcf1b6b738260f62e3a07480f76eab3229047188bcfaff67c5544da8ae5309dc4e084aa3fc14d7024a5b8631c8b1506ceb36502624025eec90
6
+ metadata.gz: c0e229990f55c9d8f9d2d63f2a35033585cdcba14e6cdb547a55319565fe6b9f492ac0bbd8cd48c8b7e2400247ee77f6cc2036737c6950e4f539094bb5b802ae
7
+ data.tar.gz: 7909e078c4de087285d5c36165b467812814952c1cc1aa5b336da1926f79cd2b898f71bdeb27cbe9e31894db4fadc5531bf999f0f835ece642611560df03214d
@@ -15,6 +15,29 @@ module Playbook
15
15
  end
16
16
  end
17
17
 
18
+ def read_file(filename)
19
+ if File.file?(filename)
20
+ File.read(filename)
21
+ else
22
+ ""
23
+ end
24
+ end
25
+
26
+ def get_kit_description(kit)
27
+ filename = "#{Playbook::Engine.root}/app/pb_kits/playbook/pb_#{@kit}/docs/_description.md"
28
+ read_file(filename)
29
+ end
30
+
31
+ def get_per_sample_descriptions(kit, key)
32
+ filename = "#{Playbook::Engine.root}/app/pb_kits/playbook/pb_#{kit}/docs/_#{key}.md"
33
+ read_file(filename)
34
+ end
35
+
36
+ def get_kit_footer(kit)
37
+ filename = "#{Playbook::Engine.root}/app/pb_kits/playbook/pb_#{kit}/docs/_footer.md"
38
+ read_file(filename)
39
+ end
40
+
18
41
  def pb_kit(kit: "", type: "rails", show_code: true)
19
42
  @type = type
20
43
  @kit_examples = get_kit_examples(kit, type)
@@ -13,6 +13,7 @@
13
13
  @import 'pb_dashboard_value/dashboard_value';
14
14
  @import 'pb_date/date';
15
15
  @import 'pb_date_range_inline/date_range_inline';
16
+ @import 'pb_date_range_stacked/date_range_stacked';
16
17
  @import 'pb_date_stacked/date_stacked';
17
18
  @import 'pb_date_year_stacked/date_year_stacked';
18
19
  @import 'pb_distribution_bar/distribution_bar';
@@ -0,0 +1,40 @@
1
+
2
+ <% type ||= "rails" %>
3
+
4
+ <% if type == "react" %>
5
+ <% contents = File.read("#{Playbook::Engine.root}/app/pb_kits/playbook/pb_#{@kit_examples[:kit]}/docs/_#{key}.jsx") %>
6
+ <% else %>
7
+ <% contents = File.read("#{Playbook::Engine.root}/app/pb_kits/playbook/pb_#{@kit_examples[:kit]}/docs/_#{key}.html.erb") %>
8
+ <% end %>
9
+
10
+ <div class="pb--kit-example">
11
+ <%= pb_rails("caption", props: { text: item }) %>
12
+ <br>
13
+ <% if type == "rails" %>
14
+ <%= render partial: "pb_#{@kit_examples[:kit]}/docs/#{key}" %>
15
+ <% elsif type == "react" %>
16
+ <%= pb_react(key.camelize) %>
17
+ <% end %>
18
+ <br>
19
+ </div>
20
+
21
+ <% if @show_code%>
22
+ <div class="markdown pb--kit-example-markdown">
23
+ <%= markdown(get_per_sample_descriptions(@kit_examples[:kit], key)) %>
24
+ </div>
25
+ <div class="pb--codeControls">
26
+ <ul>
27
+ <li>
28
+ <a href="#" data-toggle="code_example">Code Example</a>
29
+ </li>
30
+ </ul>
31
+ </div>
32
+ <div class="pb--codeCopy" data-action="toggle" data-togglable="code_example">
33
+ <a href="#" data-toggle="false" class="pb--close-toggle">Close</a>
34
+ <% if type == "rails" %>
35
+ <pre class="highlight"><%= raw rouge(contents, "erb") %></pre>
36
+ <% elsif type == "react" %>
37
+ <pre class="highlight"><%= raw rouge(contents, "react")%></pre>
38
+ <% end %>
39
+ </div>
40
+ <% end %>
@@ -44,7 +44,7 @@ kits:
44
44
  - section_separator
45
45
  - source
46
46
  - star_rating
47
- - stat_changea
47
+ - stat_change
48
48
  - table
49
49
  - typography:
50
50
  - body
@@ -56,6 +56,7 @@ kits:
56
56
  - dashboard_value
57
57
  - date
58
58
  - date_range_inline
59
+ - date_range_stacked
59
60
  - date_stacked
60
61
  - date_year_stacked
61
62
  - home_address_street
@@ -13,6 +13,7 @@ export Currency from './pb_currency/_currency.jsx'
13
13
  export DashboardValue from './pb_dashboard_value/_dashboard_value.jsx'
14
14
  export Date from './pb_date/_date.jsx'
15
15
  export DateRangeInline from './pb_date_range_inline/_date_range_inline.jsx'
16
+ export DateRangeStacked from './pb_date_range_stacked/_date_range_stacked.jsx'
16
17
  export DateStacked from './pb_date_stacked/_date_stacked.jsx'
17
18
  export DateYearStacked from './pb_date_year_stacked/_date_year_stacked.jsx'
18
19
  export DistributionBar from './pb_distribution_bar/_distribution_bar.jsx'
@@ -73,3 +74,4 @@ export dashboardValueSettings from './pb_dashboard_value/dashboardValueSettings'
73
74
  // Other JS/Plugins
74
75
  export pbChart from './plugins/pb_chart.js'
75
76
  export PbTypeahead from './pb_typeahead'
77
+ export PbPopover from './pb_popover'
@@ -27,6 +27,7 @@ import * as Currency from 'pb_currency/docs'
27
27
  import * as DashboardValue from 'pb_dashboard_value/docs'
28
28
  import * as Date from 'pb_date/docs'
29
29
  import * as DateRangeInline from 'pb_date_range_inline/docs'
30
+ import * as DateRangeStacked from 'pb_date_range_stacked/docs'
30
31
  import * as DateStacked from 'pb_date_stacked/docs'
31
32
  import * as DateYearStacked from 'pb_date_year_stacked/docs'
32
33
  import * as DistributionBar from 'pb_distribution_bar/docs'
@@ -80,6 +81,9 @@ import * as UserBadge from 'pb_user_badge/docs'
80
81
  import PbTypeahead from 'pb_typeahead'
81
82
  PbTypeahead.start()
82
83
 
84
+ import PbPopover from 'pb_popover'
85
+ PbPopover.start()
86
+
83
87
  WebpackerReact.setup({
84
88
  ...Avatar,
85
89
  ...Badge,
@@ -95,6 +99,7 @@ WebpackerReact.setup({
95
99
  ...DashboardValue,
96
100
  ...Date,
97
101
  ...DateRangeInline,
102
+ ...DateRangeStacked,
98
103
  ...DateStacked,
99
104
  ...DateYearStacked,
100
105
  ...DistributionBar,
@@ -0,0 +1 @@
1
+ import '../../pb_date_range_stacked/_date_range_stacked.jsx'
@@ -36,9 +36,12 @@
36
36
  font-weight: 600;
37
37
  z-index: 100;
38
38
  }
39
+
40
+ .pb--kit-example, .pb--kit-example-markdown {
41
+ padding: calc(2rem + 4px) 2rem 1rem;
42
+ }
39
43
 
40
44
  .pb--kit-example {
41
- padding: calc(2rem + 4px) 2rem 1rem;
42
45
  position: relative;
43
46
 
44
47
  &::after {
@@ -36,12 +36,12 @@
36
36
  code {
37
37
  background: #122b3b;
38
38
  color: #faf6e4;
39
- padding: 0.5rem 1.5rem;
40
- margin: 1rem 0;
39
+ padding: 0.1rem 0.3rem;
40
+ margin: 1rem 5px;
41
41
  box-shadow: 0 2px 10px $shadow;
42
42
  border-radius: 0.25rem;
43
43
  overflow: hidden;
44
- font-size: 1rem;
44
+ font-size: 14px;
45
45
  }
46
46
 
47
47
  body {
@@ -0,0 +1,24 @@
1
+ <%= content_tag(:div,
2
+ id: object.id,
3
+ data: object.data,
4
+ class: object.classname) do %>
5
+
6
+ <%= pb_rails("flex", props: {vertical: "center"}) do %>
7
+ <%= pb_rails("flex/flex_item") do %>
8
+ <%= pb_rails("date_year_stacked", props: { align: 'right',
9
+ date: object.start_date,
10
+ dark: object.dark }) %>
11
+ <% end %>
12
+ <%= pb_rails("flex/flex_item") do %>
13
+ <div>
14
+ <%= pb_rails("body", props: { tag: "span", color: "light" }) do %>
15
+ <%= pb_rails("icon", props: { icon: "long-arrow-right", fixed_width: true, classname: "pb_date_range_stacked_arrow" }) %>
16
+ <% end %>
17
+ </div>
18
+ <% end %>
19
+ <%= pb_rails("flex/flex_item") do %>
20
+ <%= pb_rails("date_year_stacked", props: { date: object.end_date,
21
+ dark: object.dark }) %>
22
+ <% end %>
23
+ <% end %>
24
+ <% end %>
@@ -0,0 +1,68 @@
1
+ /* @flow */
2
+
3
+ import React from 'react'
4
+ import classnames from 'classnames'
5
+
6
+ import { buildCss } from '../utilities/props'
7
+
8
+ import {
9
+ Body,
10
+ DateYearStacked,
11
+ Flex,
12
+ FlexItem,
13
+ Icon,
14
+ } from '../'
15
+
16
+ type DateRangeStackedProps = {
17
+ className?: String | Array<String>,
18
+ data?: String,
19
+ dark?: Boolean,
20
+ endDate: String,
21
+ id?: String,
22
+ startDate: String
23
+ }
24
+
25
+ const DateRangeStacked = ({
26
+ className,
27
+ dark = false,
28
+ endDate,
29
+ startDate,
30
+ }: DateRangeStackedProps) => {
31
+ const css = classnames(className, buildCss('pb_date_range_stacked'))
32
+
33
+ return (
34
+ <div className={css}>
35
+ <Flex vertical="center">
36
+ <FlexItem>
37
+ <DateYearStacked
38
+ align="right"
39
+ dark={dark}
40
+ date={startDate}
41
+ />
42
+ </FlexItem>
43
+ <FlexItem>
44
+ <div>
45
+ <Body
46
+ color="light"
47
+ tag="span"
48
+ >
49
+ <Icon
50
+ className="pb_date_range_stacked_arrow"
51
+ fixedWidth
52
+ icon="long-arrow-right"
53
+ />
54
+ </Body>
55
+ </div>
56
+ </FlexItem>
57
+ <FlexItem>
58
+ <DateYearStacked
59
+ dark={dark}
60
+ date={endDate}
61
+ />
62
+ </FlexItem>
63
+ </Flex>
64
+ </div>
65
+ )
66
+ }
67
+
68
+ export default DateRangeStacked
@@ -0,0 +1,7 @@
1
+ @import "../tokens/spacing";
2
+
3
+ [class^=pb_date_range_stacked] {
4
+ .pb_date_range_stacked_arrow {
5
+ margin: 0 ($space_sm - 3) 0;
6
+ }
7
+ }
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbDateRangeStacked
5
+ class DateRangeStacked
6
+ include Playbook::Props
7
+
8
+ partial "pb_date_range_stacked/date_range_stacked"
9
+
10
+ prop :dark, type: Playbook::Props::Boolean, default: false
11
+ prop :end_date, type: Playbook::Props::Date, required: true
12
+ prop :start_date, type: Playbook::Props::Date, required: true
13
+
14
+ def classname
15
+ generate_classname("pb_date_range_stacked")
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1 @@
1
+ <%= pb_rails("date_range_stacked", props: { start_date: Date.new(2019, 06, 18), end_date: Date.new(2020, 03, 20), dark: true }) %>
@@ -0,0 +1,14 @@
1
+ import React from 'react'
2
+ import { DateRangeStacked } from '../../'
3
+
4
+ const DateRangeStackedDark = () => (
5
+ <div>
6
+ <DateRangeStacked
7
+ dark
8
+ endDate={new Date('20 Mar 2020')}
9
+ startDate={new Date('18 Jun 2019')}
10
+ />
11
+ </div>
12
+ )
13
+
14
+ export default DateRangeStackedDark
@@ -0,0 +1 @@
1
+ <%= pb_rails("date_range_stacked", props: { start_date: Date.new(2019, 06, 18), end_date: Date.new(2020, 03, 20) }) %>
@@ -0,0 +1,13 @@
1
+ import React from 'react'
2
+ import { DateRangeStacked } from '../../'
3
+
4
+ const DateRangeStackedDefault = () => (
5
+ <div>
6
+ <DateRangeStacked
7
+ endDate={new Date('20 Mar 2020')}
8
+ startDate={new Date('18 Jun 2019')}
9
+ />
10
+ </div>
11
+ )
12
+
13
+ export default DateRangeStackedDefault
@@ -0,0 +1,11 @@
1
+ examples:
2
+
3
+ rails:
4
+ - date_range_stacked_default: Default
5
+ - date_range_stacked_dark: Dark
6
+
7
+
8
+ react:
9
+ - date_range_stacked_default: Default
10
+ - date_range_stacked_dark: Dark
11
+
@@ -0,0 +1,2 @@
1
+ export { default as DateRangeStackedDefault } from './_date_range_stacked_default.jsx'
2
+ export { default as DateRangeStackedDark } from './_date_range_stacked_dark.jsx'
@@ -8,20 +8,3 @@
8
8
  <% end %>
9
9
  </div>
10
10
  <% end %>
11
-
12
-
13
- <%# Javascript for the Popover Instance %>
14
- <% content_for :pb_js do %>
15
- <%= javascript_tag do %>
16
- window.addEventListener('DOMContentLoaded', function() {
17
- new PbPopover(
18
- "#<%= object.trigger_element_id %>",
19
- "#<%= object.tooltip_id %>",
20
- "<%= object.position %>",
21
- <%= object.popover_offset %>,
22
- )
23
- })
24
- <% end %>
25
- <% end %>
26
-
27
-
@@ -24,6 +24,7 @@ export default class PopoverWithButton extends React.Component {
24
24
 
25
25
  return (
26
26
  <PbReactPopover
27
+ offset
27
28
  placement="bottom"
28
29
  reference={popoverReference}
29
30
  show={this.state.showPopover}
@@ -0,0 +1,50 @@
1
+ import PbEnhancedElement from '../pb_enhanced_element'
2
+ import Popper from 'popper.js'
3
+
4
+ const POPOVER_OFFSET_Y = '0,8'
5
+
6
+ export default class PbPopover extends PbEnhancedElement {
7
+ static get selector() {
8
+ return '[data-pb-popover-kit]'
9
+ }
10
+
11
+ connect() {
12
+ this.popper = new Popper(this.triggerElement, this.tooltip, {
13
+ placement: this.position,
14
+ modifiers: {
15
+ offset: {
16
+ offset: this.offset,
17
+ },
18
+ },
19
+ })
20
+
21
+ this.triggerElement.addEventListener('click', () => {
22
+ this.tooltip.classList.toggle('show')
23
+ this.popper.scheduleUpdate()
24
+ })
25
+ }
26
+
27
+ get triggerElement() {
28
+ return this._triggerElement = (this._triggerElement || document.querySelector(`#${this.triggerElementId}`))
29
+ }
30
+
31
+ get tooltip() {
32
+ return this._tooltip = (this._tooltip || this.element.querySelector(`#${this.tooltipId}`))
33
+ }
34
+
35
+ get position() {
36
+ return this.element.dataset.pbPopoverPosition
37
+ }
38
+
39
+ get triggerElementId() {
40
+ return this.element.dataset.pbPopoverTriggerElementId
41
+ }
42
+
43
+ get tooltipId() {
44
+ return this.element.dataset.pbPopoverTooltipId
45
+ }
46
+
47
+ get offset() {
48
+ return this.element.dataset.pbPopoverOffset === 'true' ? POPOVER_OFFSET_Y : '0,0'
49
+ }
50
+ }
@@ -11,13 +11,19 @@ module Playbook
11
11
  prop :tooltip_id
12
12
  prop :offset, type: Playbook::Props::Boolean, default: false
13
13
 
14
- def popover_offset
15
- offset ? "0, 8" : "0, 0"
16
- end
17
-
18
14
  def classname
19
15
  generate_classname("pb_popover_kit")
20
16
  end
17
+
18
+ def data
19
+ Hash(values[:data]).merge(
20
+ pb_popover_kit: true,
21
+ pb_popover_position: position,
22
+ pb_popover_trigger_element_id: trigger_element_id,
23
+ pb_popover_tooltip_id: tooltip_id,
24
+ pb_popover_offset: offset,
25
+ )
26
+ end
21
27
  end
22
28
  end
23
29
  end
@@ -0,0 +1,3 @@
1
+ Section separator is a divider line that compartmentalizes content, typically used on cards or white backgrounds.
2
+
3
+
@@ -0,0 +1,2 @@
1
+ ### Things to Avoid
2
+ Do not use section separators to handle lists. Use List Kit.
@@ -0,0 +1 @@
1
+ This should only be use on white backgrounds. This adds a white background that will be very noticeable on other background colors.
@@ -0,0 +1 @@
1
+ This should only be use on light backgrounds (with our variable `$bg_light`).
@@ -0,0 +1,51 @@
1
+ <%= pb_rails("select", props: {
2
+ label: "Colors",
3
+ name: "foo",
4
+ data: { context_select: true },
5
+ options: [
6
+ { value: "red", value_text: "Red" },
7
+ { value: "orange", value_text: "Orange" },
8
+ { value: "yellow", value_text: "Yellow" },
9
+ { value: "green", value_text: "Green" },
10
+ { value: "blue", value_text: "Blue" },
11
+ { value: "purple", value_text: "Purple" },
12
+ ]
13
+ }) %>
14
+ <%= pb_rails("typeahead", props: { label: "Crayola Crayons", name: :foo, data: { typeahead_example2: true, search_context_value_selector: "[data-context-select] select" } }) %>
15
+
16
+ <br><br><br>
17
+
18
+
19
+ <%= javascript_tag defer: "defer" do %>
20
+ document.addEventListener("pb-typeahead-kit-search", function(event) {
21
+ if (!event.target.dataset.typeaheadExample2) return;
22
+
23
+ const fuzzyMatch = function(string, term) {
24
+ const ratio = 0.5;
25
+ string = string.toLowerCase();
26
+ const compare = term.toLowerCase();
27
+ let matches = 0;
28
+
29
+ if (string.indexOf(compare) > -1) return true;
30
+
31
+ for (let index = 0; index < compare.length; index++) {
32
+ if (string.indexOf(compare[index]) > -1) {
33
+ matches += 1
34
+ } else {
35
+ matches -=1;
36
+ }
37
+ }
38
+
39
+ return (matches / string.length >= ratio || term == "")
40
+ };
41
+
42
+ const colors = { red: ["Red", "Scarlet", "Chestnut", "Mahogany"],
43
+ orange: ["Orange", "Apricot", "Peach", "Melon", "Burnt Sienna", "Macaroni and Cheese"],
44
+ yellow: ["Yellow", "Gold", "Goldenrod", "Canary", "Laser Lemon"],
45
+ green: ["Green", "Olive Green", "Granny Smith Apple", "Spring Green", "Sea Green"],
46
+ blue: ["Blue", "Cerulean", "Bluetiful", "Sky Blue", "Cadet Blue", "Cornflower"],
47
+ purple: ["Violet", "Indigo", "Wisteria", "Purple Mountain Majesty", "Lavender"] };
48
+
49
+ event.detail.setResults(colors[event.detail.searchingContext].filter((color) => fuzzyMatch(color, event.detail.searchingFor)).map((color) => document.createTextNode(color)));
50
+ })
51
+ <% end %>
@@ -1,3 +1,4 @@
1
1
  examples:
2
2
  rails:
3
3
  - typeahead_default: Default
4
+ - typeahead_with_context: With Context
@@ -25,24 +25,27 @@ export default class PbTypeahead extends PbEnhancedElement {
25
25
 
26
26
  search() {
27
27
  if (this.searchTerm.length < this.searchTermMinimumLength) return this.clearResults()
28
- if (this.resultsOptionCache.has(this.searchTerm)) return this.showResults()
28
+
29
+ this.showResults()
29
30
 
30
31
  const searchTerm = this.searchTerm
32
+ const searchContext = this.searchContext
31
33
  const search = {
32
34
  searchingFor: searchTerm,
35
+ searchingContext: searchContext,
33
36
  setResults: (results) => {
34
- this.resultsCacheUpdate(searchTerm, results)
37
+ this.resultsCacheUpdate(searchTerm, searchContext, results)
35
38
  },
36
39
  }
37
-
38
40
  this.element.dispatchEvent(new CustomEvent('pb-typeahead-kit-search', { bubbles: true, detail: search }))
39
41
  }
40
42
 
41
- resultsCacheUpdate(searchTerm, results) {
42
- if (this.resultsOptionCache.has(searchTerm)) this.resultsOptionCache.delete(searchTerm)
43
+ resultsCacheUpdate(searchTerm, searchContext, results) {
44
+ const searchTermAndContext = this.cacheKeyFor(searchTerm, searchContext)
45
+ if (this.resultsOptionCache.has(searchTermAndContext)) this.resultsOptionCache.delete(searchTermAndContext)
43
46
  if (this.resultsOptionCache.size > 32) this.resultsOptionCache.delete(this.resultsOptionCache.keys[0])
44
47
 
45
- this.resultsOptionCache.set(searchTerm, results)
48
+ this.resultsOptionCache.set(searchTermAndContext, results)
46
49
  this.showResults()
47
50
  }
48
51
 
@@ -58,10 +61,10 @@ export default class PbTypeahead extends PbEnhancedElement {
58
61
  }
59
62
 
60
63
  showResults() {
61
- if (!this.resultsOptionCache.has(this.searchTerm)) return
64
+ if (!this.resultsOptionCache.has(this.searchTermAndContext)) return
62
65
 
63
66
  this.clearResults()
64
- for (const result of this.resultsOptionCache.get(this.searchTerm)) {
67
+ for (const result of this.resultsOptionCache.get(this.searchTermAndContext)) {
65
68
  this.resultsElement.appendChild(this.newResultOption(result.cloneNode(true)))
66
69
  }
67
70
  for (const result of this.resultsElement.querySelectorAll('[data-result-option-item]')) {
@@ -126,6 +129,30 @@ export default class PbTypeahead extends PbEnhancedElement {
126
129
  return this.searchInput.value
127
130
  }
128
131
 
132
+ get searchContext() {
133
+ if (this._searchContext) return this._searchContext
134
+
135
+ const selector = this.element.dataset.searchContextValueSelector
136
+ if (selector) return (
137
+ this.element.parentNode.querySelector(selector) ||
138
+ this.element.closest(selector)
139
+ ).value
140
+
141
+ return null
142
+ }
143
+
144
+ set searchContext(value) {
145
+ this._searchContext = value
146
+ }
147
+
148
+ get searchTermAndContext() {
149
+ return this.cacheKeyFor(this.searchTerm, this.searchContext)
150
+ }
151
+
152
+ cacheKeyFor(searchTerm, searchContext) {
153
+ return [searchTerm, JSON.stringify(searchContext)].join()
154
+ }
155
+
129
156
  searchInputClear() {
130
157
  this.searchInput.value = ''
131
158
  }
@@ -7,7 +7,3 @@ import './pb_form/pb_form_validation'
7
7
 
8
8
  // Lazy image loading
9
9
  import 'lazysizes'
10
-
11
- // Popovers
12
- import PbPopover from './pb_popover/_popover.js'
13
- window.PbPopover = PbPopover
@@ -1,6 +1,9 @@
1
1
  div class="pb--kit-show #{@kit}-kit"
2
2
  = pb_rails("title", props: { text: pb_kit_title(@kit), tag: "h1", size: 1 })
3
+ div class="markdown"
4
+ = markdown(get_kit_description(@kit))
3
5
 
6
+ div
4
7
  .pb--kit-type-nav
5
8
  - if has_kit_type?(@kit, "rails")
6
9
  a href="#{kit_show_rails_path(@kit)}" class="#{'active' if action_name == 'kit_show_rails'}" Rails
@@ -9,6 +12,12 @@ div class="pb--kit-show #{@kit}-kit"
9
12
 
10
13
  - if(action_name == "kit_show_rails")
11
14
  = pb_kit(kit: @kit)
15
+ .markdown
16
+ br
17
+ = markdown(get_kit_footer(@kit))
12
18
  = pb_kit_api(@kit)
13
19
  - else
14
20
  = pb_kit(kit: @kit, type: "react")
21
+ .markdown
22
+ br
23
+ = markdown(get_kit_footer(@kit))
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playbook
4
- VERSION = "4.3.1"
4
+ VERSION = "4.4.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: playbook_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.1
4
+ version: 4.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Power UX
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-02-14 00:00:00.000000000 Z
12
+ date: 2020-02-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -413,7 +413,7 @@ files:
413
413
  - app/pb_kits/playbook/_playbook.scss
414
414
  - app/pb_kits/playbook/config/_kit_example.html.erb
415
415
  - app/pb_kits/playbook/config/_kit_samples_list.html.erb
416
- - app/pb_kits/playbook/config/_kit_ui.html.slim
416
+ - app/pb_kits/playbook/config/_kit_ui.html.erb
417
417
  - app/pb_kits/playbook/config/_pb_kit_api.html.erb
418
418
  - app/pb_kits/playbook/data/menu.yml
419
419
  - app/pb_kits/playbook/index.js
@@ -435,6 +435,7 @@ files:
435
435
  - app/pb_kits/playbook/packs/kits/pb_dashboard_value.js
436
436
  - app/pb_kits/playbook/packs/kits/pb_date.js
437
437
  - app/pb_kits/playbook/packs/kits/pb_date_range_inline.js
438
+ - app/pb_kits/playbook/packs/kits/pb_date_range_stacked.js
438
439
  - app/pb_kits/playbook/packs/kits/pb_date_stacked.js
439
440
  - app/pb_kits/playbook/packs/kits/pb_date_year_stacked.js
440
441
  - app/pb_kits/playbook/packs/kits/pb_distribution_bar.js
@@ -678,6 +679,16 @@ files:
678
679
  - app/pb_kits/playbook/pb_date_range_inline/docs/_date_range_inline_default.jsx
679
680
  - app/pb_kits/playbook/pb_date_range_inline/docs/example.yml
680
681
  - app/pb_kits/playbook/pb_date_range_inline/docs/index.js
682
+ - app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.html.erb
683
+ - app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.jsx
684
+ - app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.scss
685
+ - app/pb_kits/playbook/pb_date_range_stacked/date_range_stacked.rb
686
+ - app/pb_kits/playbook/pb_date_range_stacked/docs/_date_range_stacked_dark.html.erb
687
+ - app/pb_kits/playbook/pb_date_range_stacked/docs/_date_range_stacked_dark.jsx
688
+ - app/pb_kits/playbook/pb_date_range_stacked/docs/_date_range_stacked_default.html.erb
689
+ - app/pb_kits/playbook/pb_date_range_stacked/docs/_date_range_stacked_default.jsx
690
+ - app/pb_kits/playbook/pb_date_range_stacked/docs/example.yml
691
+ - app/pb_kits/playbook/pb_date_range_stacked/docs/index.js
681
692
  - app/pb_kits/playbook/pb_date_stacked/_date_stacked.html.erb
682
693
  - app/pb_kits/playbook/pb_date_stacked/_date_stacked.jsx
683
694
  - app/pb_kits/playbook/pb_date_stacked/_date_stacked.scss
@@ -1039,7 +1050,6 @@ files:
1039
1050
  - app/pb_kits/playbook/pb_pill/docs/index.js
1040
1051
  - app/pb_kits/playbook/pb_pill/pill.rb
1041
1052
  - app/pb_kits/playbook/pb_popover/_popover.html.erb
1042
- - app/pb_kits/playbook/pb_popover/_popover.js
1043
1053
  - app/pb_kits/playbook/pb_popover/_popover.jsx
1044
1054
  - app/pb_kits/playbook/pb_popover/_popover.scss
1045
1055
  - app/pb_kits/playbook/pb_popover/docs/_popover_default.html.erb
@@ -1052,6 +1062,7 @@ files:
1052
1062
  - app/pb_kits/playbook/pb_popover/docs/_popover_with_circle.html.erb
1053
1063
  - app/pb_kits/playbook/pb_popover/docs/example.yml
1054
1064
  - app/pb_kits/playbook/pb_popover/docs/index.js
1065
+ - app/pb_kits/playbook/pb_popover/index.js
1055
1066
  - app/pb_kits/playbook/pb_popover/popover.rb
1056
1067
  - app/pb_kits/playbook/pb_progress_pills/_progress_pills.html.erb
1057
1068
  - app/pb_kits/playbook/pb_progress_pills/_progress_pills.jsx
@@ -1096,12 +1107,16 @@ files:
1096
1107
  - app/pb_kits/playbook/pb_section_separator/_section_separator.html.erb
1097
1108
  - app/pb_kits/playbook/pb_section_separator/_section_separator.jsx
1098
1109
  - app/pb_kits/playbook/pb_section_separator/_section_separator.scss
1110
+ - app/pb_kits/playbook/pb_section_separator/docs/_description.md
1111
+ - app/pb_kits/playbook/pb_section_separator/docs/_footer.md
1099
1112
  - app/pb_kits/playbook/pb_section_separator/docs/_section_separator_line.html.erb
1100
1113
  - app/pb_kits/playbook/pb_section_separator/docs/_section_separator_line.jsx
1101
1114
  - app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.html.erb
1102
1115
  - app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.jsx
1116
+ - app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.md
1103
1117
  - app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text_background.html.erb
1104
1118
  - app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text_background.jsx
1119
+ - app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text_background.md
1105
1120
  - app/pb_kits/playbook/pb_section_separator/docs/example.yml
1106
1121
  - app/pb_kits/playbook/pb_section_separator/docs/index.js
1107
1122
  - app/pb_kits/playbook/pb_section_separator/section_separator.rb
@@ -1317,6 +1332,7 @@ files:
1317
1332
  - app/pb_kits/playbook/pb_typeahead/_typeahead.html.erb
1318
1333
  - app/pb_kits/playbook/pb_typeahead/_typeahead.scss
1319
1334
  - app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default.html.erb
1335
+ - app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_context.html.erb
1320
1336
  - app/pb_kits/playbook/pb_typeahead/docs/example.yml
1321
1337
  - app/pb_kits/playbook/pb_typeahead/index.js
1322
1338
  - app/pb_kits/playbook/pb_typeahead/typeahead.rb
@@ -1,34 +0,0 @@
1
- - type ||= "rails"
2
-
3
- - if type == "react"
4
- - contents = File.read("#{Playbook::Engine.root}/app/pb_kits/playbook/pb_#{@kit_examples[:kit]}/docs/_#{key}.jsx")
5
- - else
6
- - contents = File.read("#{Playbook::Engine.root}/app/pb_kits/playbook/pb_#{@kit_examples[:kit]}/docs/_#{key}.html.erb")
7
-
8
- .pb--kit-example
9
- = pb_rails("caption", props: { text: item })
10
- br
11
- - if type == "rails"
12
- = render partial: "pb_#{@kit_examples[:kit]}/docs/#{key}"
13
- - elsif type == "react"
14
- = pb_react(key.camelize)
15
- br
16
-
17
- - if @samples
18
- = render partial: "kit_samples_list"
19
-
20
- - if defined?(rouge)
21
- - if @show_code
22
- .pb--codeControls
23
- ul
24
- li
25
- a href="#" data-toggle="code_example" Code Example
26
-
27
- .pb--codeCopy data-action="toggle" data-togglable="code_example"
28
- a.pb--close-toggle href="#" data-toggle="false" Close
29
- pre.highlight
30
- - if type == "rails"
31
- = raw rouge(contents, "erb")
32
- - elsif type == "react"
33
- = raw rouge(contents, "react")
34
-
@@ -1,46 +0,0 @@
1
- import Popper from 'popper.js'
2
-
3
- class PbPopover {
4
- constructor(
5
- triggerElement = '#triggerElement',
6
- tooltip = '#tooltip',
7
- placement = 'left',
8
- offset,
9
- ) {
10
- this.triggerElement = triggerElement
11
- this.tooltip = tooltip
12
- this.placement = placement
13
- this.offset = offset
14
- this.setupPopper()
15
- }
16
-
17
- //getters
18
- get referenceElement() {
19
- return document.querySelector(this.triggerElement)
20
- }
21
- get popoverTooltip() {
22
- return document.querySelector(this.tooltip)
23
- }
24
-
25
- attachEvents() {
26
- this.referenceElement.addEventListener('click', () => {
27
- this.popoverTooltip.classList.toggle('show')
28
- this.popper.scheduleUpdate()
29
- })
30
- }
31
-
32
- setupPopper() {
33
- this.popper = new Popper(this.referenceElement, this.popoverTooltip, {
34
- placement: this.placement,
35
- modifiers: {
36
- offset: {
37
- offset: this.offset,
38
- },
39
- },
40
- })
41
-
42
- this.attachEvents()
43
- }
44
- }
45
-
46
- export default PbPopover