playbook_ui 14.25.0.pre.rc.3 → 14.26.0.pre.rc.0
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_picker/_date_picker.tsx +19 -0
- data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +1 -0
- data/app/pb_kits/playbook/pb_flex/_flex.tsx +9 -6
- data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.html.erb +12 -1
- data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.jsx +26 -1
- data/app/pb_kits/playbook/pb_flex/docs/_flex_gap_rails.md +11 -0
- data/app/pb_kits/playbook/pb_flex/docs/_flex_gap_react.md +11 -0
- data/app/pb_kits/playbook/pb_flex/flex.rb +6 -12
- data/app/pb_kits/playbook/pb_icon/_icon.scss +4 -0
- data/app/pb_kits/playbook/pb_text_input/text_input.rb +15 -0
- data/app/pb_kits/playbook/utilities/_gap.scss +12 -24
- data/app/pb_kits/playbook/utilities/globalPropNames.mjs +2 -0
- data/app/pb_kits/playbook/utilities/globalProps.ts +28 -4
- data/dist/chunks/{_line_graph-qk_BN_J0.js → _line_graph-CiVc-Cod.js} +1 -1
- data/dist/chunks/_typeahead-BQnvz-Ks.js +6 -0
- data/dist/chunks/{_weekday_stacked-CBQhTZg3.js → _weekday_stacked-CX4YxAHz.js} +2 -2
- data/dist/chunks/vendor.js +1 -1
- data/dist/playbook-doc.js +1 -1
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/classnames.rb +2 -0
- data/lib/playbook/spacing.rb +53 -1
- data/lib/playbook/version.rb +2 -2
- metadata +7 -6
- data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.md +0 -9
- data/dist/chunks/_typeahead-ZLTFtAoW.js +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8e4bae5dd3cbf683140cd33b7a4f2e6db8dffa4197e3749bd0159b4d687829f
|
4
|
+
data.tar.gz: b8e7c6165a4154a76b5740fc87b7c0271f6aca9881b022f1a5e02215174e4c82
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c287535600ec0e5f4bb4f8a056ea32b0bddd2be0557d111183ac9745ef2641cf8aa62f433a5d07a17255258d357914ee712e4d9af96cc4dccad7be37edfe9b9
|
7
|
+
data.tar.gz: ada34e0bf004e1b63410f8f2355787b02c67617f208aaf9c396f93158baa73fc289fd81c8bec471d9802a57eeb380cd02733ee869084198b7db5f1f598247d55
|
@@ -4,6 +4,7 @@ import classnames from 'classnames'
|
|
4
4
|
import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
|
5
5
|
import { deprecatedProps, globalProps, GlobalProps } from '../utilities/globalProps'
|
6
6
|
import { getAllIcons } from "../utilities/icons/allicons"
|
7
|
+
import { camelToSnakeCase } from '../utilities/text'
|
7
8
|
|
8
9
|
import datePickerHelper from './date_picker_helper'
|
9
10
|
import Icon from '../pb_icon/_icon'
|
@@ -114,6 +115,20 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
|
|
114
115
|
const inputAriaProps = buildAriaProps(inputAria)
|
115
116
|
const inputDataProps = buildDataProps(inputData)
|
116
117
|
|
118
|
+
// Convert cursor prop to CSS-style format to apply to input tag below
|
119
|
+
const getCursorStyle = (cursor?: string): string => {
|
120
|
+
// If input is disabled, always use 'not-allowed'
|
121
|
+
if (disableInput) return 'not-allowed'
|
122
|
+
|
123
|
+
// If cursor prop is provided, convert it to styling format
|
124
|
+
if (cursor) {
|
125
|
+
return camelToSnakeCase(cursor).replace(/_/g, '-')
|
126
|
+
}
|
127
|
+
|
128
|
+
// Default to 'pointer'
|
129
|
+
return 'pointer'
|
130
|
+
}
|
131
|
+
|
117
132
|
useEffect(() => {
|
118
133
|
datePickerHelper({
|
119
134
|
allowInput,
|
@@ -149,6 +164,7 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
|
|
149
164
|
required: false,
|
150
165
|
}, scrollContainer)
|
151
166
|
}, initializeOnce ? [] : undefined)
|
167
|
+
|
152
168
|
const filteredProps = {...props}
|
153
169
|
if (filteredProps.marginBottom === undefined) {
|
154
170
|
filteredProps.marginBottom = "sm"
|
@@ -163,6 +179,7 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
|
|
163
179
|
error ? 'error' : null,
|
164
180
|
className
|
165
181
|
)
|
182
|
+
|
166
183
|
const iconWrapperClass = () => {
|
167
184
|
let base = 'cal_icon_wrapper'
|
168
185
|
if (dark) {
|
@@ -176,6 +193,7 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
|
|
176
193
|
}
|
177
194
|
return base
|
178
195
|
}
|
196
|
+
|
179
197
|
const angleDown = getAllIcons()["angleDown"].icon as unknown as { [key: string]: SVGElement }
|
180
198
|
|
181
199
|
return (
|
@@ -206,6 +224,7 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
|
|
206
224
|
name={name}
|
207
225
|
onChange={inputOnChange}
|
208
226
|
placeholder={placeholder}
|
227
|
+
style={{ cursor: getCursorStyle(filteredProps.cursor) }}
|
209
228
|
value={inputValue}
|
210
229
|
/>
|
211
230
|
|
@@ -4,6 +4,9 @@ import { buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
|
|
4
4
|
import { GlobalProps, globalProps, globalInlineProps } from '../utilities/globalProps'
|
5
5
|
import { GenericObject, Sizes } from '../types'
|
6
6
|
|
7
|
+
type SizeType = Sizes | "none"
|
8
|
+
type SizeResponsiveType = { [key: string]: SizeType }
|
9
|
+
|
7
10
|
type FlexProps = {
|
8
11
|
children: React.ReactChild[] | React.ReactNode,
|
9
12
|
className?: string,
|
@@ -18,9 +21,9 @@ type FlexProps = {
|
|
18
21
|
reverse?: boolean,
|
19
22
|
vertical?: "top" | "center" | "bottom" | "stretch" | "baseline" | "none",
|
20
23
|
align?: "start" | "center" | "end" | "stretch" | "baseline" | "none",
|
21
|
-
gap?:
|
22
|
-
rowGap?:
|
23
|
-
columnGap?:
|
24
|
+
gap?: SizeType | SizeResponsiveType,
|
25
|
+
rowGap?: SizeType | SizeResponsiveType,
|
26
|
+
columnGap?: SizeType | SizeResponsiveType,
|
24
27
|
wrap?: boolean,
|
25
28
|
alignSelf?: "start" | "end" | "center" | "stretch" | "none"
|
26
29
|
} & GlobalProps
|
@@ -53,9 +56,9 @@ const Flex = (props: FlexProps): React.ReactElement => {
|
|
53
56
|
const alignClass = align !== 'none' ? `align_items_${align}` : `align_items_${vertical}`
|
54
57
|
const inlineClass = inline === true ? 'inline' : ''
|
55
58
|
const spacingClass = spacing !== undefined ? `spacing_${spacing}` : ''
|
56
|
-
const gapClass = gap !== 'none' ? `gap_${gap}` : ''
|
57
|
-
const rowGapClass = rowGap !== 'none' ? `rowGap_${rowGap}` : ''
|
58
|
-
const columnGapClass = columnGap !== 'none' ? `columnGap_${columnGap}` : ''
|
59
|
+
const gapClass = (gap !== 'none' && typeof gap === 'object') ? `gap_${gap}` : ''
|
60
|
+
const rowGapClass = (rowGap !== 'none' && typeof rowGap === 'object') ? `rowGap_${rowGap}` : ''
|
61
|
+
const columnGapClass = (columnGap !== 'none' && typeof columnGap === 'object') ? `columnGap_${columnGap}` : ''
|
59
62
|
const wrapClass = wrap === true ? 'wrap' : ''
|
60
63
|
const reverseClass = reverse === true ? 'reverse' : ''
|
61
64
|
const alignSelfClass = alignSelf !== 'none' ? `align_self_${alignSelf}` : ''
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<%= pb_rails("title", props: {size: 4, text: "
|
1
|
+
<%= pb_rails("title", props: {size: 4, text: "Gap"}) %>
|
2
2
|
<br/>
|
3
3
|
<div class="flex-doc-example">
|
4
4
|
<%= pb_rails("flex", props:{ gap: "xxs", wrap:true}) do %>
|
@@ -31,3 +31,14 @@
|
|
31
31
|
<%= pb_rails("flex/flex_item") do %>4<% end %>
|
32
32
|
<% end %>
|
33
33
|
</div>
|
34
|
+
|
35
|
+
<br/><br/>
|
36
|
+
<%= pb_rails("title", props: {size: 4, text: "Responsive"}) %>
|
37
|
+
<br/>
|
38
|
+
<div class="flex-doc-example">
|
39
|
+
<%= pb_rails("flex", props: { gap: { xs: "none", sm: "sm", md: "md", lg: "lg", xl: "xl" }, wrap: true }) do %>
|
40
|
+
<% 40.times do |i| %>
|
41
|
+
<%= pb_rails("flex/flex_item") do %> <%=i%> <% end %>
|
42
|
+
<% end %>
|
43
|
+
<% end %>
|
44
|
+
</div>
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import React from 'react'
|
2
2
|
import Flex from '../../pb_flex/_flex'
|
3
3
|
import FlexItem from '../../pb_flex/_flex_item'
|
4
|
+
import Title from '../../pb_title/_title'
|
4
5
|
|
5
6
|
const FlexGap = (props) => {
|
6
7
|
const count = () => {
|
@@ -13,6 +14,8 @@ const FlexGap = (props) => {
|
|
13
14
|
|
14
15
|
return (
|
15
16
|
<>
|
17
|
+
<Title size={4}>Gap</Title>
|
18
|
+
<br />
|
16
19
|
<div className="flex-doc-example">
|
17
20
|
<Flex
|
18
21
|
gap="xxs"
|
@@ -27,8 +30,10 @@ const FlexGap = (props) => {
|
|
27
30
|
</Flex>
|
28
31
|
</div>
|
29
32
|
|
30
|
-
<br />
|
33
|
+
<br /><br />
|
31
34
|
|
35
|
+
<Title size={4}>Column Gap</Title>
|
36
|
+
<br />
|
32
37
|
<div className="flex-doc-example">
|
33
38
|
<Flex
|
34
39
|
columnGap="lg"
|
@@ -48,6 +53,9 @@ const FlexGap = (props) => {
|
|
48
53
|
</FlexItem>
|
49
54
|
</Flex>
|
50
55
|
</div>
|
56
|
+
<br /><br />
|
57
|
+
|
58
|
+
<Title size={4}>Row Gap</Title>
|
51
59
|
<br />
|
52
60
|
<div className="flex-doc-example">
|
53
61
|
<Flex
|
@@ -69,6 +77,23 @@ const FlexGap = (props) => {
|
|
69
77
|
</FlexItem>
|
70
78
|
</Flex>
|
71
79
|
</div>
|
80
|
+
|
81
|
+
<br /><br />
|
82
|
+
<Title size={4}>Responsive</Title>
|
83
|
+
<br />
|
84
|
+
<div className="flex-doc-example">
|
85
|
+
<Flex
|
86
|
+
gap={{ xs: "none", sm: "sm", md: "md", lg: "lg", xl: "xl" }}
|
87
|
+
wrap
|
88
|
+
{...props}
|
89
|
+
>
|
90
|
+
{count().map((v, key) => (
|
91
|
+
<FlexItem key={key}>
|
92
|
+
{v}
|
93
|
+
</FlexItem>
|
94
|
+
))}
|
95
|
+
</Flex>
|
96
|
+
</div>
|
72
97
|
</>
|
73
98
|
)
|
74
99
|
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
##### Prop
|
2
|
+
|
3
|
+
`gap` | `row_gap` | `column_gap` | **Type**: String | Hash | **Values**: xxs | xs | sm | md | lg | xl | none
|
4
|
+
|
5
|
+
Setting the gap prop sets the `row_gap` and the `column_gap` props to the same size and creates equal space within a flex container.
|
6
|
+
|
7
|
+
Setting the `row_gap` prop creates space between rows in a flex container.
|
8
|
+
|
9
|
+
Setting the `column_gap` prop creates space between columns in a flex container.
|
10
|
+
|
11
|
+
You can also set responsive values by passing a hash with device sizes and values.
|
@@ -0,0 +1,11 @@
|
|
1
|
+
##### Prop
|
2
|
+
|
3
|
+
`gap` | `rowGap` | `columnGap` | **Type**: String | Object | **Values**: xxs | xs | sm | md | lg | xl | none
|
4
|
+
|
5
|
+
Setting the gap prop sets the `rowGap` and the `columnGap` props to the same size and creates equal space within a flex container.
|
6
|
+
|
7
|
+
Setting the `rowGap` prop creates space between rows in a flex container.
|
8
|
+
|
9
|
+
Setting the `columnGap` prop creates space between columns in a flex container.
|
10
|
+
|
11
|
+
You can also set responsive values by passing an object with device sizes and values.
|
@@ -24,17 +24,11 @@ module Playbook
|
|
24
24
|
default: "none",
|
25
25
|
deprecated: true
|
26
26
|
|
27
|
-
prop :gap
|
28
|
-
values: %w[xxs xs sm md lg xl none],
|
29
|
-
default: "none"
|
27
|
+
prop :gap
|
30
28
|
|
31
|
-
prop :row_gap
|
32
|
-
values: %w[xxs xs sm md lg xl none],
|
33
|
-
default: "none"
|
29
|
+
prop :row_gap
|
34
30
|
|
35
|
-
prop :column_gap
|
36
|
-
values: %w[xxs xs sm md lg xl none],
|
37
|
-
default: "none"
|
31
|
+
prop :column_gap
|
38
32
|
|
39
33
|
prop :reverse, type: Playbook::Props::Boolean,
|
40
34
|
default: false
|
@@ -133,7 +127,7 @@ module Playbook
|
|
133
127
|
end
|
134
128
|
|
135
129
|
def gap_class
|
136
|
-
if gap == "none"
|
130
|
+
if gap == "none" || gap.nil? || gap.is_a?(Hash)
|
137
131
|
nil
|
138
132
|
else
|
139
133
|
"gap_#{gap}"
|
@@ -141,7 +135,7 @@ module Playbook
|
|
141
135
|
end
|
142
136
|
|
143
137
|
def row_gap_class
|
144
|
-
if row_gap == "none"
|
138
|
+
if row_gap == "none" || row_gap.nil? || row_gap.is_a?(Hash)
|
145
139
|
nil
|
146
140
|
else
|
147
141
|
"rowGap_#{row_gap}"
|
@@ -149,7 +143,7 @@ module Playbook
|
|
149
143
|
end
|
150
144
|
|
151
145
|
def column_gap_class
|
152
|
-
if column_gap == "none"
|
146
|
+
if column_gap == "none" || column_gap.nil? || column_gap.is_a?(Hash)
|
153
147
|
nil
|
154
148
|
else
|
155
149
|
"columnGap_#{column_gap}"
|
@@ -77,6 +77,7 @@ module Playbook
|
|
77
77
|
name: mask.present? ? "" : name,
|
78
78
|
pattern: validation_pattern || mask_pattern,
|
79
79
|
placeholder: placeholder,
|
80
|
+
style: "cursor: #{cursor_style}",
|
80
81
|
required: required,
|
81
82
|
type: type,
|
82
83
|
value: value,
|
@@ -84,6 +85,20 @@ module Playbook
|
|
84
85
|
}.merge(input_options)
|
85
86
|
end
|
86
87
|
|
88
|
+
def cursor_style
|
89
|
+
# If input is disabled, always use 'not-allowed'
|
90
|
+
return "not-allowed" if disabled
|
91
|
+
|
92
|
+
# If cursor prop is provided, convert it to kebab-case
|
93
|
+
if cursor.present?
|
94
|
+
# Convert camelCase (ex. notAllowed) to kebab-case (ex. not-allowed)
|
95
|
+
cursor.to_s.gsub(/([a-z\d])([A-Z])/, '\1-\2').downcase
|
96
|
+
else
|
97
|
+
# Default to 'pointer'
|
98
|
+
"pointer"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
87
102
|
def validation_message
|
88
103
|
validation[:message] || ""
|
89
104
|
end
|
@@ -1,29 +1,17 @@
|
|
1
1
|
@import "spacing";
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
$gap_values: (
|
4
|
+
none: 0,
|
5
|
+
xxs: $space_xxs,
|
6
|
+
xs: $space_xs,
|
7
|
+
sm: $space_sm,
|
8
|
+
md: $space_md,
|
9
|
+
lg: $space_lg,
|
10
|
+
xl: $space_xl,
|
11
|
+
);
|
6
12
|
|
7
|
-
|
8
|
-
gap: $space_xxs;
|
9
|
-
}
|
13
|
+
@include global_props_responsive_css($gap_values, 'gap', 'gap');
|
10
14
|
|
11
|
-
|
12
|
-
gap: $space_xs;
|
13
|
-
}
|
15
|
+
@include global_props_responsive_css($gap_values, 'column_gap', 'column-gap');
|
14
16
|
|
15
|
-
|
16
|
-
gap: $space_sm;
|
17
|
-
}
|
18
|
-
|
19
|
-
.gap_md {
|
20
|
-
gap: $space_md;
|
21
|
-
}
|
22
|
-
|
23
|
-
.gap_lg {
|
24
|
-
gap: $space_lg;
|
25
|
-
}
|
26
|
-
|
27
|
-
.gap_xl {
|
28
|
-
gap: $space_xl;
|
29
|
-
}
|
17
|
+
@include global_props_responsive_css($gap_values, 'row_gap', 'row-gap');
|
@@ -112,6 +112,14 @@ type Gap = {
|
|
112
112
|
gap?: string,
|
113
113
|
}
|
114
114
|
|
115
|
+
type ColumnGap = {
|
116
|
+
columnGap?: string,
|
117
|
+
}
|
118
|
+
|
119
|
+
type RowGap = {
|
120
|
+
rowGap?: string,
|
121
|
+
}
|
122
|
+
|
115
123
|
type NumberSpacing = {
|
116
124
|
numberSpacing?: "tabular",
|
117
125
|
}
|
@@ -200,7 +208,7 @@ type MinHeight = {
|
|
200
208
|
export type GlobalProps = AlignContent & AlignItems & AlignSelf &
|
201
209
|
BorderRadius & Cursor & Dark & Display & DisplaySizes & Flex & FlexDirection &
|
202
210
|
FlexGrow & FlexShrink & FlexWrap & JustifyContent & JustifySelf &
|
203
|
-
LineHeight & Margin & Width & MinWidth & MaxWidth & Gap & NumberSpacing & Order & Overflow & Padding &
|
211
|
+
LineHeight & Margin & Width & MinWidth & MaxWidth & Gap & ColumnGap & RowGap & NumberSpacing & Order & Overflow & Padding &
|
204
212
|
Position & Shadow & TextAlign & Truncate & VerticalAlign & ZIndex & { hover?: string } & Top & Right & Bottom & Left & Height & MaxHeight & MinHeight;
|
205
213
|
|
206
214
|
const getResponsivePropClasses = (prop: {[key: string]: string}, classPrefix: string) => {
|
@@ -377,9 +385,25 @@ const PROP_CATEGORIES: {[key:string]: (props: {[key: string]: any}) => string} =
|
|
377
385
|
return css.trimEnd()
|
378
386
|
},
|
379
387
|
gapProps: ({ gap }: Gap) => {
|
380
|
-
|
381
|
-
|
382
|
-
|
388
|
+
if (typeof gap === 'object') {
|
389
|
+
return getResponsivePropClasses(gap, 'gap')
|
390
|
+
} else {
|
391
|
+
return gap ? `gap_${gap}` : ''
|
392
|
+
}
|
393
|
+
},
|
394
|
+
columnGapProps: ({ columnGap }: ColumnGap) => {
|
395
|
+
if (typeof columnGap === 'object') {
|
396
|
+
return getResponsivePropClasses(columnGap, 'column_gap')
|
397
|
+
} else {
|
398
|
+
return columnGap ? `column_gap_${columnGap}` : ''
|
399
|
+
}
|
400
|
+
},
|
401
|
+
rowGapProps: ({ rowGap }: RowGap) => {
|
402
|
+
if (typeof rowGap === 'object') {
|
403
|
+
return getResponsivePropClasses(rowGap, 'row_gap')
|
404
|
+
} else {
|
405
|
+
return rowGap ? `row_gap_${rowGap}` : ''
|
406
|
+
}
|
383
407
|
},
|
384
408
|
minHeightProps: ({ minHeight }: MinHeight) => {
|
385
409
|
const heightValues = ["auto", "xs", "sm", "md", "lg", "xl", "xxl", "xxxl"]
|
@@ -1 +1 @@
|
|
1
|
-
import{jsx,Fragment,jsxs}from"react/jsx-runtime";import{useState,useEffect}from"react";import{b as buildAriaProps,c as buildDataProps,d as buildHtmlProps,H as HighchartsReact,e as Highcharts,f as classnames,g as globalProps,h as HighchartsMore,S as SolidGauge,i as buildCss}from"./_typeahead-ZLTFtAoW.js";import{c as colors,h as highchartsTheme,m as merge,a as highchartsDarkTheme,t as typography}from"./lib-CY5ZPzic.js";const mapColors=array=>{const regex=/(data)\-[1-8]/;const newArray=array.map((item=>regex.test(item)?`${colors[`data_${item[item.length-1]}`]}`:item));return newArray};const BarGraph=({aria:aria={},data:data={},align:align="center",axisTitle:axisTitle,dark:dark=false,chartData:chartData,className:className="pb_bar_graph",colors:colors2,htmlOptions:htmlOptions={},customOptions:customOptions={},axisFormat:axisFormat,id:id,pointStart:pointStart,stacking:stacking,subTitle:subTitle,type:type="column",title:title="Title",xAxisCategories:xAxisCategories,yAxisMin:yAxisMin,yAxisMax:yAxisMax,legend:legend=false,toggleLegendClick:toggleLegendClick=true,height:height,layout:layout="horizontal",verticalAlign:verticalAlign="bottom",x:x=0,y:y=0,...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();const staticOptions={title:{text:title},chart:{height:height,type:type},subtitle:{text:subTitle},yAxis:[{labels:{format:typeof axisFormat==="string"?axisFormat:axisFormat&&axisFormat[0]?axisFormat[0].format:""},min:yAxisMin,max:yAxisMax,opposite:false,title:{text:Array.isArray(axisTitle)?axisTitle.length>0?axisTitle[0].name:null:axisTitle},plotLines:typeof yAxisMin!=="undefined"&&yAxisMin!==null?[]:[{value:0,zIndex:10,color:"#E4E8F0"}]}],xAxis:{categories:xAxisCategories},legend:{enabled:legend,align:align,verticalAlign:verticalAlign,layout:layout,x:x,y:y},colors:colors2!==void 0&&colors2.length>0?mapColors(colors2):highchartsTheme.colors,plotOptions:{series:{stacking:stacking,pointStart:pointStart,borderWidth:stacking?0:"",events:{},dataLabels:{enabled:false}}},series:chartData,credits:false};if(Array.isArray(axisTitle)&&axisTitle.length>1&&axisTitle[1].name){staticOptions.yAxis.push({labels:{format:typeof axisFormat==="string"?axisFormat:axisFormat[1].format},min:yAxisMin,max:yAxisMax,opposite:true,title:{text:axisTitle[1].name},plotLines:typeof yAxisMin!=="undefined"&&yAxisMin!==null?[]:[{value:0,zIndex:10,color:"#E4E8F0"}]})}if(!toggleLegendClick){staticOptions.plotOptions.series.events={legendItemClick:()=>false}}const filteredProps={...props};delete filteredProps.verticalAlign;const[options,setOptions]=useState({});useEffect((()=>{setOptions(merge(staticOptions,customOptions))}),[chartData]);return jsx(HighchartsReact,{containerProps:{className:classnames(globalProps(filteredProps),className),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})};const alignBlockElement=event=>{const itemToMove=document.querySelector(`#wrapper-circle-chart-${event.target.renderTo.id} .pb-circle-chart-block`);const chartContainer=document.querySelector(`#${event.target.renderTo.id}`);if(itemToMove!==null&&chartContainer!==null){itemToMove.style.height=`${event.target.chartHeight}px`;itemToMove.style.width=`${event.target.chartWidth}px`;if(chartContainer.firstChild!==null){chartContainer.firstChild.before(itemToMove)}}};const CircleChart=({align:align="center",aria:aria={},rounded:rounded=false,borderColor:borderColor=(rounded?null:""),borderWidth:borderWidth=(rounded?20:null),chartData:chartData,children:children,className:className,colors:colors2=[],customOptions:customOptions={},dark:dark=false,data:data={},dataLabelHtml:dataLabelHtml="<div>{point.name}</div>",dataLabels:dataLabels=false,height:height,htmlOptions:htmlOptions={},id:id,innerSize:innerSize="md",legend:legend=false,maxPointSize:maxPointSize=null,minPointSize:minPointSize=null,startAngle:startAngle=null,style:style="pie",title:title,tooltipHtml:tooltipHtml,useHtml:useHtml=false,zMin:zMin=null,layout:layout="horizontal",verticalAlign:verticalAlign="bottom",x:x=0,y:y=0,...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);HighchartsMore(Highcharts);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();Highcharts.setOptions({tooltip:{headerFormat:null,pointFormat:tooltipHtml?tooltipHtml:'<span style="font-weight: bold; color:{point.color};">●</span>{point.name}: <b>{point.y}</b>',useHTML:useHtml}});const innerSizes={sm:"35%",md:"50%",lg:"85%",none:"0%"};const innerSizeFormat=size=>innerSizes[size];const filteredProps={...props};delete filteredProps.verticalAlign;const[options,setOptions]=useState({});useEffect((()=>{const formattedChartData=chartData.map((obj=>{obj.y=obj.value;delete obj.value;return obj}));const staticOptions={title:{text:title},chart:{height:height,type:style,events:{render:event=>alignBlockElement(event),redraw:event=>alignBlockElement(event)}},legend:{align:align,verticalAlign:verticalAlign,layout:layout,x:x,y:y},plotOptions:{pie:{colors:colors2.length>0?mapColors(colors2):highchartsTheme.colors,dataLabels:{enabled:dataLabels,connectorShape:"straight",connectorWidth:3,format:dataLabelHtml},showInLegend:legend}},series:[{minPointSize:minPointSize,maxPointSize:maxPointSize,innerSize:borderWidth==20?"100%":innerSizeFormat(innerSize),data:formattedChartData,zMin:zMin,startAngle:startAngle,borderWidth:borderWidth,borderColor:borderColor}],credits:false};setOptions(merge(staticOptions,customOptions))}),[chartData]);return jsx(Fragment,{children:children?jsxs("div",{id:`wrapper-circle-chart-${id}`,children:[jsx(HighchartsReact,{containerProps:{className:classnames("pb_circle_chart",globalProps(filteredProps)),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options}),jsx("div",{className:"pb-circle-chart-block",children:children})]}):jsx(HighchartsReact,{containerProps:{className:classnames("pb_circle_chart",globalProps(filteredProps)),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})})};const Gauge=({aria:aria={},chartData:chartData,customOptions:customOptions={},dark:dark=false,data:data={},disableAnimation:disableAnimation=false,fullCircle:fullCircle=false,height:height=null,htmlOptions:htmlOptions={},id:id,max:max=100,min:min=0,prefix:prefix="",showLabels:showLabels=false,style:style="solidgauge",suffix:suffix="",title:title="",tooltipHtml:tooltipHtml='<span style="font-weight: bold; color:{point.color};">●</span>{point.name}: <b>{point.y}</b>',colors:colors$1=[],minorTickInterval:minorTickInterval=null,circumference:circumference=(fullCircle?[0,360]:[-100,100]),...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);HighchartsMore(Highcharts);SolidGauge(Highcharts);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();Highcharts.setOptions({tooltip:{pointFormat:tooltipHtml,followPointer:true}});const css=buildCss({pb_gauge_kit:true});const[options,setOptions]=useState({});useEffect((()=>{const formattedChartData=chartData.map((obj=>{obj.y=obj.value;delete obj.value;return obj}));const staticOptions={chart:{events:{load(){setTimeout(this.reflow.bind(this),0)}},type:style,height:height},title:{text:title},yAxis:{min:min,max:max,lineWidth:0,tickWidth:0,minorTickInterval:minorTickInterval,tickAmount:2,tickPositions:[min,max],labels:{y:26,enabled:showLabels}},credits:false,series:[{data:formattedChartData}],pane:{center:["50%","50%"],size:"90%",startAngle:circumference[0],endAngle:circumference[1],background:{borderWidth:20,innerRadius:"90%",outerRadius:"90%",shape:"arc",className:"gauge-pane"}},colors:colors$1!==void 0&&colors$1.length>0?mapColors(colors$1):highchartsTheme.colors,plotOptions:{series:{animation:!disableAnimation},solidgauge:{borderColor:colors$1!==void 0&&colors$1.length===1?mapColors(colors$1).join():highchartsTheme.colors[0],borderWidth:20,radius:90,innerRadius:"90%",dataLabels:{borderWidth:0,color:colors.text_lt_default,enabled:true,format:`<span class="prefix${dark?" dark":""}">${prefix}</span><span class="fix${dark?" dark":""}">{y:,f}</span><span class="suffix${dark?" dark":""}">${suffix}</span>`,style:{fontFamily:typography.font_family_base,fontWeight:typography.regular,fontSize:typography.heading_2},y:-26}}}};setOptions(merge(staticOptions,customOptions));if(document.querySelector(".prefix")){document.querySelectorAll(".prefix").forEach((prefix2=>{prefix2.setAttribute("y","28")}));document.querySelectorAll(".fix").forEach((fix=>fix.setAttribute("y","38")))}}),[chartData]);return jsx(HighchartsReact,{containerProps:{className:classnames(css,globalProps(props)),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})};const LineGraph=({aria:aria={},data:data={},align:align="center",className:className="pb_bar_graph",customOptions:customOptions={},dark:dark=false,gradient:gradient=false,type:type="line",htmlOptions:htmlOptions={},id:id,legend:legend=false,toggleLegendClick:toggleLegendClick=true,layout:layout="horizontal",verticalAlign:verticalAlign="bottom",x:x=0,y:y=0,axisTitle:axisTitle,xAxisCategories:xAxisCategories,yAxisMin:yAxisMin,yAxisMax:yAxisMax,chartData:chartData,pointStart:pointStart,subTitle:subTitle,title:title,height:height,colors:colors2=[],...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();const staticOptions={title:{text:title},chart:{height:height,type:type},subtitle:{text:subTitle},yAxis:{min:yAxisMin,max:yAxisMax,title:{text:axisTitle}},xAxis:{categories:xAxisCategories},legend:{enabled:legend,align:align,verticalAlign:verticalAlign,layout:layout,x:x,y:y},colors:colors2!==void 0&&colors2.length>0?mapColors(colors2):highchartsTheme.colors,plotOptions:{series:{pointStart:pointStart,events:{},dataLabels:{enabled:false}}},series:chartData,credits:false};if(!toggleLegendClick){staticOptions.plotOptions.series.events={legendItemClick:()=>false}}const filteredProps={...props};delete filteredProps.verticalAlign;const[options,setOptions]=useState({});useEffect((()=>{setOptions(merge(staticOptions,customOptions))}),[chartData]);return jsx(HighchartsReact,{containerProps:{className:classnames(globalProps(filteredProps),className),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})};export{BarGraph as B,CircleChart as C,Gauge as G,LineGraph as L};
|
1
|
+
import{jsx,Fragment,jsxs}from"react/jsx-runtime";import{useState,useEffect}from"react";import{b as buildAriaProps,c as buildDataProps,d as buildHtmlProps,H as HighchartsReact,e as Highcharts,f as classnames,g as globalProps,h as HighchartsMore,S as SolidGauge,i as buildCss}from"./_typeahead-BQnvz-Ks.js";import{c as colors,h as highchartsTheme,m as merge,a as highchartsDarkTheme,t as typography}from"./lib-CY5ZPzic.js";const mapColors=array=>{const regex=/(data)\-[1-8]/;const newArray=array.map((item=>regex.test(item)?`${colors[`data_${item[item.length-1]}`]}`:item));return newArray};const BarGraph=({aria:aria={},data:data={},align:align="center",axisTitle:axisTitle,dark:dark=false,chartData:chartData,className:className="pb_bar_graph",colors:colors2,htmlOptions:htmlOptions={},customOptions:customOptions={},axisFormat:axisFormat,id:id,pointStart:pointStart,stacking:stacking,subTitle:subTitle,type:type="column",title:title="Title",xAxisCategories:xAxisCategories,yAxisMin:yAxisMin,yAxisMax:yAxisMax,legend:legend=false,toggleLegendClick:toggleLegendClick=true,height:height,layout:layout="horizontal",verticalAlign:verticalAlign="bottom",x:x=0,y:y=0,...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();const staticOptions={title:{text:title},chart:{height:height,type:type},subtitle:{text:subTitle},yAxis:[{labels:{format:typeof axisFormat==="string"?axisFormat:axisFormat&&axisFormat[0]?axisFormat[0].format:""},min:yAxisMin,max:yAxisMax,opposite:false,title:{text:Array.isArray(axisTitle)?axisTitle.length>0?axisTitle[0].name:null:axisTitle},plotLines:typeof yAxisMin!=="undefined"&&yAxisMin!==null?[]:[{value:0,zIndex:10,color:"#E4E8F0"}]}],xAxis:{categories:xAxisCategories},legend:{enabled:legend,align:align,verticalAlign:verticalAlign,layout:layout,x:x,y:y},colors:colors2!==void 0&&colors2.length>0?mapColors(colors2):highchartsTheme.colors,plotOptions:{series:{stacking:stacking,pointStart:pointStart,borderWidth:stacking?0:"",events:{},dataLabels:{enabled:false}}},series:chartData,credits:false};if(Array.isArray(axisTitle)&&axisTitle.length>1&&axisTitle[1].name){staticOptions.yAxis.push({labels:{format:typeof axisFormat==="string"?axisFormat:axisFormat[1].format},min:yAxisMin,max:yAxisMax,opposite:true,title:{text:axisTitle[1].name},plotLines:typeof yAxisMin!=="undefined"&&yAxisMin!==null?[]:[{value:0,zIndex:10,color:"#E4E8F0"}]})}if(!toggleLegendClick){staticOptions.plotOptions.series.events={legendItemClick:()=>false}}const filteredProps={...props};delete filteredProps.verticalAlign;const[options,setOptions]=useState({});useEffect((()=>{setOptions(merge(staticOptions,customOptions))}),[chartData]);return jsx(HighchartsReact,{containerProps:{className:classnames(globalProps(filteredProps),className),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})};const alignBlockElement=event=>{const itemToMove=document.querySelector(`#wrapper-circle-chart-${event.target.renderTo.id} .pb-circle-chart-block`);const chartContainer=document.querySelector(`#${event.target.renderTo.id}`);if(itemToMove!==null&&chartContainer!==null){itemToMove.style.height=`${event.target.chartHeight}px`;itemToMove.style.width=`${event.target.chartWidth}px`;if(chartContainer.firstChild!==null){chartContainer.firstChild.before(itemToMove)}}};const CircleChart=({align:align="center",aria:aria={},rounded:rounded=false,borderColor:borderColor=(rounded?null:""),borderWidth:borderWidth=(rounded?20:null),chartData:chartData,children:children,className:className,colors:colors2=[],customOptions:customOptions={},dark:dark=false,data:data={},dataLabelHtml:dataLabelHtml="<div>{point.name}</div>",dataLabels:dataLabels=false,height:height,htmlOptions:htmlOptions={},id:id,innerSize:innerSize="md",legend:legend=false,maxPointSize:maxPointSize=null,minPointSize:minPointSize=null,startAngle:startAngle=null,style:style="pie",title:title,tooltipHtml:tooltipHtml,useHtml:useHtml=false,zMin:zMin=null,layout:layout="horizontal",verticalAlign:verticalAlign="bottom",x:x=0,y:y=0,...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);HighchartsMore(Highcharts);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();Highcharts.setOptions({tooltip:{headerFormat:null,pointFormat:tooltipHtml?tooltipHtml:'<span style="font-weight: bold; color:{point.color};">●</span>{point.name}: <b>{point.y}</b>',useHTML:useHtml}});const innerSizes={sm:"35%",md:"50%",lg:"85%",none:"0%"};const innerSizeFormat=size=>innerSizes[size];const filteredProps={...props};delete filteredProps.verticalAlign;const[options,setOptions]=useState({});useEffect((()=>{const formattedChartData=chartData.map((obj=>{obj.y=obj.value;delete obj.value;return obj}));const staticOptions={title:{text:title},chart:{height:height,type:style,events:{render:event=>alignBlockElement(event),redraw:event=>alignBlockElement(event)}},legend:{align:align,verticalAlign:verticalAlign,layout:layout,x:x,y:y},plotOptions:{pie:{colors:colors2.length>0?mapColors(colors2):highchartsTheme.colors,dataLabels:{enabled:dataLabels,connectorShape:"straight",connectorWidth:3,format:dataLabelHtml},showInLegend:legend}},series:[{minPointSize:minPointSize,maxPointSize:maxPointSize,innerSize:borderWidth==20?"100%":innerSizeFormat(innerSize),data:formattedChartData,zMin:zMin,startAngle:startAngle,borderWidth:borderWidth,borderColor:borderColor}],credits:false};setOptions(merge(staticOptions,customOptions))}),[chartData]);return jsx(Fragment,{children:children?jsxs("div",{id:`wrapper-circle-chart-${id}`,children:[jsx(HighchartsReact,{containerProps:{className:classnames("pb_circle_chart",globalProps(filteredProps)),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options}),jsx("div",{className:"pb-circle-chart-block",children:children})]}):jsx(HighchartsReact,{containerProps:{className:classnames("pb_circle_chart",globalProps(filteredProps)),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})})};const Gauge=({aria:aria={},chartData:chartData,customOptions:customOptions={},dark:dark=false,data:data={},disableAnimation:disableAnimation=false,fullCircle:fullCircle=false,height:height=null,htmlOptions:htmlOptions={},id:id,max:max=100,min:min=0,prefix:prefix="",showLabels:showLabels=false,style:style="solidgauge",suffix:suffix="",title:title="",tooltipHtml:tooltipHtml='<span style="font-weight: bold; color:{point.color};">●</span>{point.name}: <b>{point.y}</b>',colors:colors$1=[],minorTickInterval:minorTickInterval=null,circumference:circumference=(fullCircle?[0,360]:[-100,100]),...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);HighchartsMore(Highcharts);SolidGauge(Highcharts);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();Highcharts.setOptions({tooltip:{pointFormat:tooltipHtml,followPointer:true}});const css=buildCss({pb_gauge_kit:true});const[options,setOptions]=useState({});useEffect((()=>{const formattedChartData=chartData.map((obj=>{obj.y=obj.value;delete obj.value;return obj}));const staticOptions={chart:{events:{load(){setTimeout(this.reflow.bind(this),0)}},type:style,height:height},title:{text:title},yAxis:{min:min,max:max,lineWidth:0,tickWidth:0,minorTickInterval:minorTickInterval,tickAmount:2,tickPositions:[min,max],labels:{y:26,enabled:showLabels}},credits:false,series:[{data:formattedChartData}],pane:{center:["50%","50%"],size:"90%",startAngle:circumference[0],endAngle:circumference[1],background:{borderWidth:20,innerRadius:"90%",outerRadius:"90%",shape:"arc",className:"gauge-pane"}},colors:colors$1!==void 0&&colors$1.length>0?mapColors(colors$1):highchartsTheme.colors,plotOptions:{series:{animation:!disableAnimation},solidgauge:{borderColor:colors$1!==void 0&&colors$1.length===1?mapColors(colors$1).join():highchartsTheme.colors[0],borderWidth:20,radius:90,innerRadius:"90%",dataLabels:{borderWidth:0,color:colors.text_lt_default,enabled:true,format:`<span class="prefix${dark?" dark":""}">${prefix}</span><span class="fix${dark?" dark":""}">{y:,f}</span><span class="suffix${dark?" dark":""}">${suffix}</span>`,style:{fontFamily:typography.font_family_base,fontWeight:typography.regular,fontSize:typography.heading_2},y:-26}}}};setOptions(merge(staticOptions,customOptions));if(document.querySelector(".prefix")){document.querySelectorAll(".prefix").forEach((prefix2=>{prefix2.setAttribute("y","28")}));document.querySelectorAll(".fix").forEach((fix=>fix.setAttribute("y","38")))}}),[chartData]);return jsx(HighchartsReact,{containerProps:{className:classnames(css,globalProps(props)),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})};const LineGraph=({aria:aria={},data:data={},align:align="center",className:className="pb_bar_graph",customOptions:customOptions={},dark:dark=false,gradient:gradient=false,type:type="line",htmlOptions:htmlOptions={},id:id,legend:legend=false,toggleLegendClick:toggleLegendClick=true,layout:layout="horizontal",verticalAlign:verticalAlign="bottom",x:x=0,y:y=0,axisTitle:axisTitle,xAxisCategories:xAxisCategories,yAxisMin:yAxisMin,yAxisMax:yAxisMax,chartData:chartData,pointStart:pointStart,subTitle:subTitle,title:title,height:height,colors:colors2=[],...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();const staticOptions={title:{text:title},chart:{height:height,type:type},subtitle:{text:subTitle},yAxis:{min:yAxisMin,max:yAxisMax,title:{text:axisTitle}},xAxis:{categories:xAxisCategories},legend:{enabled:legend,align:align,verticalAlign:verticalAlign,layout:layout,x:x,y:y},colors:colors2!==void 0&&colors2.length>0?mapColors(colors2):highchartsTheme.colors,plotOptions:{series:{pointStart:pointStart,events:{},dataLabels:{enabled:false}}},series:chartData,credits:false};if(!toggleLegendClick){staticOptions.plotOptions.series.events={legendItemClick:()=>false}}const filteredProps={...props};delete filteredProps.verticalAlign;const[options,setOptions]=useState({});useEffect((()=>{setOptions(merge(staticOptions,customOptions))}),[chartData]);return jsx(HighchartsReact,{containerProps:{className:classnames(globalProps(filteredProps),className),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})};export{BarGraph as B,CircleChart as C,Gauge as G,LineGraph as L};
|