playbook_ui 7.8.2 → 7.11.0.pre.alpha1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/playbook/application_controller.rb +5 -3
  3. data/app/helpers/playbook/application_helper.rb +13 -19
  4. data/app/helpers/playbook/pb_doc_helper.rb +41 -20
  5. data/app/helpers/playbook/pb_kit_helper.rb +1 -25
  6. data/app/helpers/playbook/pb_sample_helper.rb +24 -23
  7. data/app/pb_kits/playbook/config/_kit_example.html.erb +18 -4
  8. data/app/pb_kits/playbook/config/_kit_ui.html.erb +21 -21
  9. data/app/pb_kits/playbook/pb_currency/_currency.html.erb +1 -1
  10. data/app/pb_kits/playbook/pb_currency/_currency.jsx +16 -1
  11. data/app/pb_kits/playbook/pb_currency/_currency.scss +23 -1
  12. data/app/pb_kits/playbook/pb_currency/currency.rb +22 -0
  13. data/app/pb_kits/playbook/pb_currency/docs/{_currency_small.html.erb → _currency_alignment.html.erb} +3 -3
  14. data/app/pb_kits/playbook/pb_currency/docs/{_currency_small.jsx → _currency_alignment.jsx} +5 -5
  15. data/app/pb_kits/playbook/pb_currency/docs/_currency_no_symbol.html.erb +7 -0
  16. data/app/pb_kits/playbook/pb_currency/docs/_currency_no_symbol.jsx +17 -0
  17. data/app/pb_kits/playbook/pb_currency/docs/{_currency_large.html.erb → _currency_size.html.erb} +8 -7
  18. data/app/pb_kits/playbook/pb_currency/docs/{_currency_large.jsx → _currency_size.jsx} +9 -8
  19. data/app/pb_kits/playbook/pb_currency/docs/_currency_variants.html.erb +24 -0
  20. data/app/pb_kits/playbook/pb_currency/docs/{_currency_medium.jsx → _currency_variants.jsx} +13 -10
  21. data/app/pb_kits/playbook/pb_currency/docs/example.yml +8 -6
  22. data/app/pb_kits/playbook/pb_currency/docs/index.js +4 -3
  23. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_anti_patterns.html.erb +23 -0
  24. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.html.erb +4 -4
  25. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.jsx +2 -2
  26. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.md +3 -1
  27. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.html.erb +8 -8
  28. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_flatpickr_methods.html.erb +27 -0
  29. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_flatpickr_methods.jsx +44 -0
  30. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.html.erb +4 -4
  31. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.html.erb +2 -2
  32. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.html.erb +1 -1
  33. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.jsx +1 -1
  34. data/app/pb_kits/playbook/pb_date_picker/docs/_description.md +4 -2
  35. data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +3 -1
  36. data/app/pb_kits/playbook/pb_date_picker/docs/index.js +1 -0
  37. data/app/pb_kits/playbook/pb_filter/Filter/FilterSingle.jsx +1 -0
  38. data/app/pb_kits/playbook/pb_filter/Filter/SortMenu.jsx +2 -2
  39. data/app/pb_kits/playbook/pb_filter/_filter.scss +0 -2
  40. data/app/pb_kits/playbook/pb_filter/docs/_filter_no_background.jsx +0 -41
  41. data/app/pb_kits/playbook/pb_filter/docs/_filter_no_background.md +1 -0
  42. data/app/pb_kits/playbook/pb_filter/docs/_filter_no_sort.html.erb +35 -0
  43. data/app/pb_kits/playbook/pb_filter/docs/_filter_no_sort.jsx +47 -0
  44. data/app/pb_kits/playbook/pb_filter/docs/_filter_single.html.erb +1 -1
  45. data/app/pb_kits/playbook/pb_filter/docs/example.yml +2 -0
  46. data/app/pb_kits/playbook/pb_filter/docs/index.js +1 -0
  47. data/app/pb_kits/playbook/pb_filter/templates/_core.html.erb +7 -9
  48. data/app/pb_kits/playbook/pb_nav/_horizontal_nav.scss +22 -0
  49. data/app/pb_kits/playbook/pb_nav/_item.jsx +3 -0
  50. data/app/pb_kits/playbook/pb_nav/_subtle_mixin.scss +47 -0
  51. data/app/pb_kits/playbook/pb_nav/_vertical_nav.scss +2 -46
  52. data/app/pb_kits/playbook/pb_nav/docs/_new_tab.html.erb +6 -0
  53. data/app/pb_kits/playbook/pb_nav/docs/_new_tab.jsx +34 -0
  54. data/app/pb_kits/playbook/pb_nav/docs/_subtle_horizontal_nav.html.erb +6 -0
  55. data/app/pb_kits/playbook/pb_nav/docs/_subtle_horizontal_nav.jsx +33 -0
  56. data/app/pb_kits/playbook/pb_nav/docs/example.yml +4 -1
  57. data/app/pb_kits/playbook/pb_nav/docs/index.js +2 -0
  58. data/app/pb_kits/playbook/pb_nav/item.rb +5 -2
  59. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.scss +1 -1
  60. data/app/pb_kits/playbook/pb_rich_text_editor/_trix_styles.scss +375 -0
  61. data/app/pb_kits/playbook/pb_stat_change/_stat_change.html.erb +1 -1
  62. data/app/pb_kits/playbook/pb_stat_change/_stat_change.jsx +8 -4
  63. data/app/pb_kits/playbook/pb_stat_change/docs/_stat_change_default.html.erb +1 -1
  64. data/app/pb_kits/playbook/pb_stat_change/docs/_stat_change_unit.html.erb +17 -0
  65. data/app/pb_kits/playbook/pb_stat_change/docs/_stat_change_unit.jsx +28 -0
  66. data/app/pb_kits/playbook/pb_stat_change/docs/_stat_change_unit_two.html.erb +20 -0
  67. data/app/pb_kits/playbook/pb_stat_change/docs/_stat_change_unit_two.jsx +31 -0
  68. data/app/pb_kits/playbook/pb_stat_change/docs/_stat_change_unit_two.md +1 -0
  69. data/app/pb_kits/playbook/pb_stat_change/docs/example.yml +6 -4
  70. data/app/pb_kits/playbook/pb_stat_change/docs/index.js +2 -0
  71. data/app/pb_kits/playbook/pb_stat_change/stat_change.rb +12 -7
  72. data/app/pb_kits/playbook/pb_table/_table.scss +1 -57
  73. data/app/pb_kits/playbook/pb_table/docs/_table_alignment_shift_row.html.erb +1 -1
  74. data/app/pb_kits/playbook/pb_table/docs/_table_alignment_shift_row.jsx +1 -1
  75. data/app/pb_kits/playbook/pb_table/styles/_alignment.scss +32 -0
  76. data/app/pb_kits/playbook/pb_table/styles/_all.scss +4 -3
  77. data/app/pb_kits/playbook/pb_table/styles/_side_highlight.scss +24 -0
  78. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +0 -1
  79. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_white.html.erb +1 -1
  80. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_with_icon_circle.html.erb +10 -0
  81. data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +1 -0
  82. data/app/pb_kits/playbook/pb_typeahead/_typeahead.jsx +5 -1
  83. data/app/pb_kits/playbook/pb_typeahead/components/Option.jsx +2 -3
  84. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async.html.erb +19 -3
  85. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async.jsx +4 -2
  86. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async.md +10 -2
  87. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +5 -0
  88. data/app/pb_kits/playbook/react_rails_kits.js +1 -0
  89. data/lib/playbook.rb +7 -17
  90. data/lib/playbook/engine.rb +0 -3
  91. data/lib/playbook/markdown/template_handler.rb +45 -0
  92. data/{app/pb_kits → lib}/playbook/props.rb +0 -0
  93. data/{app/pb_kits → lib}/playbook/props/array.rb +0 -0
  94. data/{app/pb_kits → lib}/playbook/props/base.rb +19 -3
  95. data/{app/pb_kits → lib}/playbook/props/boolean.rb +0 -0
  96. data/{app/pb_kits → lib}/playbook/props/date.rb +0 -0
  97. data/{app/pb_kits → lib}/playbook/props/enum.rb +0 -0
  98. data/{app/pb_kits → lib}/playbook/props/hash.rb +0 -0
  99. data/{app/pb_kits → lib}/playbook/props/hash_array.rb +0 -0
  100. data/{app/pb_kits → lib}/playbook/props/number.rb +0 -0
  101. data/{app/pb_kits → lib}/playbook/props/number_array.rb +0 -0
  102. data/{app/pb_kits → lib}/playbook/props/numeric.rb +0 -0
  103. data/{app/pb_kits → lib}/playbook/props/percentage.rb +0 -0
  104. data/{app/pb_kits → lib}/playbook/props/proc.rb +0 -0
  105. data/{app/pb_kits → lib}/playbook/props/string.rb +0 -0
  106. data/lib/playbook/version.rb +1 -1
  107. metadata +52 -30
  108. data/app/helpers/playbook/layout_helper.rb +0 -9
  109. data/app/pb_kits/playbook/pb_currency/docs/_currency_medium.html.erb +0 -21
  110. data/app/pb_kits/playbook/pb_table/styles/_mixins.scss +0 -0
