playbook_ui 4.2.0 → 4.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/playbook/application_controller.rb +1 -0
- data/app/controllers/playbook/pages_controller.rb +0 -4
- data/app/controllers/playbook/samples_controller.rb +40 -0
- data/app/helpers/playbook/pb_doc_helper.rb +7 -1
- data/app/helpers/playbook/pb_sample_helper.rb +19 -0
- data/app/helpers/playbook/redcarpet_helper.rb +1 -1
- data/app/pb_kits/playbook/_playbook.scss +1 -0
- data/app/pb_kits/playbook/config/_kit_samples_list.html.erb +3 -0
- data/app/pb_kits/playbook/config/_kit_ui.html.slim +9 -5
- data/app/pb_kits/playbook/data/menu.yml +4 -0
- data/app/pb_kits/playbook/index.js +2 -0
- data/app/pb_kits/playbook/kits/pb_flex.js +4 -0
- data/app/pb_kits/playbook/kits/pb_highlight.js +4 -0
- data/app/pb_kits/playbook/packs/examples.js +4 -0
- data/app/pb_kits/playbook/packs/kits/pb_highlight.js +2 -0
- data/app/pb_kits/playbook/packs/kits/pb_popover.js +1 -0
- data/app/pb_kits/playbook/packs/main.scss +3 -0
- data/app/pb_kits/playbook/packs/samples.js +50 -0
- data/app/pb_kits/playbook/packs/site_styles/_samples.scss +71 -0
- data/app/pb_kits/playbook/packs/site_styles/_site-style.scss +6 -0
- data/app/pb_kits/playbook/packs/site_styles/docs/_flex_examples.scss +11 -3
- data/app/pb_kits/playbook/pb_body/_body.html.erb +1 -1
- data/app/pb_kits/playbook/pb_body/_body.jsx +10 -1
- data/app/pb_kits/playbook/pb_body/body.rb +17 -1
- data/app/pb_kits/playbook/pb_editor/_editor.html.erb +6 -0
- data/app/pb_kits/playbook/pb_hashtag/_hashtag.jsx +2 -1
- data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_dark.html.erb +4 -0
- data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_dark.jsx +7 -0
- data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_default.html.erb +4 -0
- data/app/pb_kits/playbook/pb_hashtag/docs/_hashtag_default.jsx +6 -0
- data/app/pb_kits/playbook/pb_hashtag/hashtag.rb +3 -1
- data/app/pb_kits/playbook/pb_highlight/_highlight.html.erb +6 -0
- data/app/pb_kits/playbook/pb_highlight/_highlight.jsx +38 -0
- data/app/pb_kits/playbook/pb_highlight/_highlight.scss +6 -0
- data/app/pb_kits/playbook/pb_highlight/docs/_highlight_default.html.erb +20 -0
- data/app/pb_kits/playbook/pb_highlight/docs/_highlight_default.jsx +26 -0
- data/app/pb_kits/playbook/pb_highlight/docs/example.yml +9 -0
- data/app/pb_kits/playbook/pb_highlight/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_highlight/highlight.rb +17 -0
- data/app/pb_kits/playbook/pb_popover/_popover.html.erb +1 -1
- data/app/pb_kits/playbook/pb_popover/_popover.js +13 -22
- data/app/pb_kits/playbook/pb_popover/_popover.jsx +121 -0
- data/app/pb_kits/playbook/pb_popover/_popover.scss +4 -0
- data/app/pb_kits/playbook/pb_popover/docs/_popover_default.jsx +29 -0
- data/app/pb_kits/playbook/pb_popover/docs/_popover_list.jsx +46 -0
- data/app/pb_kits/playbook/pb_popover/docs/_popover_portal.jsx +36 -0
- data/app/pb_kits/playbook/pb_popover/docs/_popover_with_button.jsx +35 -0
- data/app/pb_kits/playbook/pb_popover/docs/example.yml +4 -0
- data/app/pb_kits/playbook/pb_popover/docs/index.js +4 -0
- data/app/pb_kits/playbook/pb_popover/popover.rb +1 -1
- data/app/pb_kits/playbook/pb_select/_select.jsx +51 -51
- data/app/pb_kits/playbook/pb_select/docs/_select_blank.jsx +8 -14
- data/app/pb_kits/playbook/pb_select/docs/_select_dark.jsx +17 -15
- data/app/pb_kits/playbook/pb_select/docs/_select_dark_error.jsx +17 -15
- data/app/pb_kits/playbook/pb_select/docs/_select_default.jsx +16 -15
- data/app/pb_kits/playbook/pb_select/docs/_select_disabled.jsx +8 -14
- data/app/pb_kits/playbook/pb_select/docs/_select_disabled_options.jsx +31 -29
- data/app/pb_kits/playbook/pb_select/docs/_select_error.jsx +17 -15
- data/app/pb_kits/playbook/pb_select/docs/_select_required.jsx +7 -11
- data/app/pb_kits/playbook/pb_select/docs/_select_value_text_same.jsx +8 -14
- data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.jsx +2 -2
- data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +2 -2
- data/app/pb_kits/playbook/pb_toggle/_toggle.jsx +3 -3
- data/app/pb_kits/playbook/types.js +1 -1
- data/app/pb_kits/playbook/vendor.js +2 -2
- data/app/views/layouts/playbook/samples.html.erb +37 -0
- data/app/views/playbook/pages/kit_show.html.slim +1 -1
- data/app/views/playbook/pages/principles.html.slim +1 -1
- data/app/views/playbook/samples/dashboards/dashboards.html.erb +82 -0
- data/app/views/playbook/samples/dashboards/dashboards.jsx +35 -0
- data/app/views/playbook/samples/sample_show.html.erb +25 -0
- data/lib/playbook/version.rb +1 -1
- metadata +32 -5
- data/app/pb_kits/playbook/config/_kit_example.html.slim +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a4d73c76588b25b5e3ee3b257516d846582794b6a86e435cad10ecd5dcdc8bc
|
4
|
+
data.tar.gz: 57d4d2629084e41b54d0a5d041b80203ef2372718e14d750a680c5b324b18fcf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30175126c0b79b3625a628965b0a2869d1e5bbfa46359413335fb9b45246a21d699e65039c9d97de5d6486d6152f350308b0be4c5fee63e530a98c9de03a33d9
|
7
|
+
data.tar.gz: 8adec477ac41c310c523f6b526052bde4f6aaa72506d4d5e91a8e591cd34930ff3bca48783c8085704b6d1a318c2ea55aa17cc6165c1ffda08fffcab8385750a
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_dependency "playbook/application_controller"
|
4
|
+
require "yaml"
|
5
|
+
|
6
|
+
module Playbook
|
7
|
+
class SamplesController < ApplicationController
|
8
|
+
before_action :set_sample, only: %i[sample_show_rails sample_show_react]
|
9
|
+
|
10
|
+
layout "playbook/samples"
|
11
|
+
|
12
|
+
def samples
|
13
|
+
params[:type] ||= "rails"
|
14
|
+
@type = params[:type]
|
15
|
+
end
|
16
|
+
|
17
|
+
def sample_show_rails
|
18
|
+
params[:type] ||= "rails"
|
19
|
+
@type = params[:type]
|
20
|
+
render template: "playbook/samples/sample_show"
|
21
|
+
end
|
22
|
+
|
23
|
+
def sample_show_react
|
24
|
+
params[:type] ||= "react"
|
25
|
+
@type = params[:type]
|
26
|
+
render template: "playbook/samples/sample_show"
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def set_sample
|
32
|
+
menu = MENU["samples"].map { |link| link.is_a?(Hash) ? link.first.last : link }
|
33
|
+
if menu.flatten.include?(params[:name])
|
34
|
+
@sample = params[:name]
|
35
|
+
else
|
36
|
+
redirect_to root_path, flash: { error: "That kit does not exist" }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -24,7 +24,8 @@ module Playbook
|
|
24
24
|
|
25
25
|
def pb_kits(type: "rails")
|
26
26
|
display_kits = []
|
27
|
-
|
27
|
+
kits = get_kits()
|
28
|
+
kits.each do |kit|
|
28
29
|
if kit.is_a?(Hash)
|
29
30
|
nav_hash_array(kit).each do |sub_kit|
|
30
31
|
display_kits << render_pb_doc_kit(sub_kit, type)
|
@@ -36,6 +37,11 @@ module Playbook
|
|
36
37
|
raw("<div class='pb--docItem'>" + display_kits.join("</div><div class='pb--docItem'>") + "</div>")
|
37
38
|
end
|
38
39
|
|
40
|
+
def get_kits
|
41
|
+
menu = YAML.load_file("#{Playbook::Engine.root}/app/pb_kits/playbook/data/menu.yml")
|
42
|
+
return menu['kits']
|
43
|
+
end
|
44
|
+
|
39
45
|
def pb_category_kits(category_kits: [], type: "rails")
|
40
46
|
display_kits = []
|
41
47
|
category_kits.each do |kit|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Playbook
|
4
|
+
module PbSampleHelper
|
5
|
+
def has_sample_type?(sample, type)
|
6
|
+
type ||= "rails"
|
7
|
+
if type == "rails"
|
8
|
+
Dir["../../views/playbook/samples/#{sample}/*.html.erb"].empty?
|
9
|
+
elsif type == "react"
|
10
|
+
Dir["../../views/playbook/samples/#{sample}/*.jsx"].empty?
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def pb_sample(sample: "", type: "rails")
|
15
|
+
@type = type
|
16
|
+
@sample = sample
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -38,7 +38,7 @@ module Playbook
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def rouge(text, language)
|
41
|
-
formatter = Rouge::Formatters::HTML.new(
|
41
|
+
formatter = Rouge::Formatters::HTML.new(scope: ".highlight")
|
42
42
|
lexer = Rouge::Lexer.find(language)
|
43
43
|
formatter.format(lexer.lex(text))
|
44
44
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
- type ||= "rails"
|
2
2
|
|
3
3
|
- if type == "react"
|
4
|
-
- contents = "
|
4
|
+
- contents = File.read("#{Playbook::Engine.root}/app/pb_kits/playbook/pb_#{@kit_examples[:kit]}/docs/_#{key}.jsx")
|
5
5
|
- else
|
6
6
|
- contents = File.read("#{Playbook::Engine.root}/app/pb_kits/playbook/pb_#{@kit_examples[:kit]}/docs/_#{key}.html.erb")
|
7
7
|
|
@@ -14,6 +14,8 @@
|
|
14
14
|
= pb_react(key.camelize)
|
15
15
|
br
|
16
16
|
|
17
|
+
- if @samples
|
18
|
+
= render partial: "kit_samples_list"
|
17
19
|
|
18
20
|
- if @show_code
|
19
21
|
.pb--codeControls
|
@@ -23,7 +25,9 @@
|
|
23
25
|
|
24
26
|
.pb--codeCopy data-action="toggle" data-togglable="code_example"
|
25
27
|
a.pb--close-toggle href="#" data-toggle="false" Close
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
pre.highlight
|
29
|
+
- if type == "rails"
|
30
|
+
= raw rouge(contents, "erb")
|
31
|
+
- elsif type == "react"
|
32
|
+
= raw rouge(contents, "react")
|
33
|
+
|
@@ -1,3 +1,5 @@
|
|
1
|
+
samples:
|
2
|
+
- dashboards
|
1
3
|
kits:
|
2
4
|
- avatar
|
3
5
|
- badge
|
@@ -22,6 +24,7 @@ kits:
|
|
22
24
|
- textarea
|
23
25
|
- typeahead
|
24
26
|
- toggle
|
27
|
+
- highlight
|
25
28
|
- hashtag
|
26
29
|
- icon
|
27
30
|
- icon_circle
|
@@ -68,3 +71,4 @@ kits:
|
|
68
71
|
- title_detail
|
69
72
|
- user
|
70
73
|
- user_badge
|
74
|
+
- editor
|
@@ -20,6 +20,7 @@ export FixedConfirmationToast from './pb_fixed_confirmation_toast/_fixed_confirm
|
|
20
20
|
export Flex from './pb_flex/_flex.jsx'
|
21
21
|
export FlexItem from './pb_flex/_flex_item.jsx'
|
22
22
|
export Hashtag from './pb_hashtag/_hashtag.jsx'
|
23
|
+
export Highlight from './pb_highlight/_highlight.jsx'
|
23
24
|
export HomeAddressStreet from './pb_home_address_street/_home_address_street.jsx'
|
24
25
|
export Icon from './pb_icon/_icon.jsx'
|
25
26
|
export IconCircle from './pb_icon_circle/_icon_circle.jsx'
|
@@ -39,6 +40,7 @@ export MultipleUsersStacked from './pb_multiple_users_stacked/_multiple_users_st
|
|
39
40
|
export Nav from './pb_nav/_nav.jsx'
|
40
41
|
export NavItem from './pb_nav/_item.jsx'
|
41
42
|
export OnlineStatus from './pb_online_status/_online_status.jsx'
|
43
|
+
export PbReactPopover from './pb_popover/_popover.jsx'
|
42
44
|
export Person from './pb_person/_person.jsx'
|
43
45
|
export PersonContact from './pb_person_contact/_person_contact.jsx'
|
44
46
|
export Pill from './pb_pill/_pill.jsx'
|
@@ -33,6 +33,7 @@ import * as DistributionBar from 'pb_distribution_bar/docs'
|
|
33
33
|
import * as FixedConfirmationToast from 'pb_fixed_confirmation_toast/docs'
|
34
34
|
import * as Flex from 'pb_flex/docs'
|
35
35
|
import * as Hashtag from 'pb_hashtag/docs'
|
36
|
+
import * as Highlight from 'pb_highlight/docs'
|
36
37
|
import * as HomeAddressStreet from 'pb_home_address_street/docs'
|
37
38
|
import * as Icon from 'pb_icon/docs'
|
38
39
|
import * as IconCircle from 'pb_icon_circle/docs'
|
@@ -50,6 +51,7 @@ import * as MultipleUsers from 'pb_multiple_users/docs'
|
|
50
51
|
import * as MultipleUsersStacked from 'pb_multiple_users_stacked/docs'
|
51
52
|
import * as Nav from 'pb_nav/docs'
|
52
53
|
import * as OnlineStatus from 'pb_online_status/docs'
|
54
|
+
import * as PbReactPopover from 'pb_popover/docs'
|
53
55
|
import * as Person from 'pb_person/docs'
|
54
56
|
import * as PersonContact from 'pb_person_contact/docs'
|
55
57
|
import * as Pill from 'pb_pill/docs'
|
@@ -99,6 +101,7 @@ WebpackerReact.setup({
|
|
99
101
|
...FixedConfirmationToast,
|
100
102
|
...Flex,
|
101
103
|
...Hashtag,
|
104
|
+
...Highlight,
|
102
105
|
...HomeAddressStreet,
|
103
106
|
...Icon,
|
104
107
|
...IconCircle,
|
@@ -116,6 +119,7 @@ WebpackerReact.setup({
|
|
116
119
|
...MultipleUsersStacked,
|
117
120
|
...Nav,
|
118
121
|
...OnlineStatus,
|
122
|
+
...PbReactPopover,
|
119
123
|
...Person,
|
120
124
|
...PersonContact,
|
121
125
|
...Pill,
|
@@ -0,0 +1 @@
|
|
1
|
+
import '../../pb_popover/_popover.jsx'
|
@@ -0,0 +1,50 @@
|
|
1
|
+
// ===========================================
|
2
|
+
// Generated file from kit generator.
|
3
|
+
//
|
4
|
+
// ===========================================
|
5
|
+
|
6
|
+
import WebpackerReact from 'webpacker-react'
|
7
|
+
|
8
|
+
//
|
9
|
+
// ===========================================
|
10
|
+
// ===========================================
|
11
|
+
// Generated file from kit generator.
|
12
|
+
|
13
|
+
import Dashboards from '../../../views/playbook/samples/dashboards/dashboards.jsx'
|
14
|
+
|
15
|
+
WebpackerReact.setup({ Dashboards })
|
16
|
+
|
17
|
+
$(document).ready(() => {
|
18
|
+
$('.pb--codeCopy').show()
|
19
|
+
$('.compress').hide()
|
20
|
+
|
21
|
+
window.$(document).on('click', '.toggle-button', (e) => {
|
22
|
+
e.preventDefault()
|
23
|
+
$('.pb--codeCopy').toggleClass('close')
|
24
|
+
})
|
25
|
+
|
26
|
+
$('.expand').click(() => {
|
27
|
+
$('.sample-nav').hide()
|
28
|
+
$('.compress').show()
|
29
|
+
})
|
30
|
+
|
31
|
+
$('.compress').click(() => {
|
32
|
+
$('.sample-nav').show()
|
33
|
+
$('.compress').hide()
|
34
|
+
})
|
35
|
+
|
36
|
+
const setClipboard = (value) => {
|
37
|
+
var tempInput = document.createElement('textarea')
|
38
|
+
tempInput.style = 'position: absolute; left: -1000px; top: -1000px'
|
39
|
+
tempInput.value = value
|
40
|
+
document.body.appendChild(tempInput)
|
41
|
+
tempInput.select()
|
42
|
+
document.execCommand('copy')
|
43
|
+
document.body.removeChild(tempInput)
|
44
|
+
}
|
45
|
+
|
46
|
+
$('.copy-clipboard').click(() => {
|
47
|
+
var copyText = document.querySelector('.hiddenCodeforCopy').textContent
|
48
|
+
setClipboard(copyText)
|
49
|
+
})
|
50
|
+
})
|
@@ -0,0 +1,71 @@
|
|
1
|
+
.sample-layout {
|
2
|
+
overflow-y: hidden;
|
3
|
+
.sample {
|
4
|
+
padding-left: 50px;
|
5
|
+
border-bottom: 0px;
|
6
|
+
}
|
7
|
+
.code-controls {
|
8
|
+
.pb_nav_list_item_text {
|
9
|
+
color: white !important;
|
10
|
+
}
|
11
|
+
.pb_nav_list_kit_item {
|
12
|
+
.pb_nav_list_item_link {
|
13
|
+
border-color: transparent !important;
|
14
|
+
}
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
.sample-nav {
|
19
|
+
padding: 0 25px;
|
20
|
+
background: #172257;
|
21
|
+
display: flex;
|
22
|
+
width: 100%;
|
23
|
+
flex-basis: 200px;
|
24
|
+
|
25
|
+
}
|
26
|
+
|
27
|
+
.sample-actions {
|
28
|
+
display: flex;
|
29
|
+
align-items: center;
|
30
|
+
justify-content: center;
|
31
|
+
|
32
|
+
&-right {
|
33
|
+
margin-left: auto;
|
34
|
+
order: 2;
|
35
|
+
display: flex;
|
36
|
+
align-items: center;
|
37
|
+
justify-content: center;
|
38
|
+
.items {
|
39
|
+
padding: 5px;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
.pb--doc {
|
44
|
+
margin-bottom: 0px;
|
45
|
+
}
|
46
|
+
.pb--codeCopy {
|
47
|
+
border: 0px;
|
48
|
+
position: fixed;
|
49
|
+
width: 100%;
|
50
|
+
height: calc(50vh - 45px);
|
51
|
+
bottom: 0;
|
52
|
+
left: 0;
|
53
|
+
transition: all .4s;
|
54
|
+
}
|
55
|
+
|
56
|
+
.pb--codeCopy.close {
|
57
|
+
top: 100%;
|
58
|
+
height: 0px;
|
59
|
+
transition: all .4s;
|
60
|
+
}
|
61
|
+
.compress {
|
62
|
+
position: absolute;
|
63
|
+
top: 15px;
|
64
|
+
right: 30px;
|
65
|
+
display: none;
|
66
|
+
z-index: 4;
|
67
|
+
}
|
68
|
+
.hiddenCodeforCopy {
|
69
|
+
display: none;
|
70
|
+
}
|
71
|
+
}
|
@@ -46,6 +46,12 @@
|
|
46
46
|
line-height: 34px;
|
47
47
|
border-bottom: 2px solid rgba($border_light, 0.6);
|
48
48
|
|
49
|
+
&.sample {
|
50
|
+
margin: 0;
|
51
|
+
border-bottom: 2px solid rgba(228, 232, 240, 0.6);
|
52
|
+
background: rgb(23, 34, 87) !important;
|
53
|
+
}
|
54
|
+
|
49
55
|
a {
|
50
56
|
padding: 0 10px;
|
51
57
|
line-height: 34px;
|
@@ -1,4 +1,12 @@
|
|
1
|
+
.pb--kit-show.flex-kit {
|
1
2
|
[class^=pb_flex_kit] { background: #F3F7FB; }
|
2
|
-
|
3
|
-
[class^=pb_flex_item_kit] {
|
4
|
-
|
3
|
+
|
4
|
+
.flex-item, [class^=pb_flex_item_kit] {
|
5
|
+
background: #E4E8F0;
|
6
|
+
min-width: 30px;
|
7
|
+
min-height: 30px;
|
8
|
+
color: #242B42;
|
9
|
+
}
|
10
|
+
|
11
|
+
.tall { min-height: 200px; }
|
12
|
+
}
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
import React from 'react'
|
4
4
|
import classnames from 'classnames'
|
5
|
+
import { Highlight } from '../'
|
5
6
|
|
6
7
|
type BodyProps = {
|
7
8
|
className?: String,
|
@@ -11,6 +12,8 @@ type BodyProps = {
|
|
11
12
|
status?: 'negative' | 'positive',
|
12
13
|
tag: String,
|
13
14
|
text?: String,
|
15
|
+
highlighting?: Boolean,
|
16
|
+
highlightedText?: Array<String>
|
14
17
|
}
|
15
18
|
|
16
19
|
const bodyCSS = ({
|
@@ -34,13 +37,19 @@ const Body = (props: BodyProps) => {
|
|
34
37
|
children,
|
35
38
|
text,
|
36
39
|
tag = 'div',
|
40
|
+
highlightedText,
|
41
|
+
highlighting = false,
|
37
42
|
} = props
|
38
43
|
|
39
44
|
const Tag = `${tag}`
|
40
45
|
|
41
46
|
return (
|
42
47
|
<Tag className={classnames(bodyCSS(props), className)}>
|
43
|
-
{
|
48
|
+
<If condition={highlighting}>
|
49
|
+
<Highlight highlightedText={highlightedText}>{text || children}</Highlight>
|
50
|
+
<Else />
|
51
|
+
{ text || children }
|
52
|
+
</If>
|
44
53
|
</Tag>
|
45
54
|
)
|
46
55
|
}
|