playbook_ui 12.36.0 → 12.37.0.pre.alpha.PLAYaddingdatapropselectkit1071
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/index.js +2 -1
- data/app/pb_kits/playbook/pb_badge/docs/_badge_colors_swift.md +33 -0
- data/app/pb_kits/playbook/pb_badge/docs/_badge_default_swift.md +9 -0
- data/app/pb_kits/playbook/pb_badge/docs/_badge_notification_swift.md +9 -0
- data/app/pb_kits/playbook/pb_badge/docs/_badge_props_swift.md +6 -0
- data/app/pb_kits/playbook/pb_badge/docs/_badge_rounded_swift.md +9 -0
- data/app/pb_kits/playbook/pb_badge/docs/example.yml +7 -0
- data/app/pb_kits/playbook/pb_collapsible/_collapsible.tsx +15 -13
- data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleMain.tsx +24 -8
- data/app/pb_kits/playbook/pb_collapsible/collapsible_main.html.erb +1 -1
- data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_icons.jsx +15 -4
- data/app/pb_kits/playbook/pb_collapsible/docs/example.yml +1 -1
- data/app/pb_kits/playbook/pb_collapsible/useCollapsible.tsx +14 -0
- data/app/pb_kits/playbook/pb_date/_date.tsx +7 -8
- data/app/pb_kits/playbook/pb_date/docs/_date_alignment.jsx +2 -2
- data/app/pb_kits/playbook/pb_date/docs/_date_default.jsx +29 -5
- 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 +45 -31
- data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.tsx +5 -3
- data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.tsx +24 -21
- 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 +6 -8
- data/app/pb_kits/playbook/pb_kit/dateTime.ts +146 -63
- data/app/pb_kits/playbook/pb_label_value/_label_value.tsx +52 -31
- data/app/pb_kits/playbook/pb_message/_message.tsx +24 -24
- data/app/pb_kits/playbook/pb_nav/_collapsible_nav.scss +22 -1
- data/app/pb_kits/playbook/pb_nav/_item.tsx +26 -2
- data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav.jsx +59 -79
- data/app/pb_kits/playbook/pb_nav/docs/_collapsible_nav_custom_icons.jsx +4 -6
- data/app/pb_kits/playbook/pb_nav/docs/example.yml +1 -1
- data/app/pb_kits/playbook/pb_nav/item.rb +5 -1
- data/app/pb_kits/playbook/pb_pill/docs/_pill_default_swift.md +5 -0
- data/app/pb_kits/playbook/pb_pill/docs/_pill_props_swift.md +5 -0
- data/app/pb_kits/playbook/pb_pill/docs/_pill_variants_swift.md +10 -0
- data/app/pb_kits/playbook/pb_pill/docs/example.yml +5 -0
- data/app/pb_kits/playbook/pb_radio/docs/_radio_alignment_swift.md +16 -0
- data/app/pb_kits/playbook/pb_radio/docs/_radio_custom_swift.md +18 -0
- data/app/pb_kits/playbook/pb_radio/docs/_radio_default_swift.md +15 -0
- data/app/pb_kits/playbook/pb_radio/docs/_radio_error_swift.md +14 -0
- data/app/pb_kits/playbook/pb_radio/docs/_radio_orientation_swift.md +15 -0
- data/app/pb_kits/playbook/pb_radio/docs/_radio_padding_swift.md +31 -0
- data/app/pb_kits/playbook/pb_radio/docs/_radio_props_swift.md +10 -0
- data/app/pb_kits/playbook/pb_radio/docs/_radio_spacing_swift.md +36 -0
- data/app/pb_kits/playbook/pb_radio/docs/_radio_subtitle_swift.md +13 -0
- data/app/pb_kits/playbook/pb_radio/docs/example.yml +11 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_data_attributes.html.erb +24 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_data_attributes.md +1 -0
- data/app/pb_kits/playbook/pb_select/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_select/select.html.erb +1 -1
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_options.html.erb +12 -0
- data/app/pb_kits/playbook/pb_text_input/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_text_input/text_input.rb +1 -1
- data/app/pb_kits/playbook/pb_time/_time.tsx +9 -11
- data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.tsx +46 -49
- data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.tsx +4 -6
- data/app/pb_kits/playbook/pb_timestamp/_timestamp.tsx +11 -11
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_align_swift.md +45 -0
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default_swift.md +26 -0
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed_swift.md +25 -0
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_props_swift.md +10 -0
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones_swift.md +67 -0
- data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_swift.md +19 -0
- data/app/pb_kits/playbook/pb_timestamp/docs/example.yml +8 -0
- data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.tsx +8 -11
- data/dist/playbook-rails.js +7 -7
- data/lib/playbook/version.rb +2 -2
- metadata +34 -8
- data/app/pb_kits/playbook/pb_logistic/_logistic.jsx +0 -120
@@ -1,9 +1,9 @@
|
|
1
1
|
import React from "react";
|
2
2
|
import classnames from "classnames";
|
3
3
|
|
4
|
-
import DateTime from "../pb_kit/dateTime";
|
5
4
|
import { buildCss } from "../utilities/props";
|
6
5
|
import { globalProps, GlobalProps } from "../utilities/globalProps";
|
6
|
+
import DateTime from '../pb_kit/dateTime';
|
7
7
|
|
8
8
|
import Body from "../pb_body/_body";
|
9
9
|
import Caption from "../pb_caption/_caption";
|
@@ -13,7 +13,7 @@ type TimeProps = {
|
|
13
13
|
align?: "left" | "center" | "right";
|
14
14
|
className?: string | string[];
|
15
15
|
data?: string;
|
16
|
-
date:
|
16
|
+
date: Date;
|
17
17
|
dark?: boolean;
|
18
18
|
id?: string;
|
19
19
|
showIcon?: boolean;
|
@@ -41,8 +41,6 @@ const Time = (props: TimeProps) => {
|
|
41
41
|
className
|
42
42
|
);
|
43
43
|
|
44
|
-
const dateTimestamp = new DateTime({ value: date, zone: timeZone });
|
45
|
-
|
46
44
|
return (
|
47
45
|
<div className={classes}>
|
48
46
|
{showIcon && (
|
@@ -70,18 +68,18 @@ const Time = (props: TimeProps) => {
|
|
70
68
|
)
|
71
69
|
)}
|
72
70
|
|
73
|
-
<time dateTime={date}>
|
71
|
+
<time dateTime={date.toString()}>
|
74
72
|
<span>
|
75
73
|
{unstyled
|
76
74
|
? (
|
77
75
|
<>
|
78
76
|
<span>
|
79
|
-
{
|
77
|
+
{DateTime.toTimeWithMeridiem(date, timeZone)}
|
80
78
|
</span>
|
81
79
|
{" "}
|
82
80
|
{showTimezone && (
|
83
81
|
<span>
|
84
|
-
{
|
82
|
+
{DateTime.toTimeZone(date, timeZone)}
|
85
83
|
</span>
|
86
84
|
)}
|
87
85
|
</>
|
@@ -92,13 +90,13 @@ const Time = (props: TimeProps) => {
|
|
92
90
|
<Body
|
93
91
|
className="pb_time"
|
94
92
|
tag="span"
|
95
|
-
text={
|
93
|
+
text={DateTime.toTimeWithMeridiem(date, timeZone)}
|
96
94
|
/>{" "}
|
97
95
|
{showTimezone && (
|
98
96
|
<Body
|
99
97
|
color="light"
|
100
98
|
tag="span"
|
101
|
-
text={
|
99
|
+
text={DateTime.toTimeZone(date, timeZone)}
|
102
100
|
/>
|
103
101
|
)}
|
104
102
|
</>
|
@@ -108,13 +106,13 @@ const Time = (props: TimeProps) => {
|
|
108
106
|
<Caption
|
109
107
|
color="light"
|
110
108
|
tag="span"
|
111
|
-
text={
|
109
|
+
text={DateTime.toTimeWithMeridiem(date, timeZone)}
|
112
110
|
/>{" "}
|
113
111
|
{showTimezone && (
|
114
112
|
<Caption
|
115
113
|
color="light"
|
116
114
|
tag="span"
|
117
|
-
text={
|
115
|
+
text={DateTime.toTimeZone(date, timeZone)}
|
118
116
|
/>
|
119
117
|
)}
|
120
118
|
</>
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import React from 'react'
|
2
2
|
import classnames from 'classnames'
|
3
3
|
|
4
|
-
import DateTime from '../pb_kit/dateTime'
|
5
4
|
import { globalProps, GlobalProps } from '../utilities/globalProps'
|
6
5
|
import { buildAriaProps, buildDataProps } from '../utilities/props'
|
6
|
+
import DateTime from '../pb_kit/dateTime';
|
7
7
|
|
8
8
|
import Body from '../pb_body/_body'
|
9
9
|
import Caption from '../pb_caption/_caption'
|
@@ -19,23 +19,20 @@ type TimeRangeInlineProps = {
|
|
19
19
|
dark?: boolean,
|
20
20
|
icon?: boolean,
|
21
21
|
timezone?: boolean,
|
22
|
-
startTime:
|
23
|
-
endTime:
|
22
|
+
startTime: Date,
|
23
|
+
endTime: Date,
|
24
24
|
} & GlobalProps
|
25
25
|
|
26
|
-
const timezoneString = (dateValue:
|
27
|
-
|
28
|
-
return `${date.convertToTimezone()}`
|
26
|
+
const timezoneString = (dateValue: Date) => {
|
27
|
+
return `${DateTime.toTimeZone(dateValue)}`
|
29
28
|
}
|
30
29
|
|
31
|
-
const dateTimestamp = (dateValue:
|
32
|
-
|
33
|
-
return `${date.toHour()}:${date.toMinute()}${date.toMeridian()}`
|
30
|
+
const dateTimestamp = (dateValue: Date) => {
|
31
|
+
return `${DateTime.toHour(dateValue)}:${DateTime.toMinute(dateValue)}${DateTime.toMeridiem(dateValue)}`
|
34
32
|
}
|
35
33
|
|
36
|
-
const dateTimeIso = (dateValue:
|
37
|
-
|
38
|
-
return date.toIso()
|
34
|
+
const dateTimeIso = (dateValue: Date) => {
|
35
|
+
return DateTime.toIso(dateValue)
|
39
36
|
}
|
40
37
|
|
41
38
|
const TimeRangeInline = (props: TimeRangeInlineProps) => {
|
@@ -59,10 +56,10 @@ const TimeRangeInline = (props: TimeRangeInlineProps) => {
|
|
59
56
|
const separator = (
|
60
57
|
<Body color="light">
|
61
58
|
<Icon
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
59
|
+
className="pb_time_range_inline_arrow"
|
60
|
+
dark={dark}
|
61
|
+
fixedWidth
|
62
|
+
icon="long-arrow-right"
|
66
63
|
/>
|
67
64
|
</Body>
|
68
65
|
)
|
@@ -71,16 +68,16 @@ const TimeRangeInline = (props: TimeRangeInlineProps) => {
|
|
71
68
|
return (
|
72
69
|
icon &&
|
73
70
|
<Body
|
74
|
-
|
75
|
-
|
71
|
+
color="light"
|
72
|
+
tag="span"
|
76
73
|
>
|
77
74
|
<Icon
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
75
|
+
className="pb_time_range_inline_icon"
|
76
|
+
dark={dark}
|
77
|
+
fixedWidth
|
78
|
+
icon="clock"
|
79
|
+
size={size}
|
80
|
+
tag="span"
|
84
81
|
/>
|
85
82
|
</Body>
|
86
83
|
)
|
@@ -88,17 +85,17 @@ const TimeRangeInline = (props: TimeRangeInlineProps) => {
|
|
88
85
|
|
89
86
|
return (
|
90
87
|
<div
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
88
|
+
{...ariaProps}
|
89
|
+
{...dataProps}
|
90
|
+
className={classnames('pb_time_range_inline_kit_' + alignment, globalProps(props), className)}
|
91
|
+
id={id}
|
95
92
|
>
|
96
93
|
<div className="pb_time_range_inline_wrapper">
|
97
94
|
{size == 'xs' &&
|
98
95
|
<>
|
99
96
|
<Caption
|
100
|
-
|
101
|
-
|
97
|
+
dark={dark}
|
98
|
+
tag="span"
|
102
99
|
>
|
103
100
|
{iconContent()}
|
104
101
|
<time dateTime={dateTimeIso(startTime)}>
|
@@ -108,15 +105,15 @@ const TimeRangeInline = (props: TimeRangeInlineProps) => {
|
|
108
105
|
</time>
|
109
106
|
</Caption>
|
110
107
|
<Caption
|
111
|
-
|
112
|
-
|
113
|
-
|
108
|
+
className="pb_time_range_inline_arrow"
|
109
|
+
dark={dark}
|
110
|
+
tag="span"
|
114
111
|
>
|
115
112
|
{separator}
|
116
113
|
</Caption>
|
117
114
|
<Caption
|
118
|
-
|
119
|
-
|
115
|
+
dark={dark}
|
116
|
+
tag="span"
|
120
117
|
>
|
121
118
|
<time dateTime={dateTimeIso(endTime)}>
|
122
119
|
{` ${dateTimestamp(
|
@@ -126,9 +123,9 @@ const TimeRangeInline = (props: TimeRangeInlineProps) => {
|
|
126
123
|
</Caption>
|
127
124
|
{timezone &&
|
128
125
|
<Caption
|
129
|
-
|
130
|
-
|
131
|
-
|
126
|
+
className="pb_time_range_inline_timezone"
|
127
|
+
dark={dark}
|
128
|
+
tag="span"
|
132
129
|
>
|
133
130
|
{timezoneString(endTime)}
|
134
131
|
</Caption>
|
@@ -138,8 +135,8 @@ const TimeRangeInline = (props: TimeRangeInlineProps) => {
|
|
138
135
|
{size == 'sm' &&
|
139
136
|
<>
|
140
137
|
<Body
|
141
|
-
|
142
|
-
|
138
|
+
dark={dark}
|
139
|
+
tag="span"
|
143
140
|
>
|
144
141
|
{iconContent()}
|
145
142
|
<time dateTime={dateTimeIso(startTime)}>
|
@@ -149,15 +146,15 @@ const TimeRangeInline = (props: TimeRangeInlineProps) => {
|
|
149
146
|
</time>
|
150
147
|
</Body>
|
151
148
|
<Body
|
152
|
-
|
153
|
-
|
154
|
-
|
149
|
+
className="pb_time_range_inline_arrow"
|
150
|
+
dark={dark}
|
151
|
+
tag="span"
|
155
152
|
>
|
156
153
|
{separator}
|
157
154
|
</Body>
|
158
155
|
<Body
|
159
|
-
|
160
|
-
|
156
|
+
dark={dark}
|
157
|
+
tag="span"
|
161
158
|
>
|
162
159
|
<time dateTime={dateTimeIso(endTime)}>
|
163
160
|
{` ${dateTimestamp(
|
@@ -167,10 +164,10 @@ const TimeRangeInline = (props: TimeRangeInlineProps) => {
|
|
167
164
|
</Body>
|
168
165
|
{timezone &&
|
169
166
|
<Body
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
167
|
+
className="pb_time_range_inline_timezone"
|
168
|
+
color="light"
|
169
|
+
dark={dark}
|
170
|
+
tag="span"
|
174
171
|
>
|
175
172
|
{timezoneString(endTime)}
|
176
173
|
</Body>
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import React from 'react'
|
2
2
|
import classnames from 'classnames'
|
3
3
|
|
4
|
-
import DateTime from '../pb_kit/dateTime'
|
5
4
|
import { buildCss, buildDataProps } from '../utilities/props'
|
6
5
|
import { deprecatedProps, globalProps } from '../utilities/globalProps'
|
6
|
+
import DateTime from '../pb_kit/dateTime';
|
7
7
|
|
8
8
|
import Body from '../pb_body/_body'
|
9
9
|
import Caption from '../pb_caption/_caption'
|
@@ -13,7 +13,7 @@ type TimeStackedProps = {
|
|
13
13
|
className?: string | string[],
|
14
14
|
dark?: boolean,
|
15
15
|
data?: { [key: string]: string },
|
16
|
-
date?:
|
16
|
+
date?: Date,
|
17
17
|
id?: string,
|
18
18
|
time?: number | Date,
|
19
19
|
timeZone?: string,
|
@@ -39,8 +39,6 @@ const TimeStackedDefault = (props: TimeStackedProps): React.ReactElement => {
|
|
39
39
|
)
|
40
40
|
const dataProps = buildDataProps(data)
|
41
41
|
|
42
|
-
const dateTimestamp = new DateTime({ value: date ? date : new Date(time), zone: timeZone })
|
43
|
-
|
44
42
|
return (
|
45
43
|
<div
|
46
44
|
className={classes}
|
@@ -52,13 +50,13 @@ const TimeStackedDefault = (props: TimeStackedProps): React.ReactElement => {
|
|
52
50
|
dark={dark}
|
53
51
|
>
|
54
52
|
<time>
|
55
|
-
{
|
53
|
+
{DateTime.toTimeWithMeridiem(date ? date : new Date(time), timeZone)}
|
56
54
|
<Caption
|
57
55
|
className="pb_time_stacked"
|
58
56
|
color="light"
|
59
57
|
dark={dark}
|
60
58
|
tag="span"
|
61
|
-
text={
|
59
|
+
text={DateTime.toTimeZone(date ? date : new Date(time), timeZone)}
|
62
60
|
/>
|
63
61
|
</time>
|
64
62
|
</Body>
|
@@ -1,9 +1,10 @@
|
|
1
1
|
import React from 'react'
|
2
2
|
import classnames from 'classnames'
|
3
3
|
|
4
|
-
import DateTime from '../pb_kit/dateTime'
|
5
4
|
import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
|
6
5
|
import { globalProps } from '../utilities/globalProps'
|
6
|
+
import DateTime from '../pb_kit/dateTime';
|
7
|
+
|
7
8
|
|
8
9
|
import Caption from '../pb_caption/_caption'
|
9
10
|
|
@@ -14,7 +15,7 @@ type TimestampProps = {
|
|
14
15
|
dark?: boolean,
|
15
16
|
data?: string,
|
16
17
|
text: string,
|
17
|
-
timestamp: string,
|
18
|
+
timestamp: Date | string,
|
18
19
|
timezone: string,
|
19
20
|
id?: string,
|
20
21
|
showDate?: boolean,
|
@@ -32,8 +33,8 @@ const Timestamp = (props: TimestampProps): React.ReactElement => {
|
|
32
33
|
dark = false,
|
33
34
|
data = {},
|
34
35
|
text,
|
35
|
-
timestamp,
|
36
36
|
timezone,
|
37
|
+
timestamp,
|
37
38
|
showDate = true,
|
38
39
|
showUser = false,
|
39
40
|
hideUpdated = false,
|
@@ -53,26 +54,25 @@ const Timestamp = (props: TimestampProps): React.ReactElement => {
|
|
53
54
|
)
|
54
55
|
|
55
56
|
const currentYear = new Date().getFullYear().toString()
|
56
|
-
const
|
57
|
-
const dateDisplay = `${dateTimestamp.toMonth()} ${dateTimestamp.toDay()}`
|
57
|
+
const dateDisplay = `${DateTime.toMonth(timestamp, timezone)} ${DateTime.toDay(timestamp, timezone)}`
|
58
58
|
const shouldShowUser = showUser == true && text.length > 0
|
59
59
|
const shouldShowTimezone = showTimezone == true && timezone.length > 0
|
60
60
|
const updatedText = hideUpdated ? "" : "Last updated"
|
61
61
|
const userDisplay = shouldShowUser ? ` by ${text}` : ''
|
62
62
|
|
63
|
-
let timeDisplay = `${
|
63
|
+
let timeDisplay = `${DateTime.toHour(timestamp, timezone)}:${DateTime.toMinute(timestamp, timezone)}${DateTime.toMeridiem(timestamp, timezone)}`
|
64
64
|
|
65
65
|
const fullTimeDisplay = () => {
|
66
66
|
if (shouldShowTimezone) {
|
67
|
-
timeDisplay = `${timeDisplay} ${
|
67
|
+
timeDisplay = `${timeDisplay} ${DateTime.toTimeZone(timestamp, timezone)}`
|
68
68
|
}
|
69
69
|
return timeDisplay
|
70
70
|
}
|
71
71
|
|
72
72
|
const fullDateDisplay = () => {
|
73
|
-
let fullDisplay = `${
|
74
|
-
if (
|
75
|
-
fullDisplay = `${fullDisplay}, ${
|
73
|
+
let fullDisplay = `${DateTime.toMonth(timestamp, timezone)} ${DateTime.toDay(timestamp, timezone)}`
|
74
|
+
if (DateTime.toYear(timestamp, timezone).toString() !== currentYear) {
|
75
|
+
fullDisplay = `${fullDisplay}, ${DateTime.toYear(timestamp, timezone)}`
|
76
76
|
}
|
77
77
|
return `${fullDisplay} ${' \u00b7 '} ${fullTimeDisplay()}`
|
78
78
|
}
|
@@ -82,7 +82,7 @@ const Timestamp = (props: TimestampProps): React.ReactElement => {
|
|
82
82
|
}
|
83
83
|
|
84
84
|
const formatElapsedString = () => {
|
85
|
-
return `${updatedText} ${userDisplay} ${
|
85
|
+
return `${updatedText} ${userDisplay} ${DateTime.fromNow(timestamp)}`
|
86
86
|
}
|
87
87
|
|
88
88
|
const captionText = () => {
|
@@ -0,0 +1,45 @@
|
|
1
|
+
![timestamp-align](https://github.com/powerhome/playbook/assets/92755007/9107e699-218e-4a15-a0f9-b1a8f4710c37)
|
2
|
+
|
3
|
+
```swiftå
|
4
|
+
VStack(alignment: .leading, spacing: Spacing.small) {
|
5
|
+
Group {
|
6
|
+
PBTimestamp(
|
7
|
+
Date(),
|
8
|
+
showDate: false
|
9
|
+
)
|
10
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
11
|
+
PBTimestamp(Date())
|
12
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
13
|
+
PBTimestamp(Date().addingTimeInterval(addThreeYear))
|
14
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
15
|
+
PBTimestamp(Date().addingTimeInterval(subOneYear))
|
16
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
17
|
+
}
|
18
|
+
Group {
|
19
|
+
PBTimestamp(
|
20
|
+
Date(),
|
21
|
+
showDate: false
|
22
|
+
)
|
23
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .center)
|
24
|
+
PBTimestamp(Date())
|
25
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .center)
|
26
|
+
PBTimestamp(Date().addingTimeInterval(addThreeYear))
|
27
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .center)
|
28
|
+
PBTimestamp(Date().addingTimeInterval(subOneYear))
|
29
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .center)
|
30
|
+
}
|
31
|
+
Group {
|
32
|
+
PBTimestamp(
|
33
|
+
Date(),
|
34
|
+
showDate: false
|
35
|
+
)
|
36
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .trailing)
|
37
|
+
PBTimestamp(Date())
|
38
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .trailing)
|
39
|
+
PBTimestamp(Date().addingTimeInterval(addThreeYear))
|
40
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .trailing)
|
41
|
+
PBTimestamp(Date().addingTimeInterval(subOneYear))
|
42
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .trailing)
|
43
|
+
}
|
44
|
+
}
|
45
|
+
```
|
@@ -0,0 +1,26 @@
|
|
1
|
+
![timestamp-default](https://github.com/powerhome/playbook/assets/92755007/064c6a98-4bdd-4160-8f4b-589233762c80)
|
2
|
+
|
3
|
+
```swift
|
4
|
+
VStack(alignment: .leading, spacing: Spacing.small) {
|
5
|
+
PBTimestamp(
|
6
|
+
Date(),
|
7
|
+
showDate: false
|
8
|
+
)
|
9
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
10
|
+
|
11
|
+
PBTimestamp(
|
12
|
+
Date()
|
13
|
+
)
|
14
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
15
|
+
|
16
|
+
PBTimestamp(
|
17
|
+
Date().addingTimeInterval(addThreeYear)
|
18
|
+
)
|
19
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
20
|
+
|
21
|
+
PBTimestamp(
|
22
|
+
Date().addingTimeInterval(subOneYear)
|
23
|
+
)
|
24
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
25
|
+
}
|
26
|
+
```
|
@@ -0,0 +1,25 @@
|
|
1
|
+
![timestamp-elapsed](https://github.com/powerhome/playbook/assets/92755007/bb10a951-b536-41cc-aa6c-b343e826af20)
|
2
|
+
|
3
|
+
```swift
|
4
|
+
VStack(alignment: .leading, spacing: Spacing.small) {
|
5
|
+
PBTimestamp(
|
6
|
+
Date().addingTimeInterval(-10),
|
7
|
+
showUser: true,
|
8
|
+
text: "Maricris Nanota",
|
9
|
+
variant: .elapsed
|
10
|
+
)
|
11
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
12
|
+
|
13
|
+
PBTimestamp(
|
14
|
+
Date().addingTimeInterval(-36000),
|
15
|
+
variant: .elapsed
|
16
|
+
)
|
17
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
18
|
+
|
19
|
+
PBTimestamp(
|
20
|
+
Date().addingTimeInterval(-36000),
|
21
|
+
variant: .hideUserElapsed
|
22
|
+
)
|
23
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
24
|
+
}
|
25
|
+
```
|
@@ -0,0 +1,10 @@
|
|
1
|
+
### Props
|
2
|
+
| Name | Type | Description | Default | Values |
|
3
|
+
| --- | ----------- | --------- | --------- | --------- |
|
4
|
+
| **amPmStyle** | `AmPmStyle` | Displays shortened or full version of "am" and "pm" | `.short` | `.short` `.full` |
|
5
|
+
| **showDate** | `Bool` | Displays date | `true` | |
|
6
|
+
| **showTimeZone** | `Bool` | Displays time zone | `false` | |
|
7
|
+
| **showUser** | `Bool` | Displays user's name | `false` | |
|
8
|
+
| **text** | `String` | Specifies which user to display | `nil` | |
|
9
|
+
| **timeZone** | `String` | Specifies which time zone to display | `nil` | |
|
10
|
+
| **variant** | `Variant` | Specifies copy for last upadted | `.standard` | `.elapsed` `.standard` `.updated` `.hideUserElapsed` |
|
@@ -0,0 +1,67 @@
|
|
1
|
+
![timestamp-timezones](https://github.com/powerhome/playbook/assets/92755007/119f0838-e912-473b-83de-626db1fd0d61)
|
2
|
+
|
3
|
+
```swift
|
4
|
+
VStack(alignment: .leading, spacing: Spacing.small) {
|
5
|
+
Group {
|
6
|
+
PBTimestamp(
|
7
|
+
Date(),
|
8
|
+
showDate: false,
|
9
|
+
showTimeZone: true,
|
10
|
+
timeZone: "America/New_York"
|
11
|
+
)
|
12
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
13
|
+
|
14
|
+
PBTimestamp(
|
15
|
+
Date(),
|
16
|
+
showTimeZone: true,
|
17
|
+
timeZone: "America/New_York"
|
18
|
+
)
|
19
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
20
|
+
|
21
|
+
PBTimestamp(
|
22
|
+
Date().addingTimeInterval(addThreeYear),
|
23
|
+
showTimeZone: true,
|
24
|
+
timeZone: "America/New_York"
|
25
|
+
)
|
26
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
27
|
+
|
28
|
+
PBTimestamp(
|
29
|
+
Date().addingTimeInterval(subOneYear),
|
30
|
+
showTimeZone: true,
|
31
|
+
timeZone: "America/New_York"
|
32
|
+
)
|
33
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
34
|
+
}
|
35
|
+
|
36
|
+
Group {
|
37
|
+
PBTimestamp(
|
38
|
+
Date(),
|
39
|
+
showDate: false,
|
40
|
+
showTimeZone: true,
|
41
|
+
timeZone: "Asia/Hong_Kong"
|
42
|
+
)
|
43
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
44
|
+
|
45
|
+
PBTimestamp(
|
46
|
+
Date(),
|
47
|
+
showTimeZone: true,
|
48
|
+
timeZone: "Asia/Hong_Kong"
|
49
|
+
)
|
50
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
51
|
+
|
52
|
+
PBTimestamp(
|
53
|
+
Date().addingTimeInterval(addThreeYear),
|
54
|
+
showTimeZone: true,
|
55
|
+
timeZone: "Asia/Hong_Kong"
|
56
|
+
)
|
57
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
58
|
+
|
59
|
+
PBTimestamp(
|
60
|
+
Date().addingTimeInterval(subOneYear),
|
61
|
+
showTimeZone: true,
|
62
|
+
timeZone: "Asia/Hong_Kong"
|
63
|
+
)
|
64
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
65
|
+
}
|
66
|
+
}
|
67
|
+
```
|
@@ -0,0 +1,19 @@
|
|
1
|
+
![timestamp-updated](https://github.com/powerhome/playbook/assets/92755007/14717880-c584-4413-9d9b-c569392595b7)
|
2
|
+
|
3
|
+
```swift
|
4
|
+
VStack(alignment: .leading, spacing: Spacing.small) {
|
5
|
+
PBTimestamp(
|
6
|
+
Date().addingTimeInterval(-12),
|
7
|
+
showUser: true,
|
8
|
+
text: "Maricris Nanota",
|
9
|
+
variant: .updated
|
10
|
+
)
|
11
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
12
|
+
|
13
|
+
PBTimestamp(
|
14
|
+
Date().addingTimeInterval(-12),
|
15
|
+
variant: .updated
|
16
|
+
)
|
17
|
+
.frame(minWidth: minWidth, maxWidth: .infinity, alignment: .leading)
|
18
|
+
}
|
19
|
+
```
|
@@ -13,3 +13,11 @@ examples:
|
|
13
13
|
- timestamp_timezones: Timezones
|
14
14
|
- timestamp_updated: Last Updated by
|
15
15
|
- timestamp_elapsed: Time Ago
|
16
|
+
|
17
|
+
swift:
|
18
|
+
- timestamp_default_swift: Default
|
19
|
+
- timestamp_align_swift: Alignments
|
20
|
+
- timestamp_timezones_swift: Timezones
|
21
|
+
- timestamp_updated_swift: Last Updated by
|
22
|
+
- timestamp_elapsed_swift: Time Ago
|
23
|
+
- timestamp_props_swift: ""
|
@@ -7,8 +7,7 @@ import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
|
|
7
7
|
|
8
8
|
import Caption from '../pb_caption/_caption'
|
9
9
|
import Title from '../pb_title/_title'
|
10
|
-
|
11
|
-
import DateTime from '../pb_kit/dateTime'
|
10
|
+
import DateTime from '../pb_kit/dateTime';
|
12
11
|
|
13
12
|
type WeekdayStackedProps = {
|
14
13
|
align?: "left" | "center" | "right",
|
@@ -22,22 +21,20 @@ type WeekdayStackedProps = {
|
|
22
21
|
compact?: boolean,
|
23
22
|
}
|
24
23
|
|
25
|
-
const getDayOfWeek = (value: Date
|
26
|
-
const dateTime = new DateTime({ value })
|
24
|
+
const getDayOfWeek = (value: Date, compact: boolean) => {
|
27
25
|
if (compact) {
|
28
|
-
return
|
26
|
+
return DateTime.toDayAbbr(value)
|
29
27
|
} else {
|
30
|
-
return
|
28
|
+
return DateTime.toWeekday(value)
|
31
29
|
}
|
32
30
|
}
|
33
31
|
|
34
|
-
const getFormattedDate = (value: Date
|
35
|
-
const dateTime = new DateTime({ value })
|
32
|
+
const getFormattedDate = (value: Date, variant: "day_only" | "month_day" | "expanded") => {
|
36
33
|
if (variant === 'day_only') {
|
37
|
-
return
|
34
|
+
return DateTime.toDay(value).toString()
|
38
35
|
} else {
|
39
|
-
const format = variant === 'expanded' ? '
|
40
|
-
return
|
36
|
+
const format = variant === 'expanded' ? 'expanded' : 'month_day'
|
37
|
+
return DateTime.toCustomFormat(value, format)
|
41
38
|
}
|
42
39
|
}
|
43
40
|
|