playbook_ui 12.37.0.pre.alpha.PLAYaddingdatapropselectkit1071 → 12.37.0.pre.alpha.svgiconmethods1064
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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_date/_date.tsx +8 -7
- data/app/pb_kits/playbook/pb_date/docs/_date_alignment.jsx +2 -2
- data/app/pb_kits/playbook/pb_date/docs/_date_default.jsx +5 -29
- data/app/pb_kits/playbook/pb_date/docs/_date_unstyled.jsx +2 -2
- data/app/pb_kits/playbook/pb_date/docs/_date_variants.jsx +5 -5
- data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.tsx +31 -45
- data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.tsx +3 -5
- data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.tsx +21 -24
- data/app/pb_kits/playbook/pb_date_time/_date_time.tsx +1 -1
- data/app/pb_kits/playbook/pb_date_time/dateTime.test.js +1 -1
- data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.tsx +2 -2
- data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.test.js +1 -1
- data/app/pb_kits/playbook/pb_date_year_stacked/_date_year_stacked.tsx +8 -6
- data/app/pb_kits/playbook/pb_icon/docs/_icon_animate.html.erb +1 -0
- data/app/pb_kits/playbook/pb_icon/docs/_icon_custom.html.erb +2 -0
- data/app/pb_kits/playbook/pb_icon/docs/_icon_svg.html.erb +5 -0
- data/app/pb_kits/playbook/pb_icon/docs/example.yml +10 -9
- data/app/pb_kits/playbook/pb_icon/icon.html.erb +3 -3
- data/app/pb_kits/playbook/pb_icon/icon.rb +19 -0
- data/app/pb_kits/playbook/pb_kit/dateTime.ts +63 -146
- data/app/pb_kits/playbook/pb_label_value/_label_value.tsx +31 -52
- data/app/pb_kits/playbook/pb_logistic/_logistic.jsx +120 -0
- data/app/pb_kits/playbook/pb_message/_message.tsx +24 -24
- data/app/pb_kits/playbook/pb_select/docs/example.yml +0 -1
- data/app/pb_kits/playbook/pb_select/select.html.erb +1 -1
- data/app/pb_kits/playbook/pb_time/_time.tsx +11 -9
- data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.tsx +49 -46
- data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.tsx +6 -4
- data/app/pb_kits/playbook/pb_timestamp/_timestamp.tsx +11 -11
- data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.tsx +11 -8
- data/dist/playbook-rails.js +7 -7
- data/lib/playbook/version.rb +1 -1
- metadata +4 -4
- data/app/pb_kits/playbook/pb_select/docs/_select_data_attributes.html.erb +0 -24
- data/app/pb_kits/playbook/pb_select/docs/_select_data_attributes.md +0 -1
@@ -1,173 +1,90 @@
|
|
1
|
-
const ABBR_DAYS = ['SU', 'M', 'T', 'W', 'TH', 'F', 'S']
|
2
1
|
|
3
|
-
|
2
|
+
import moment, { Moment } from 'moment'
|
3
|
+
import 'moment-strftime'
|
4
|
+
import 'moment-timezone'
|
4
5
|
|
5
|
-
|
6
|
+
type DateTimeType = {
|
7
|
+
value: string | Date,
|
8
|
+
zone?: string,
|
9
|
+
}
|
6
10
|
|
7
|
-
const
|
8
|
-
const isTimelessStringDate = typeof newDate === "string" && !newDate.includes("T")
|
11
|
+
const ABBR_DAYS = ['SU', 'M', 'T', 'W', 'TH', 'F', 'S']
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
+
export default class DateTime {
|
14
|
+
value: Moment & any
|
15
|
+
constructor({ value, zone = 'America/New_York' }: DateTimeType) {
|
16
|
+
this.value = this.convertToTimestampZone(value, zone)
|
13
17
|
}
|
14
18
|
|
15
|
-
|
16
|
-
|
19
|
+
convertToTimestampZone(value: string | Date, zone: string) {
|
20
|
+
return moment(value).tz(zone)
|
21
|
+
}
|
17
22
|
|
18
|
-
|
19
|
-
|
20
|
-
if (timeZone) {
|
21
|
-
return date.toLocaleTimeString(undefined, { timeZone, hour: "2-digit", minute: "2-digit" }).slice(3, 5);
|
22
|
-
} else {
|
23
|
-
return date.toLocaleTimeString(undefined, { hour: "2-digit", minute: "2-digit" }).slice(3, 5);
|
23
|
+
convertToTimezone() {
|
24
|
+
return this.value.strftime('%Z')
|
24
25
|
}
|
25
|
-
}
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
if (timeZone) {
|
30
|
-
return date.toLocaleTimeString(undefined, { timeZone, hour: "numeric" }).split(' ')[0];
|
31
|
-
} else {
|
32
|
-
return date.toLocaleTimeString(undefined, { hour: "numeric" }).split(' ')[0];
|
27
|
+
toCustomFormat(format = '%-m/%-d') {
|
28
|
+
return this.value.strftime(format)
|
33
29
|
}
|
34
|
-
}
|
35
30
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
return date.getDate()
|
40
|
-
} else {
|
41
|
-
const date = formatDate(newDate)
|
42
|
-
return date.getDate()
|
43
|
-
}
|
44
|
-
}
|
31
|
+
toYear() {
|
32
|
+
return this.value.strftime('%Y')
|
33
|
+
}
|
45
34
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
}
|
35
|
+
toMonth() {
|
36
|
+
return this.value.strftime('%b')
|
37
|
+
}
|
50
38
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
}
|
39
|
+
toMonthNum() {
|
40
|
+
return this.value.strftime('%-m')
|
41
|
+
}
|
55
42
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
return months[date.getUTCMonth()]
|
60
|
-
} else {
|
61
|
-
const date = formatDate(newDate)
|
62
|
-
return months[date.getUTCMonth()]
|
63
|
-
}
|
64
|
-
}
|
43
|
+
toMonthFull() {
|
44
|
+
return this.value.strftime('%B')
|
45
|
+
}
|
65
46
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
}
|
47
|
+
toDay() {
|
48
|
+
return this.value.strftime('%e')
|
49
|
+
}
|
70
50
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
return date.getUTCFullYear()
|
75
|
-
} else {
|
76
|
-
const date = new Date(newDate)
|
77
|
-
return date.getUTCFullYear()
|
78
|
-
}
|
79
|
-
}
|
51
|
+
toDayAbbr() {
|
52
|
+
return ABBR_DAYS[this.value.day()]
|
53
|
+
}
|
80
54
|
|
81
|
-
|
82
|
-
|
83
|
-
if (timeZone) {
|
84
|
-
return date.toLocaleTimeString(undefined, { timeZone, timeStyle: "short" }).split(' ')[0];
|
85
|
-
} else {
|
86
|
-
return date.toLocaleTimeString(undefined, { timeStyle: "short" }).split(' ')[0];
|
55
|
+
toWeekday() {
|
56
|
+
return this.value.strftime('%a')
|
87
57
|
}
|
88
|
-
}
|
89
58
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
return date.toLocaleString(undefined, { timeZone, hour12: true }).slice(-2).charAt(0).toLocaleLowerCase();
|
94
|
-
} else {
|
95
|
-
return date.toLocaleString(undefined, { hour12: true }).slice(-2).charAt(0).toLocaleLowerCase();
|
96
|
-
}
|
97
|
-
}
|
59
|
+
toHour() {
|
60
|
+
return this.value.strftime('%l')
|
61
|
+
}
|
98
62
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
return date.toLocaleString(undefined, { timeZone, timeZoneName: "short" }).split(' ')[3];
|
103
|
-
} else {
|
104
|
-
return date.toLocaleString(undefined, { timeZoneName: "short" }).split(' ')[3];
|
105
|
-
}
|
106
|
-
}
|
63
|
+
toMinute() {
|
64
|
+
return this.value.strftime('%M')
|
65
|
+
}
|
107
66
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
}
|
67
|
+
toMeridian() {
|
68
|
+
return this.value.strftime('%P')[0]
|
69
|
+
}
|
112
70
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
}
|
71
|
+
toIso() {
|
72
|
+
return this.value.toISOString()
|
73
|
+
}
|
117
74
|
|
118
|
-
|
119
|
-
|
120
|
-
const startDate = formatDate(newDate).getTime()
|
121
|
-
const endDate = new Date().getTime()
|
122
|
-
const elapsedTime = endDate - startDate
|
123
|
-
let elapsedTimeString = `${Math.round(elapsedTime / (365.25 * 24 * 60 * 60 * 1000))} years ago.`; // 730+ days
|
124
|
-
|
125
|
-
const elapsedTimeData = [
|
126
|
-
{ min: 0, max: 44999, value: "a few seconds ago" }, // 0-44 seconds
|
127
|
-
{ min: 45000, max: 89999, value: "a minute ago" }, // 45-89 seconds
|
128
|
-
{ min: 90000, max: 2649999, value: `${Math.round(elapsedTime / 60000)} minutes ago`}, // 90s-44 minutes
|
129
|
-
{ min: 2650000, max: 7299999, value: "an hour ago" }, // 45-120 minutes
|
130
|
-
{ min: 7300000, max: 75699999, value: `${Math.round(elapsedTime / 3600000)} hours ago`}, // 2-21 hours
|
131
|
-
{ min: 75700000, max: 172899999, value: "a day ago" }, // 22-48 hours
|
132
|
-
{ min: 172900000, max: 2169999999, value: `${Math.round(elapsedTime / 86400000)} days ago`}, // 2-25 days
|
133
|
-
{ min: 2170000000, max: 5184999999, value: "a month ago"}, // 26-60 days
|
134
|
-
{ min: 5185000000, max: 27561699999, value: `${Math.round(elapsedTime / 30.44 * 24 * 60 * 60 * 1000)} months ago`}, // 60-319 days
|
135
|
-
{ min: 27561700000, max: 63072999999, value: "a year ago"}, // 320-730 days
|
136
|
-
];
|
137
|
-
|
138
|
-
for (const timeDate of elapsedTimeData) {
|
139
|
-
if (elapsedTime >= timeDate.min && elapsedTime <= timeDate.max) {
|
140
|
-
elapsedTimeString = timeDate.value;
|
141
|
-
break;
|
142
|
-
}
|
143
|
-
}
|
144
|
-
|
145
|
-
return elapsedTimeString
|
146
|
-
}
|
75
|
+
toTime() {
|
76
|
+
const time = this.value.strftime('%I:%M')
|
147
77
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
78
|
+
// strftime adds a leading 0 on single hour times. ie 08:31.
|
79
|
+
// this removes that 0 to match the rails kit.
|
80
|
+
return time.charAt() === '0' ? time.slice(1) : time
|
81
|
+
}
|
82
|
+
|
83
|
+
toTimezone() {
|
84
|
+
return this.value.strftime('%Z')
|
154
85
|
}
|
155
|
-
}
|
156
86
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
toDay,
|
161
|
-
toDayAbbr,
|
162
|
-
toWeekday,
|
163
|
-
toMonth,
|
164
|
-
toMonthNum,
|
165
|
-
toYear,
|
166
|
-
toTime,
|
167
|
-
toMeridiem,
|
168
|
-
toTimeZone,
|
169
|
-
toTimeWithMeridiem,
|
170
|
-
toIso,
|
171
|
-
fromNow,
|
172
|
-
toCustomFormat,
|
87
|
+
toTimeWithMeridian() {
|
88
|
+
return this.toTime() + this.toMeridian()
|
89
|
+
}
|
173
90
|
}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import React from "react";
|
2
2
|
import classnames from "classnames";
|
3
|
+
import DateTime from "../pb_kit/dateTime";
|
3
4
|
import { buildAriaProps, buildCss, buildDataProps } from "../utilities/props";
|
4
5
|
import { globalProps } from "../utilities/globalProps";
|
5
|
-
import DateTime from '../pb_kit/dateTime';
|
6
6
|
|
7
7
|
import Body from "../pb_body/_body";
|
8
8
|
import Caption from "../pb_caption/_caption";
|
@@ -26,9 +26,9 @@ type LabelValueProps = {
|
|
26
26
|
title?: string;
|
27
27
|
};
|
28
28
|
|
29
|
-
const dateString = (value:
|
30
|
-
const month =
|
31
|
-
const day =
|
29
|
+
const dateString = (value: DateTime) => {
|
30
|
+
const month = value.toMonthNum();
|
31
|
+
const day = value.toDay();
|
32
32
|
|
33
33
|
return ` · ${month}/${day}`;
|
34
34
|
};
|
@@ -52,6 +52,7 @@ const LabelValue = (props: LabelValueProps) => {
|
|
52
52
|
|
53
53
|
const ariaProps = buildAriaProps(aria);
|
54
54
|
const dataProps = buildDataProps(data);
|
55
|
+
const formattedDate = new DateTime({ value: date });
|
55
56
|
const variantClass = variant === "details" ? "details" : "";
|
56
57
|
const classes = classnames(
|
57
58
|
buildCss("pb_label_value_kit", variantClass),
|
@@ -61,81 +62,59 @@ const LabelValue = (props: LabelValueProps) => {
|
|
61
62
|
|
62
63
|
return (
|
63
64
|
<div
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
65
|
+
{...ariaProps}
|
66
|
+
{...dataProps}
|
67
|
+
className={classes}
|
68
|
+
id={id}
|
69
|
+
title={title}
|
69
70
|
>
|
70
|
-
<Caption dark={dark}
|
71
|
-
text={label}
|
72
|
-
/>
|
71
|
+
<Caption dark={dark} text={label} />
|
73
72
|
{variant === "details" ? (
|
74
|
-
<Flex inline
|
75
|
-
vertical="center"
|
76
|
-
>
|
73
|
+
<Flex inline vertical="center">
|
77
74
|
{icon && (
|
78
|
-
<Body color="light"
|
79
|
-
|
80
|
-
marginRight="xs"
|
81
|
-
>
|
82
|
-
<Icon dark={dark}
|
83
|
-
fixedWidth
|
84
|
-
icon={icon}
|
85
|
-
/>
|
75
|
+
<Body color="light" dark={dark} marginRight="xs">
|
76
|
+
<Icon dark={dark} fixedWidth icon={icon} />
|
86
77
|
</Body>
|
87
78
|
)}
|
88
79
|
{description && (
|
89
80
|
<Body
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
81
|
+
color="light"
|
82
|
+
dark={dark}
|
83
|
+
marginRight="xs"
|
84
|
+
text={description}
|
94
85
|
/>
|
95
86
|
)}
|
96
87
|
{active === true ? (
|
97
|
-
<Flex inline
|
98
|
-
vertical="center"
|
99
|
-
>
|
88
|
+
<Flex inline vertical="center">
|
100
89
|
{title && (
|
101
|
-
<Title dark={dark}
|
102
|
-
size={4}
|
103
|
-
text={title}
|
104
|
-
variant="link"
|
105
|
-
/>
|
90
|
+
<Title dark={dark} size={4} text={title} variant="link" />
|
106
91
|
)}
|
107
92
|
{date && (
|
108
93
|
<Title
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
94
|
+
dark={dark}
|
95
|
+
marginLeft="xs"
|
96
|
+
size={4}
|
97
|
+
text={" " + dateString(formattedDate)}
|
98
|
+
variant="link"
|
114
99
|
/>
|
115
100
|
)}
|
116
101
|
</Flex>
|
117
102
|
) : (
|
118
103
|
<>
|
119
|
-
{title && <Title dark={dark}
|
120
|
-
size={4}
|
121
|
-
text={title}
|
122
|
-
/>
|
123
|
-
}
|
104
|
+
{title && <Title dark={dark} size={4} text={title} />}
|
124
105
|
{date && (
|
125
106
|
<Title
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
107
|
+
dark={dark}
|
108
|
+
marginLeft="xs"
|
109
|
+
size={4}
|
110
|
+
text={" " + dateString(formattedDate)}
|
130
111
|
/>
|
131
112
|
)}
|
132
113
|
</>
|
133
114
|
)}
|
134
115
|
</Flex>
|
135
116
|
) : (
|
136
|
-
<Body dark={dark}
|
137
|
-
text={value}
|
138
|
-
/>
|
117
|
+
<Body dark={dark} text={value} />
|
139
118
|
)}
|
140
119
|
</div>
|
141
120
|
);
|
@@ -0,0 +1,120 @@
|
|
1
|
+
/* @flow */
|
2
|
+
|
3
|
+
import React from 'react'
|
4
|
+
import classnames from 'classnames'
|
5
|
+
|
6
|
+
import DateTime from '../pb_kit/dateTime'
|
7
|
+
import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
|
8
|
+
import { globalProps } from '../utilities/globalProps'
|
9
|
+
|
10
|
+
import Body from '../pb_body/_body'
|
11
|
+
import Caption from '../pb_caption/_caption'
|
12
|
+
import Icon from '../pb_icon/_icon'
|
13
|
+
import Title from '../pb_title/_title'
|
14
|
+
|
15
|
+
const dateString = (value: DateTime) => {
|
16
|
+
const month = value.toMonthNum()
|
17
|
+
const day = value.toDay()
|
18
|
+
|
19
|
+
return ` · ${month}/${day}`
|
20
|
+
}
|
21
|
+
|
22
|
+
type LogisticProps = {
|
23
|
+
aria?: object,
|
24
|
+
className?: string,
|
25
|
+
dark?: boolean,
|
26
|
+
data?: object,
|
27
|
+
date: string,
|
28
|
+
id?: string,
|
29
|
+
link?: string,
|
30
|
+
projectName?: string,
|
31
|
+
projectNumber?: number,
|
32
|
+
}
|
33
|
+
|
34
|
+
const Logistic = (props: LogisticProps) => {
|
35
|
+
const { aria = {},
|
36
|
+
className,
|
37
|
+
dark = false,
|
38
|
+
data = {},
|
39
|
+
date,
|
40
|
+
id,
|
41
|
+
link,
|
42
|
+
projectName,
|
43
|
+
projectNumber } = props
|
44
|
+
|
45
|
+
const ariaProps = buildAriaProps(aria)
|
46
|
+
const dataProps = buildDataProps(data)
|
47
|
+
const formattedDate = new DateTime({ value: date })
|
48
|
+
const classes = classnames(
|
49
|
+
buildCss('pb_logistic_kit', { dark }),
|
50
|
+
globalProps(props),
|
51
|
+
className
|
52
|
+
)
|
53
|
+
|
54
|
+
return (
|
55
|
+
<div
|
56
|
+
{...ariaProps}
|
57
|
+
{...dataProps}
|
58
|
+
className={classes}
|
59
|
+
id={id}
|
60
|
+
>
|
61
|
+
<Body color="light">
|
62
|
+
<Caption text="Project" />
|
63
|
+
<Icon
|
64
|
+
fixedWidth
|
65
|
+
icon="home"
|
66
|
+
/>
|
67
|
+
|
68
|
+
{` ${projectNumber}`}
|
69
|
+
|
70
|
+
<Choose>
|
71
|
+
<When condition={link}>
|
72
|
+
<a
|
73
|
+
className="pb_logistic_kit_links"
|
74
|
+
href={link}
|
75
|
+
>
|
76
|
+
<Choose>
|
77
|
+
<When condition={date}>
|
78
|
+
<Title
|
79
|
+
size={4}
|
80
|
+
tag="span"
|
81
|
+
text={' ' + projectName + dateString(formattedDate)}
|
82
|
+
/>
|
83
|
+
</When>
|
84
|
+
<Otherwise>
|
85
|
+
<Title
|
86
|
+
size={4}
|
87
|
+
tag="span"
|
88
|
+
text={' ' + projectName}
|
89
|
+
/>
|
90
|
+
</Otherwise>
|
91
|
+
</Choose>
|
92
|
+
</a>
|
93
|
+
</When>
|
94
|
+
<Otherwise>
|
95
|
+
<Choose>
|
96
|
+
<When condition={date}>
|
97
|
+
<Title
|
98
|
+
dark={dark}
|
99
|
+
size={4}
|
100
|
+
tag="span"
|
101
|
+
text={' ' + projectName + dateString(formattedDate)}
|
102
|
+
/>
|
103
|
+
</When>
|
104
|
+
<Otherwise>
|
105
|
+
<Title
|
106
|
+
dark={dark}
|
107
|
+
size={4}
|
108
|
+
tag="span"
|
109
|
+
text={' ' + projectName}
|
110
|
+
/>
|
111
|
+
</Otherwise>
|
112
|
+
</Choose>
|
113
|
+
</Otherwise>
|
114
|
+
</Choose>
|
115
|
+
</Body>
|
116
|
+
</div>
|
117
|
+
)
|
118
|
+
}
|
119
|
+
|
120
|
+
export default Logistic
|
@@ -25,7 +25,7 @@ type MessageProps = {
|
|
25
25
|
label?: string,
|
26
26
|
message: string,
|
27
27
|
timestamp?: string,
|
28
|
-
timestampObject?:
|
28
|
+
timestampObject?: string,
|
29
29
|
timezone?: string,
|
30
30
|
alignTimestamp?: string,
|
31
31
|
}
|
@@ -62,50 +62,50 @@ const Message = (props: MessageProps) => {
|
|
62
62
|
|
63
63
|
return (
|
64
64
|
<div
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
65
|
+
{...ariaProps}
|
66
|
+
{...dataProps}
|
67
|
+
className={classes}
|
68
|
+
id={id}
|
69
69
|
>
|
70
70
|
{shouldDisplayAvatar &&
|
71
71
|
<Avatar
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
72
|
+
imageUrl={avatarUrl}
|
73
|
+
name={avatarName}
|
74
|
+
size="xs"
|
75
|
+
status={avatarStatus}
|
76
76
|
/>
|
77
77
|
}
|
78
78
|
<div className="content_wrapper">
|
79
79
|
<Flex
|
80
|
-
|
81
|
-
|
80
|
+
justify={alignTimestamp === 'left' ? 'none' : 'between'}
|
81
|
+
orientation="row"
|
82
82
|
>
|
83
83
|
{label &&
|
84
84
|
<Title
|
85
|
-
|
86
|
-
|
87
|
-
|
85
|
+
className="message_title"
|
86
|
+
size={4}
|
87
|
+
text={label}
|
88
88
|
/>
|
89
89
|
}
|
90
90
|
<Timestamp
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
91
|
+
className={`pull-${alignTimestamp} ${timestampObject ? 'message_humanized_time' : null}`}
|
92
|
+
text={timestamp}
|
93
|
+
timestamp={''}
|
94
|
+
timezone={timezone}
|
95
95
|
/>
|
96
96
|
{timestampObject &&
|
97
97
|
<Timestamp
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
98
|
+
className={`pull-${alignTimestamp} message_timestamp`}
|
99
|
+
text={''}
|
100
|
+
timestamp={timestampObject}
|
101
|
+
timezone={timezone}
|
102
102
|
/>
|
103
103
|
}
|
104
104
|
</Flex>
|
105
105
|
{message &&
|
106
106
|
<Body
|
107
|
-
|
108
|
-
|
107
|
+
className="pb_message_body"
|
108
|
+
text={message}
|
109
109
|
/>
|
110
110
|
}
|
111
111
|
{children}
|
@@ -1,4 +1,5 @@
|
|
1
1
|
<%= content_tag(:div,
|
2
|
+
data: object.data,
|
2
3
|
aria: object.aria,
|
3
4
|
class: object.classnames) do %>
|
4
5
|
<% if object.label %>
|
@@ -23,7 +24,6 @@
|
|
23
24
|
disabled: object.disabled,
|
24
25
|
required: object.required,
|
25
26
|
multiple: object.multiple,
|
26
|
-
data: object.data,
|
27
27
|
onchange: object.onchange,
|
28
28
|
include_blank: object.include_blank,
|
29
29
|
)
|