playbook_ui 13.31.0.pre.alpha.play1262iconstyles3172 → 13.31.0.pre.alpha.play1416movealiaslogic3232

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_button/_button.scss +3 -3
  3. data/app/pb_kits/playbook/pb_button/_button_mixins.scss +3 -2
  4. data/app/pb_kits/playbook/pb_caption/_caption_mixin.scss +1 -1
  5. data/app/pb_kits/playbook/pb_collapsible/__snapshots__/collapsible.test.js.snap +1 -1
  6. data/app/pb_kits/playbook/pb_dashboard/commonSettings.js +1 -1
  7. data/app/pb_kits/playbook/pb_dashboard/pbChartsDarkTheme.ts +1 -1
  8. data/app/pb_kits/playbook/pb_dashboard/pbChartsLightTheme.ts +1 -1
  9. data/app/pb_kits/playbook/pb_date_year_stacked/docs/_date_year_stacked_default.jsx +4 -1
  10. data/app/pb_kits/playbook/pb_draggable/context/index.tsx +15 -1
  11. data/app/pb_kits/playbook/pb_draggable/context/types.ts +5 -0
  12. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_default.jsx +14 -19
  13. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_default.md +5 -3
  14. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_cards.md +7 -3
  15. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_list.md +3 -5
  16. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_selectable_list.md +3 -5
  17. data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +3 -1
  18. data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +2 -0
  19. data/app/pb_kits/playbook/pb_dropdown/index.js +33 -4
  20. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +9 -0
  21. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +1 -1
  22. data/app/pb_kits/playbook/pb_icon/_icon.scss +1 -211
  23. data/app/pb_kits/playbook/pb_icon/_icon.tsx +7 -99
  24. data/app/pb_kits/playbook/pb_icon/icon.rb +25 -25
  25. data/app/pb_kits/playbook/pb_nav/_nav_item.test.js +2 -2
  26. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.tsx +8 -23
  27. data/app/pb_kits/playbook/tokens/_titles.scss +4 -4
  28. data/app/pb_kits/playbook/tokens/_typography.scss +10 -10
  29. data/dist/menu.yml +566 -472
  30. data/dist/playbook-rails.js +6 -6
  31. data/dist/reset.css +1 -1
  32. data/lib/playbook/version.rb +1 -1
  33. metadata +2 -2
@@ -55,74 +55,10 @@ const aliases: AliasesJson = aliasesJson;
55
55
 
56
56
 
57
57
  const flipMap = {
58
- fa: {
59
- horizontal: 'fa-flip-horizontal',
60
- vertical: 'fa-flip-vertical',
61
- both: 'fa-flip-horizontal fa-flip-vertical',
62
- none: ''
63
- },
64
- svg: {
65
- horizontal: 'flip_horizontal',
66
- vertical: 'flip_vertical',
67
- both: 'flip_horizontal flip_vertical',
68
- none: ''
69
- }
70
- }
71
- const pulseMap = {
72
- fa: 'fa-pulse',
73
- svg: 'pulse'
74
- }
75
- const spinMap = {
76
- fa: 'fa-spin',
77
- svg: 'spin'
78
- }
79
- const rotateMap = {
80
- fa: {
81
- 90: 'fa-rotate-90',
82
- 180: 'fa-rotate-180',
83
- 270: 'fa-rotate-270'
84
- },
85
- svg: {
86
- 90: 'rotate_90',
87
- 180: 'rotate_180',
88
- 270: 'rotate_270'
89
- }
90
- }
91
-
92
- const sizeMap = {
93
- fa: {
94
- "lg": "fa-lg",
95
- "xs": "fa-xs",
96
- "sm": "fa-sm",
97
- "1x": "fa-1x",
98
- "2x": "fa-2x",
99
- "3x": "fa-3x",
100
- "4x": "fa-4x",
101
- "5x": "fa-5x",
102
- "6x": "fa-6x",
103
- "7x": "fa-7x",
104
- "8x": "fa-8x",
105
- "9x": "fa-9x",
106
- "10x": "fa-10x",
107
- "": ""
108
- },
109
- svg: {
110
- "lg": "svg_lg",
111
- "xs": "svg_xs",
112
- "sm": "svg_sm",
113
- "1x": "svg_1x",
114
- "2x": "svg_2x",
115
- "3x": "svg_3x",
116
- "4x": "svg_4x",
117
- "5x": "svg_5x",
118
- "6x": "svg_6x",
119
- "7x": "svg_7x",
120
- "8x": "svg_8x",
121
- "9x": "svg_9x",
122
- "10x": "svg_10x",
123
- "": ""
124
- }
125
-
58
+ horizontal: 'fa-flip-horizontal',
59
+ vertical: 'fa-flip-vertical',
60
+ both: 'fa-flip-horizontal fa-flip-vertical',
61
+ none: ""
126
62
  }