@@ -1,23 +1,23 @@
1
1
  <%= pb_rails("date_picker", props: {
2
- default_date: (Date.today).httpdate,
2
+ default_date: DateTime.current.utc.iso8601,
3
3
  format: "m-d-Y",
4
4
  picker_id: "date-picker-format1"
5
5
  }) %>
6
6
 
7
7
  <%= pb_rails("date_picker", props: {
8
- default_date: (Date.today).httpdate,
8
+ default_date: DateTime.current.utc.iso8601,
9
9
  format: "m/d/y",
10
10
  picker_id: "date-picker-format2"
11
11
  }) %>
12
12
 
13
13
  <%= pb_rails("date_picker", props: {
14
- default_date: (Date.today).httpdate,
14
+ default_date: DateTime.current.utc.iso8601,
15
15
  format: "n-j-y",
16
16
  picker_id: "date-picker-format3"
17
17
  }) %>
18
18
 
19
19
  <%= pb_rails("date_picker", props: {
20
- default_date: (Date.today).httpdate,
20
+ default_date: DateTime.current.utc.iso8601,
21
21
  format: "Y-d-m",
22
22
  picker_id: "date-picker-format4"
23
23
  }) %>
@@ -1,7 +1,7 @@
1
1
  <%= pb_rails("date_picker", props: {
2
2
  label: "Dynamic dates",
3
- max_date: (Date.today + 3).httpdate,
4
- min_date: (Date.today - 3).httpdate,
3
+ max_date: (DateTime.current + 1.day).utc.iso8601,
4
+ min_date: (DateTime.current - 1.day).utc.iso8601,
5
5
  picker_id: "date-picker-min-max1"
6
6
  }) %>