127
63
 
128
64
  declare global {
@@ -194,44 +130,16 @@ const Icon = (props: IconProps) => {
194
130
  }
195
131
  }
196
132
 
197
- const isFA = !iconElement && !customIcon
198
-
199
- let classes = classnames(
133
+ const classes = classnames(
134
+ flipMap[flip],
200
135
  (!iconElement && !customIcon) ? 'pb_icon_kit' : '',
201
136
  (iconElement || customIcon) ? 'pb_custom_icon' : fontStyle,
202
137
  iconElement ? 'svg-inline--fa' : '',
203
- isFA? fontStyle : null,
138
+ faClasses,
204
139
  globalProps(props),
205
140
  className
206
141
  )
207
142
 
208
- const transformClasses = classnames(
209
- flip ? flipMap[isFA ? 'fa' : 'svg'][flip] : null,
210
- pulse ? pulseMap[isFA ? 'fa' : 'svg'] : null,
211
- rotation ? rotateMap[isFA ? 'fa' : 'svg'][rotation] : null,
212
- spin ? spinMap[isFA ? 'fa' : 'svg'] : null,
213
- size ? sizeMap[isFA ? 'fa' : 'svg'][size] : null,
214
- border ? isFA ? 'fa-border' : 'svg_border' : null,
215
- fixedWidth ? isFA ? 'fa-fw' : 'svg_fw' : null,
216
- inverse ? isFA ? 'fa-inverse' : 'svg_inverse' : null,
217
- listItem ? isFA ? 'fa-li' : 'svg_li' : null,
218
- pull ? isFA ? `fa-pull-${pull}` : `pull_${pull}` : null,
219
- )
220
- classes += ` ${transformClasses}`
221
-
222
- if (isFA) {
223
- const faClassList = {
224
- 'fa-border': border,
225
- 'fa-fw': (iconElement) ? false : fixedWidth,
226
- 'fa-inverse': inverse,
227
- 'fa-li': listItem,
228
- [`fa-${size}`]: size,
229
- [`fa-pull-${pull}`]: pull,
230
- }
231
- faClassList[`fa-${icon}`] = icon as string
232
- classes += ` ${classnames(faClassList)}`
233
- }
234
-
235
143
  const classesEmoji = classnames(
236
144
  'pb_icon_kit_emoji',
237
145
  globalProps(props),
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rubocop:disable Style/HashLikeCase
4
+
3
5
  require "open-uri"
4
6
  require "json"
5
7
 
@@ -37,8 +39,6 @@ module Playbook
37
39
  prop :spin, type: Playbook::Props::Boolean,
38
40
  default: false
39
41
 
40
- ALIASES = JSON.parse(File.read(Playbook::Engine.root.join("app/pb_kits/playbook/pb_icon/icon_aliases.json")))["aliases"].freeze
41
-
42
42
  def valid_emoji?
43
43
  emoji_regex = /\p{Emoji}/
44
44
  emoji_regex.match?(icon)
@@ -80,6 +80,14 @@ module Playbook
80
80
  )
81
81
  end
82
82
 
83
+ def icon_alias_map
84
+ return unless Rails.application.config.respond_to?(:icon_alias_path)
85
+
86
+ base_path = Rails.application.config.icon_alias_path
87
+ json = File.read(Rails.root.join(base_path))
88
+ JSON.parse(json)["aliases"].freeze
89
+ end
90
+
83
91
  def asset_path
84
92
  return unless Rails.application.config.respond_to?(:icon_path)
85
93
 
@@ -109,7 +117,7 @@ module Playbook
109
117
  private
110
118
 
111
119
  def resolve_alias(icon)
112
- aliases = ALIASES[icon]
120
+ aliases = icon_alias_map[icon]
113
121
  return icon unless aliases
114
122
 
115
123
  if aliases.is_a?(Array)
@@ -129,13 +137,11 @@ module Playbook
129
137
  end
130
138
 
131
139
  def border_class
132
- prefix = is_svg? ? "svg_border" : "fa-border"
133
- border ? prefix : nil
140
+ border ? "fa-border" : nil
134
141
  end
135
142
 
136
143
  def fixed_width_class
137
- prefix = is_svg? ? "svg_fw" : "fa-fw"
138
- fixed_width ? prefix : nil
144
+ fixed_width ? "fa-fw" : nil
139
145
  end
140
146
 
141
147
  def icon_class
@@ -143,45 +149,38 @@ module Playbook
143
149
  end
144
150
 
145
151
  def inverse_class
146
- class_name = is_svg? ? "svg_inverse" : "fa-inverse"
147
- inverse ? class_name : nil
152
+ inverse ? "fa-inverse" : nil
148
153
  end
149
154
 
150
155
  def list_item_class
151
- class_name = is_svg? ? "svg_li" : "fa-li"
152
- list_item ? class_name : nil
156
+ list_item ? "fa-li" : nil
153
157
  end
154
158
 
155
159
  def flip_class
156
- prefix = is_svg? ? "flip_" : "fa-flip-"
157
160
  case flip
158
161
  when "horizontal"
159
- "#{prefix}horizontal"
162
+ "fa-flip-horizontal"
160
163
  when "vertical"
161
- "#{prefix}vertical"
164
+ "fa-flip-vertical"
162
165
  when "both"
163
- "#{prefix}horizontal #{prefix}vertical"
166
+ "fa-flip-horizontal fa-flip-vertical"
164
167
  end
165
168
  end
166
169
 
167
170
  def pull_class
168
- class_name = is_svg? ? "pull_#{pull}" : "fa-pull-#{pull}"
169
- pull ? class_name : nil
171
+ pull ? "fa-pull-#{pull}" : nil
170
172
  end
171
173
 
172
174
  def pulse_class
173
- class_name = is_svg? ? "pulse" : "fa-pulse"
174
- pulse ? class_name : nil
175
+ pulse ? "fa-pulse" : nil
175
176
  end
176
177
 
177
178
  def rotation_class
178
- class_name = is_svg? ? "rotate_#{rotation}" : "fa-rotate-#{rotation}"
179
- rotation ? class_name : nil
179
+ rotation ? "fa-rotate-#{rotation}" : nil
180
180
  end
181
181
 
182
182
  def size_class
183
- class_name = is_svg? ? "svg_#{size}" : "fa-#{size}"
184
- size ? class_name : nil
183
+ size ? "fa-#{size}" : nil
185
184
  end
186
185
 
187
186
  def font_style_class
@@ -189,9 +188,10 @@ module Playbook
189
188
  end
190
189
 
191
190
  def spin_class
192
- class_name = is_svg? ? "spin" : "fa-spin"
193
- spin ? class_name : nil
191
+ spin ? "fa-spin" : nil
194
192
  end
195
193
  end
196
194
  end
197
195
  end
196
+
197
+ # rubocop:enable Style/HashLikeCase
@@ -95,11 +95,11 @@ test('should not have a left border', () => {
95
95
  test('should have a right icon', () => {
96
96
  render(<NavDefault iconRight="angle-down" />)
97
97
  const kit = screen.getByTestId(itemTestId)
98
- expect(kit).toContainHTML('<i class="pb_icon_kit far far pb_nav_list_item_icon_right fa-fw fa-fw fa-angle-down" />')
98
+ expect(kit).toContainHTML('<i class="pb_icon_kit far fa-fw fa-angle-down pb_nav_list_item_icon_right" />')
99
99
  })
100
100
 
101
101
  test('should have a left icon', () => {
102
102
  render(<NavDefault iconLeft="users-class" />)
103
103
  const kit = screen.getByTestId(itemTestId)
104
- expect(kit).toContainHTML('<i class="pb_icon_kit far far pb_nav_list_item_icon_left fa-fw fa-fw fa-users-class" />')
104
+ expect(kit).toContainHTML('<i class="pb_icon_kit far fa-fw fa-users-class pb_nav_list_item_icon_left" />')
105
105
  })
@@ -86,33 +86,18 @@ const RichTextEditor = (props: RichTextEditorProps): React.ReactElement => {
86
86
  const toolbarElement = element.parentElement.querySelector('trix-toolbar') as HTMLElement,
87
87
  blockCodeButton = toolbarElement.querySelector('[data-trix-attribute=code]') as HTMLElement
88
88
 
89
+ // replace default trix "block code" button with "inline code" button
89
90
  let inlineCodeButton = toolbarElement.querySelector('[data-trix-attribute=inlineCode]') as HTMLElement
90
- if (!inlineCodeButton) inlineCodeButton = blockCodeButton.cloneNode(true) as HTMLElement
91
-
92
- // set button attributes
93
- inlineCodeButton.dataset.trixAttribute = 'inlineCode'
94
- blockCodeButton.insertAdjacentElement('afterend', inlineCodeButton)
91
+ if (!inlineCodeButton) {
92
+ inlineCodeButton = blockCodeButton.cloneNode(true) as HTMLElement
93
+ blockCodeButton.hidden = true
94
+ // set button attributes
95
+ inlineCodeButton.dataset.trixAttribute = 'inlineCode'
96
+ blockCodeButton.insertAdjacentElement('afterend', inlineCodeButton)
97
+ }
95
98
 
96
99
  if (toolbarBottom) editor.element.after(toolbarElement)
97
100
 
98
- const getCodeFormattingType = (): string => {
99
- if (editor.attributeIsActive('code')) return 'block'
100
- if (editor.attributeIsActive('inlineCode')) return 'inline'
101
-
102
- const range = editor.getSelectedRange()
103
- if (range[0] == range[1]) return 'block'
104
-
105
- const text = editor.getSelectedDocument().toString().trim()
106
- return /\n/.test(text) ? 'block' : 'inline'
107
- }
108
-
109
- // DOM event listeners
110
- element.addEventListener('trix-selection-change', () => {
111
- const type = getCodeFormattingType()
112
- blockCodeButton.hidden = type == 'inline'
113
- inlineCodeButton.hidden = type == 'block'
114
- })
115
-
116
101
  focus
117
102
  ? (document.addEventListener('trix-focus', useFocus),
118
103
  document.addEventListener('trix-blur', useFocus),
@@ -5,10 +5,11 @@
5
5
  @mixin pb_title(
6
6
  $fontSize: $heading_1,
7
7
  $fontWeight: $lighter,
8
- $lineHeight: $lh_tighter
8
+ $lineHeight: $lh_tighter,
9
+ $letterSpacing: $lspace_tight
9
10
  ){
10
11
  font-size: $fontSize;
11
- letter-spacing: $lspace_tight;
12
+ letter-spacing: $letterSpacing;
12
13
  font-weight: $fontWeight;
13
14
  color: $text_lt_default;
14
15
  margin: 0;
@@ -29,8 +30,7 @@
29
30
  }
30
31
 
31
32
  @mixin pb_title_4 {
32
- @include pb_title($heading_4, $bolder);
33
- letter-spacing: -0.03em;
33
+ @include pb_title($heading_4, $bolder, $letterSpacing: $lspace_normal);
34
34
  }
35
35
 
36
36
  @mixin pb_title_dark {
@@ -1,11 +1,11 @@
1
- $font_family_base: "Proxima Nova", "Helvetica Neue", Helvetica, Arial, sans_serif !default;
1
+ $font_family_base: "Power Centra", "Helvetica Neue", Helvetica, Arial, sans_serif !default;
2
2
 
3
3
  /* CLEAN UP AND REMOVE */
4
4
  $font_jumbo: 36px !default;
5
5
  $font_largest: 32px !default;
6
- $font_larger: 28px !default;
6
+ $font_larger: 27px !default;
7
7
  $font_large: 20px !default;
8
- $font_base: 16px !default;
8
+ $font_base: 15.5px !default;
9
9
  $font_default: $font_base !default;
10
10
  $font_normal: $font_base !default;
11
11
  $font_medium: $font_base !default;
@@ -26,8 +26,8 @@ $text_smaller: $font_smaller !default;
26
26
  $text_smallest: $font_smallest !default;
27
27
 
28
28
  /* Headings */
29
- $heading_1: 46px !default;
30
- $heading_2: 34px !default;
29
+ $heading_1: 44px !default;
30
+ $heading_2: 32px !default;
31
31
  $heading_3: $font_larger !default;
32
32
  $heading_4: $font_base !default;
33
33
 
@@ -35,19 +35,19 @@ $heading_4: $font_base !default;
35
35
  $lspace_tightest: -.1em !default;
36
36
  $lspace_tighter: -.07em !default;
37
37
  $lspace_tight: -.01em !default;
38
- $lspace_normal: 0 !default;
38
+ $lspace_normal: .003em !default;
39
39
  $lspace_loose: .03em !default;
40
40
  $lspace_looser: .07em !default;
41
41
  $lspace_loosest: .1em !default;
42
42
  $lspace_super_loosest: .2em !default;
43
43
 
44
44
  /* Standard Font Weights */
45
- $bold: 600 !default;
45
+ $bold: 700 !default;
46
46
  $regular: 400 !default;
47
47
 
48
48
  /* Non_Standard Font Weights */
49
- $extrabold: 900 !default;
50
- $boldest: 800 !default;
49
+ $extrabold: 700 !default;
50
+ $boldest: 700 !default;
51
51
  $bolder: 700 !default;
52
52
  $light: 300 !default;
53
- $lighter: 100 !default;
53
+ $lighter: 300 !default;