7
7
 
@@ -1,5 +1,5 @@
1
1
  <%= pb_rails("date_picker", props: {
2
- default_date: [(Date.today).httpdate, (Date.today + 7).httpdate],
2
+ default_date: [DateTime.current.utc.iso8601, (DateTime.current + 7.day).utc.iso8601],
3
3
  mode: "range",
4
4
  picker_id: "date-picker-range"
5
5
  }) %>
@@ -4,7 +4,7 @@ import { DatePicker } from '../../'
4
4
  const DatePickerRange = () => (
5
5
  <div>
6
6
  <DatePicker
7
- defaultDate={[new Date(), new Date().fp_incr(6)]}
7
+ defaultDate={[new Date(), new Date().fp_incr(7)]}
8
8
  mode="range"
9
9
  pickerId="date-picker-range"
10
10
  />
@@ -1,7 +1,9 @@
1
- Playbook's date picker is built using [flatpickr](https://flatpickr.js.org/), a vanilla js library. Common date picker use cases and features have been adapted into simple prop based configuration detailed in the docs below. You can implement additional features and functionality by accessing a flatpickr instance directly. This is done with the following code.
1
+ Playbook's date picker is built using [flatpickr](https://flatpickr.js.org/), a vanilla js library. Common date picker use cases and features have been adapted into simple prop based configuration detailed in the docs below. You can implement additional features and functionality by accessing a flatpickr instance directly (demonstrated in the 'flatpickr methods' example below). This is done with the following code.
2
2
 
3
3
  `const fpInstance = document.querySelector('#pickerId')._flatpickr`
4
4
 
5
5
  `pickerId` is a prop passed to the date picker kit. Flatpickr uses this id to target an input and attach a flatpickr instance to that input.
6
6
 
7
- To learn more [visit flatpickr's docs](https://flatpickr.js.org/instance-methods-properties-elements/) or see the hook doc section below for an applied example.
7
+ To learn more [visit flatpickr's docs](https://flatpickr.js.org/instance-methods-properties-elements/) or see the hook doc section below for an applied example.
8
+
9
+ The Date Picker works best with Javascript Date Objects or ISO Date strings. If you're programming in js use Date Objects. If you're using rails convert your date object (with timezone) to UTC and then to an ISO Date string. For example, `DateTime.now.utc.iso8601`. This ensures that the string passed to the Date Picker kit behaves as expected.
@@ -11,8 +11,10 @@ examples:
11
11
  - date_picker_disabled: Disabled Dates
12
12
  - date_picker_min_max: Min Max
13
13
  - date_picker_error: Error
14
+ - date_picker_flatpickr_methods: Flatpickr Methods
14
15
  - date_picker_hooks: Hooks
15
16
  - date_picker_year_range: Year Range
17
+ - date_picker_anti_patterns: Anti-Patterns
16
18
 
17
19
 
18
20
  react:
@@ -27,6 +29,6 @@ examples:
27
29
  - date_picker_disabled: Disabled Dates
28
30
  - date_picker_min_max: Min Max
29
31
  - date_picker_error: Error
32
+ - date_picker_flatpickr_methods: Flatpickr Methods
30
33
  - date_picker_hooks: Hooks
31
34
  - date_picker_year_range: Year Range
32
-
@@ -10,4 +10,5 @@ export { default as DatePickerDisabled } from './_date_picker_disabled.jsx'
10
10
  export { default as DatePickerMinMax } from './_date_picker_min_max.jsx'
11
11
  export { default as DatePickerError } from './_date_picker_error.jsx'
12
12
  export { default as DatePickerHooks } from './_date_picker_hooks.jsx'
13
+ export { default as DatePickerFlatpickrMethods } from './_date_picker_flatpickr_methods.jsx'
13
14
  export { default as DatePickerYearRange } from './_date_picker_year_range.jsx'
@@ -26,6 +26,7 @@ const FilterSingle = ({ onSortChange, sortOptions, sortValue, filters, results,
26
26
  >
27
27
  <Flex
28
28
  orientation="row"
29
+ paddingRight="lg"
29
30
  vertical="center"
30
31
  >
31
32
  <If condition={children}>
@@ -27,7 +27,6 @@ const renderOptions = (options: SortOptions, value: SortValue[], handleChange: (
27
27
  return (
28
28
  <ListItem key={`option-${next.name}-${next.dir}`}>
29
29
  <Button
30
- icon={directionIcon(next.dir)}
31
30
  onClick={partial(handleChange, next)}
32
31
  text={` ${label}`}
33
32
  variant="link"
@@ -56,15 +55,16 @@ const SortMenu = ({ dark, options, value, onChange }: SortMenuProps) => {
56
55
  dark={dark}
57
56
  id="sort-button"
58
57
  onClick={toggle}
58
+ paddingRight="none"
59
59
  variant="link"
60
60
  >
61
61
  {map(value, ({ dir, name }) => (
62
62
  <span key={`current-sort-${name}-${dir}`}>
63
+ {` ${options[name]}`}
63
64
  <Icon
64
65
  dark={dark}
65
66
  icon={directionIcon(dir)}
66
67
  />
67
- {` ${options[name]}`}
68
68
  </span>
69
69
  ))}
70
70
  </Button>
@@ -36,8 +36,6 @@
36
36
  }
37
37
 
38
38
  .filter-results {
39
- margin-left: $space_xs !important;
40
- margin-right: $space_xs !important;
41
39
  flex-shrink:0 !important;
42
40
  }
43
41
 
@@ -11,47 +11,6 @@ const FilterNoBackground = (props) => {
11
11
  ]
12
12
  return (
13
13
  <>
14
- <Filter
15
- {...props}
16
- background={false}
17
- filters={{
18
- 'Full Name': 'John Wick',
19
- 'City': 'Las Vegas',
20
- }}
21
- results={3}
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
14
  <Filter
56
15
  {...props}
57
16
  background={false}
@@ -0,0 +1 @@
1
+ To remove the background from a filter, add the prop `background` with a value of `false`.
@@ -0,0 +1,35 @@
1
+ <%=
2
+ pb_rails("filter", props: {
3
+ id: "2",
4
+ filters: [
5
+ { name: "name", value: "John Wick" }
6
+ ],
7
+ results: 546,
8
+ template: "single"
9
+ }) do
10
+ %>
11
+ <%
12
+ example_collection = [
13
+ OpenStruct.new(name: "Alabama", value: 1),
14
+ OpenStruct.new(name: "Alaska", value: 2),
15
+ OpenStruct.new(name: "Arizona", value: 3),
16
+ OpenStruct.new(name: "Arkansas", value: 4),
17
+ OpenStruct.new(name: "California", value: 5),
18
+ OpenStruct.new(name: "Colorado", value: 6),
19
+ OpenStruct.new(name: "Connecticut", value: 7),
20
+ OpenStruct.new(name: "Delaware", value: 8),
21
+ OpenStruct.new(name: "Florida", value: 9),
22
+ OpenStruct.new(name: "Georgia", value: 10),
23
+ ]
24
+ %>
25
+
26
+ <%= pb_rails("form", props: { form_system_options: { scope: :example, method: :get } }) do |form| %>
27
+ <%= form.text_field :example_text_field, props: { label: true } %>
28
+ <%= form.collection_select :example_collection_select, example_collection, :value, :name, props: { label: true } %>
29
+
30
+ <%= form.actions do |action| %>
31
+ <%= action.submit props: { text: "Apply", data: { disable_with: "<i class='far fa-spinner fa-spin mr-3'></i>Searching...".html_safe },}%>
32
+ <%= action.button props: { type: "reset", text: "Clear", variant: "secondary" } %>
33
+ <% end %>
34
+ <% end %>
35
+ <% end %>
@@ -0,0 +1,47 @@
1
+ import React from 'react'
2
+ import { Button, Filter, Flex, Select, TextInput } from '../../'
3
+
4
+ const FilterNoSort = (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
+ filters={{
16
+ 'Full Name': 'John Wick',
17
+ }}
18
+ results={546}
19
+ sortValue={[{ name: 'popularity', dir: 'desc' }]}
20
+ >
21
+ <TextInput
22
+ label="Full Name"
23
+ placeholder="Enter name"
24
+ />
25
+
26
+ <Select
27
+ blankSelection="Select One..."
28
+ label="Territory"
29
+ name="location"
30
+ options={options}
31
+ />
32
+ <Flex
33
+ spacing="between"
34
+ >
35
+ <Button
36
+ text="Apply"
37
+ />
38
+ <Button
39
+ text="Clear"
40
+ variant="secondary"
41
+ />
42
+ </Flex>
43
+ </Filter>
44
+ )
45
+ }
46
+
47
+ export default FilterNoSort
@@ -37,4 +37,4 @@
37
37
  <%= action.button props: { type: "reset", text: "Clear", variant: "secondary" } %>
38
38
  <% end %>
39
39
  <% end %>
40
- <% end %>
40
+ <% end %>
@@ -4,6 +4,7 @@ examples:
4
4
  - filter_default: Default
5
5
  - filter_no_background: No Background
6
6
  - filter_single: Single
7
+ - filter_no_sort: No Sort
7
8
  - filter_only: Filter Only
8
9
  - sort_only: Sort Only
9
10
 
@@ -11,5 +12,6 @@ examples:
11
12
  - filter_default: Default
12
13
  - filter_no_background: No Background
13
14
  - filter_single: Single
15
+ - filter_no_sort: No Sort
14
16
  - filter_only: Filter Only
15
17
  - sort_only: Sort Only
@@ -1,5 +1,6 @@
1
1
  export { default as FilterDefault } from './_filter_default.jsx'
2
2
  export { default as FilterSingle } from './_filter_single.jsx'
3
+ export { default as FilterNoSort } from './_filter_no_sort.jsx'
3
4
  export { default as FilterNoBackground } from './_filter_no_background.jsx'
4
5
  export { default as FilterOnly } from './_filter_only.jsx'
5
6
  export { default as SortOnly } from './_sort_only.jsx'
@@ -1,5 +1,5 @@
1
1
 
2
- <%= pb_rails("flex", props: {orientation: "row", vertical: "center"}) do %>
2
+ <%= pb_rails("flex", props: {orientation: "row", padding_right: "lg", vertical: "center"}) do %>
3
3
 
4
4
  <% if (object.template != "sort_only") %>
5
5
  <%= pb_rails("circle_icon_button", props: { variant: "secondary", icon: "filter", id:"filter#{object.id}"}) %>
@@ -11,23 +11,24 @@
11
11
  <%= pb_rails("caption", props: { text: filter[:name]}) %>
12
12
  <%= pb_rails("title", props: { size: 4, tag:"h4", text: filter[:value]}) %>
13
13
  </div>
14
- <% end %>
14
+ <% end %>
15
15
  <div class="right_gradient"></div>
16
16
  </div>
17
17
  </div>
18
18
  <% end %>
19
19
 
20
20
 
21
-
22
21
  <% if (object.template == "single" ) || (object.template == "sort_only") %>
23
- <%= pb_rails("caption", props: {text: object.result_text, size:"xs", classname:"filter-results"})%>
24
- <%= pb_rails("button", props: {variant: "link",id: "sort-button#{object.id}"}) do %>
22
+ <%= pb_rails("caption", props: {text: object.result_text, size:"xs", classname:"filter-results"})%>
23
+ <% unless object.sort_menu == [{}] %>
24
+ <%= pb_rails("button", props: {variant: "link",id: "sort-button#{object.id}",padding_right: "none"}) do %>
25
25
  <% object.sort_menu.each do |item| %>
26
26
  <% if item[:active] == true %>
27
27
  <%= item[:item] %>
28
28
  <%= pb_rails("icon", props: { icon: object.sort_icon(item[:direction]), fixed_width: true }) %>
29
29
  <% end %>
30
30
  <% end %>
31
+ <% end %>
31
32
  <% end %>
32
33
  <% end %>
33
34
 
@@ -40,7 +41,7 @@
40
41
  <%= pb_rails("title_count", props: {title: "Results:",count: object.results, align:"center"}) %>
41
42
  <%= pb_rails("flex", props: {orientation: "row", vertical: "center"}) do %>
42
43
  <%= pb_rails("caption", props: { text: "sort by:"}) %>
43
- <%= pb_rails("button", props: {variant: "link" ,classname: "p-0 ml-3",id: "sort-button#{object.id}"}) do %>
44
+ <%= pb_rails("button", props: {variant: "link", padding_right: "none", id: "sort-button#{object.id}"}) do %>
44
45
  <% object.sort_menu.each do |item| %>
45
46
  <% if item[:active] == true %>
46
47
  <%= item[:item] %>
@@ -51,6 +52,3 @@
51
52
  <% end %>
52
53
  <% end %>
53
54
  <% end %>
54
-
55
-
56
-
@@ -2,6 +2,7 @@
2
2
  @import "../tokens/colors";
3
3
  @import "../tokens/animation-curves";
4
4
  @import "../tokens/typography";
5
+ @import "./subtle_mixin";
5
6
 
6
7
  $selector: ".pb_nav_list";
7
8
 
@@ -71,6 +72,27 @@ $selector: ".pb_nav_list";
71
72
  }
72
73
  }
73
74
  }
75
+
76
+ // Subtle Variant
77
+ &[class*=_subtle] {
78
+ @include subtle;
79
+ // Horizontal Overrides
80
+ [class*=pb_nav_list_kit_item] {
81
+ margin: 0;
82
+ }
83
+ [class*=_active] {
84
+ background-color: $active_light;
85
+ &[class*=dark] {
86
+ background-color: rgba($white, $opacity_1);
87
+ }
88
+ [class*=_item_link] {
89
+ [class*=_item_text]{
90
+ color: $primary;
91
+ }
92
+ }
93
+ }
94
+ }
95
+
74
96
  &[class*=dark]{
75
97
  [class*=pb_nav_list_kit_item]{
76
98
  [class*=_link]{
@@ -18,6 +18,7 @@ type NavItemProps = {
18
18
  imageUrl: String,
19
19
  link: string,
20
20
  onClick?: EventHandler,
21
+ target?: '_blank' | '_self' | '_parent' | '_top',
21
22
  text: string,
22
23
  }
23
24
 
@@ -34,6 +35,7 @@ const NavItem = (props: NavItemProps) => {
34
35
  imageUrl,
35
36
  link,
36
37
  onClick = () => {},
38
+ target = '_self',
37
39
  text = '',
38
40
  } = props
39
41
  const Tag = link ? 'a' : 'div'
@@ -54,6 +56,7 @@ const NavItem = (props: NavItemProps) => {
54
56
  className="pb_nav_list_item_link"
55
57
  href={link}
56
58
  onClick={onClick}
59
+ target={target}
57
60
  >
58
61
  <If condition={imageUrl}>
59
62
  <div
@@ -0,0 +1,47 @@
1
+ @mixin subtle {
2
+ [class*=pb_nav_list_kit_item] {
3
+ list-style: none;
4
+ border-radius: $border_rad_heavier;
5
+ border-bottom: 0;
6
+ margin: $space_xs ($space_sm - 2px);
7
+ [class*=_link] {
8
+ text-decoration: none;
9
+ display: flex;
10
+ align-items: center;
11
+ border: none;
12
+ padding: $space_xs ($space_sm - 2px);
13
+ transition-property: color, background-color;
14
+ transition-duration: 0.15s;
15
+ transition-timing-function: $bezier;
16
+ border-radius: $border_rad_heavier;
17
+ @include pb_body($text_lt_default);
18
+ [class*=_icon_left] {
19
+ margin-right: ($space_xs + 2px);
20
+ color: $text_lt_lighter;
21
+ }
22
+ [class*=_icon_right] {
23
+ margin-left: ($space_xs + 2px);
24
+ color: $text_lt_default;
25
+ }
26
+ [class*=_text] {
27
+ flex: 1;
28
+ font-weight: $regular;
29
+ }
30
+ @media (hover:hover) {
31
+ &:hover {
32
+ background-color: rgba($primary, 0.03);
33
+ [class*=_icon] {
34
+ color: $primary;
35
+ }
36
+ [class*=_text] {
37
+ color: $primary;
38
+ }
39
+ }
40
+ }
41
+ }
42
+ &[class*=_active] [class*=_link] {
43
+ @include pb_title_4;
44
+ color: $primary;
45
+ }
46
+ }
47
+ }