playbook_ui 11.12.1.pre.alpha.charts1 → 11.12.1.pre.alpha.passphrase1

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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/index.js +1 -0
  3. data/app/pb_kits/playbook/pb_bar_graph/_bar_graph.jsx +111 -0
  4. data/app/pb_kits/playbook/pb_circle_chart/_circle_chart.jsx +151 -0
  5. data/app/pb_kits/playbook/pb_circle_chart/circle_chart.html.erb +21 -9
  6. data/app/pb_kits/playbook/pb_circle_chart/circle_chart.rb +47 -7
  7. data/app/pb_kits/playbook/pb_dashboard/{pbChartsDarkTheme.ts → pbChartsDarkTheme.js} +21 -6
  8. data/app/pb_kits/playbook/pb_dashboard/{pbChartsLightTheme.ts → pbChartsLightTheme.js} +21 -6
  9. data/app/pb_kits/playbook/pb_gauge/_gauge.jsx +112 -0
  10. data/app/pb_kits/playbook/pb_gauge/_gauge.scss +0 -4
  11. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_complex.html.erb +1 -1
  12. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_complex.jsx +8 -8
  13. data/app/pb_kits/playbook/pb_gauge/gauge.html.erb +11 -1
  14. data/app/pb_kits/playbook/pb_gauge/gauge.rb +8 -3
  15. data/app/pb_kits/playbook/pb_line_graph/_line_graph.jsx +113 -0
  16. data/app/pb_kits/playbook/pb_passphrase/_passphrase.jsx +56 -97
  17. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_breached.html.erb +145 -1
  18. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_breached.jsx +127 -3
  19. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_breached.md +11 -2
  20. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_common.html.erb +136 -0
  21. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_common.jsx +90 -8
  22. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_common.md +5 -0
  23. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_confirmation.html.erb +51 -0
  24. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_confirmation.jsx +39 -0
  25. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_default.html.erb +0 -2
  26. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_default.jsx +6 -20
  27. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_input_props.html.erb +2 -2
  28. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_input_props.jsx +1 -1
  29. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_meter_settings.html.erb +318 -5
  30. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_meter_settings.jsx +134 -48
  31. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_meter_settings.md +11 -5
  32. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_strength_change.html.erb +123 -0
  33. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_strength_change.jsx +96 -20
  34. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_strength_change.md +6 -2
  35. data/app/pb_kits/playbook/pb_passphrase/docs/example.yml +4 -0
  36. data/app/pb_kits/playbook/pb_passphrase/docs/index.js +1 -0
  37. data/app/pb_kits/playbook/pb_passphrase/passphrase.html.erb +1 -1
  38. data/app/pb_kits/playbook/pb_passphrase/passphrase.rb +5 -9
  39. data/app/pb_kits/playbook/pb_passphrase/passphrase.test.jsx +0 -47
  40. data/app/pb_kits/playbook/pb_treemap_chart/_treemap_chart.jsx +79 -0
  41. data/app/pb_kits/playbook/pb_treemap_chart/docs/_treemap_chart_tooltip.jsx +1 -1
  42. data/app/pb_kits/playbook/playbook-rails-react-bindings.js +0 -4
  43. data/app/pb_kits/playbook/playbook-rails.js +4 -0
  44. data/app/pb_kits/playbook/plugins/pb_chart.js +322 -0
  45. data/lib/playbook/version.rb +1 -1
  46. metadata +15 -16
  47. data/app/pb_kits/playbook/pb_bar_graph/_bar_graph.tsx +0 -145
  48. data/app/pb_kits/playbook/pb_circle_chart/ChartsTypes.ts +0 -2
  49. data/app/pb_kits/playbook/pb_circle_chart/_circle_chart.tsx +0 -216
  50. data/app/pb_kits/playbook/pb_dashboard/pbChartsColorsHelper.ts +0 -16
  51. data/app/pb_kits/playbook/pb_dashboard/themeTypes.ts +0 -16
  52. data/app/pb_kits/playbook/pb_gauge/_gauge.tsx +0 -213
  53. data/app/pb_kits/playbook/pb_line_graph/_line_graph.tsx +0 -148
  54. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_default.md +0 -1
  55. data/app/pb_kits/playbook/pb_passphrase/passwordStrength.js +0 -55
  56. data/app/pb_kits/playbook/pb_passphrase/useHaveIBeenPwned.js +0 -52
  57. data/app/pb_kits/playbook/pb_passphrase/useZxcvbn.js +0 -58
  58. data/app/pb_kits/playbook/pb_treemap_chart/_treemap_chart.tsx +0 -111
@@ -1,216 +0,0 @@
1
- import React, { useEffect, useRef, useState } from "react";
2
- import classnames from "classnames";
3
- import HighchartsReact from "highcharts-react-official";
4
-
5
- import Highcharts from "highcharts";
6
-
7
- import { highchartsTheme } from "../pb_dashboard/pbChartsLightTheme";
8
- import { highchartsDarkTheme } from "../pb_dashboard/pbChartsDarkTheme";
9
- import mapColors from "../pb_dashboard/pbChartsColorsHelper";
10
- import { globalProps } from "../utilities/globalProps";
11
- import { buildAriaProps, buildDataProps } from "../utilities/props";
12
-
13
- type CircleChartProps = {
14
- align?: "left" | "right" | "center";
15
- aria: { [key: string]: string };
16
- chartData?: [];
17
- children?: Node;
18
- className?: string;
19
- colors?: string[];
20
- dark?: Boolean;
21
- data?: Object;
22
- dataLabelHtml?: string;
23
- dataLabels?: boolean;
24
- height?: string;
25
- id?: string;
26
- innerSize?: "sm" | "md" | "lg" | "none";
27
- legend?: boolean;
28
- maxPointSize?: number;
29
- minPointSize?: number;
30
- rounded?: boolean;
31
- startAngle?: number;
32
- style?: string;
33
- title?: string;
34
- useHtml?: boolean;
35
- zMin?: number;
36
- layout?: "horizontal" | "vertical" | "proximate";
37
- verticalAlign?: "top" | "middle" | "bottom";
38
- x?: number;
39
- y?: number;
40
- borderColor?: string;
41
- borderWidth?: number;
42
- };
43
-
44
- // Adjust Circle Chart Block Kit Dimensions to Match the Chart for Centering
45
- const alignBlockElement = (event: any) => {
46
- const itemToMove = document.querySelector(
47
- `#wrapper-circle-chart-${event.target.renderTo.id} .pb-circle-chart-block`
48
- ) as HTMLElement;
49
- const chartContainer = document.querySelector(`#${event.target.renderTo.id}`);
50
- if (itemToMove !== null) {
51
- itemToMove.style.height = `${event.target.chartHeight}px`;
52
- itemToMove.style.width = `${event.target.chartWidth}px`;
53
- chartContainer.firstChild.before(itemToMove);
54
- }
55
- };
56
-
57
- const CircleChart = ({
58
- align = "center",
59
- aria = {},
60
- rounded = false,
61
- borderColor = rounded ? null : "",
62
- borderWidth = rounded ? 20 : null,
63
- chartData,
64
- children,
65
- className,
66
- colors = [],
67
- dark = false,
68
- data = {},
69
- dataLabelHtml = "<div>{point.name}</div>",
70
- dataLabels = false,
71
- height,
72
- id,
73
- innerSize = "md",
74
- legend = false,
75
- maxPointSize = null,
76
- minPointSize = null,
77
- startAngle = null,
78
- style = "pie",
79
- title,
80
- useHtml = false,
81
- zMin = null,
82
- layout = "horizontal",
83
- verticalAlign = "bottom",
84
- x = 0,
85
- y = 0,
86
- ...props
87
- }: CircleChartProps) => {
88
- const ariaProps = buildAriaProps(aria);
89
- const dataProps = buildDataProps(data);
90
- const setupTheme = () => {
91
- dark
92
- ? Highcharts.setOptions(highchartsDarkTheme)
93
- : Highcharts.setOptions(highchartsTheme);
94
- };
95
- setupTheme();
96
-
97
- Highcharts.setOptions({
98
- tooltip: {
99
- headerFormat: null,
100
- pointFormat:
101
- '<span style="font-weight: bold; color:{point.color};">●</span>{point.name}: ' +
102
- "<b>{point.y}</b>",
103
- useHTML: useHtml,
104
- },
105
- });
106
-
107
- const innerSizes = { sm: "35%", md: "50%", lg: "85%", none: "0%" };
108
- const innerSizeFormat = (size: "sm" | "md" | "lg" | "none") =>
109
- innerSizes[size];
110
-
111
- const componentDidMount = useRef(false);
112
-
113
- const [options, setOptions] = useState({});
114
-
115
- useEffect(() => {
116
- const formattedChartData = chartData.map((obj: any) => {
117
- obj.y = obj.value;
118
- delete obj.value;
119
- return obj;
120
- });
121
-
122
- const staticOptions = {
123
- title: {
124
- text: title,
125
- },
126
- chart: {
127
- height: height,
128
- type: style,
129
- events: {
130
- render: (event: any) => alignBlockElement(event),
131
- redraw: (event: any) => alignBlockElement(event),
132
- },
133
- },
134
-
135
- legend: {
136
- align: align,
137
- verticalAlign: verticalAlign,
138
- layout: layout,
139
- x: x,
140
- y: y,
141
- },
142
- plotOptions: {
143
- pie: {
144
- colors:
145
- colors.length > 0 ? mapColors(colors) : highchartsTheme.colors,
146
- dataLabels: {
147
- enabled: dataLabels,
148
- connectorShape: "straight",
149
- connectorWidth: 3,
150
- format: dataLabelHtml,
151
- },
152
- showInLegend: legend,
153
- },
154
- },
155
- series: [
156
- {
157
- minPointSize: minPointSize,
158
- maxPointSize: maxPointSize,
159
- innerSize: borderWidth == 20 ? "100%" : innerSizeFormat(innerSize),
160
- data: formattedChartData,
161
- zMin: zMin,
162
- startAngle: startAngle,
163
- borderWidth: borderWidth,
164
- borderColor: borderColor,
165
- },
166
- ],
167
- credits: false,
168
- };
169
- setOptions({ ...staticOptions });
170
- if (componentDidMount.current) {
171
- Highcharts.charts.forEach((chart: any) => {
172
- if (chart && chart.renderTo.id === id) {
173
- const updatedValueArray = chartData.map((obj: any) => {
174
- return obj.value;
175
- });
176
- chart.series[0].setData(updatedValueArray);
177
- }
178
- });
179
- } else {
180
- componentDidMount.current = true;
181
- }
182
- }, [chartData]);
183
-
184
- return (
185
- <>
186
- {children ? (
187
- <div id={`wrapper-circle-chart-${id}`}>
188
- <HighchartsReact
189
- containerProps={{
190
- className: classnames("pb_circle_chart", globalProps(props)),
191
- id: id,
192
- ...ariaProps,
193
- ...dataProps,
194
- }}
195
- highcharts={Highcharts}
196
- options={options}
197
- />
198
- <div className="pb-circle-chart-block">{children}</div>
199
- </div>
200
- ) : (
201
- <HighchartsReact
202
- containerProps={{
203
- className: classnames("pb_circle_chart", globalProps(props)),
204
- id: id,
205
- ...ariaProps,
206
- ...dataProps,
207
- }}
208
- highcharts={Highcharts}
209
- options={options}
210
- />
211
- )}
212
- </>
213
- );
214
- };
215
-
216
- export default CircleChart;
@@ -1,16 +0,0 @@
1
- import colors from "../tokens/exports/_colors.scss";
2
-
3
-
4
- // Map Data Color String Props to our SCSS Variables
5
- const mapColors = (array: string[]) => {
6
- const regex = /(data)\-[1-8]/; //eslint-disable-line
7
-
8
- const newArray = array.map((item) => {
9
- return regex.test(item)
10
- ? `${colors[`data_${item[item.length - 1]}`]}`
11
- : item;
12
- });
13
- return newArray;
14
- };
15
-
16
- export default mapColors
@@ -1,16 +0,0 @@
1
- export type ThemeProps = {
2
- lang?: {[key: string]: string}
3
- credits?: {[key: string]: boolean}
4
- colors?: string[]
5
- chart?: {[key: string]: any}
6
- title?: {[key: string]: string | {}}
7
- subtitle?: {[key: string]: string | {};}
8
- xAxis?: {[key: string]: any;}
9
- yAxis?: {[key: string]: any;}
10
- legend?: {[key: string]: string | {};}
11
- labels?: {[key: string]: {};}
12
- tooltip?: {[key: string]: any;}
13
- pane?: {[key: string]: {};}
14
- plotOptions?: {[key: string]: any;}
15
- colorKey?: string
16
- }
@@ -1,213 +0,0 @@
1
- import React, { useState, useEffect, useRef } from "react";
2
- import classnames from "classnames";
3
- import HighchartsReact from "highcharts-react-official";
4
- import Highcharts from "highcharts";
5
- import { highchartsTheme } from "../pb_dashboard/pbChartsLightTheme";
6
- import { highchartsDarkTheme } from "../pb_dashboard/pbChartsDarkTheme";
7
- import mapColors from "../pb_dashboard/pbChartsColorsHelper";
8
- import highchartsMore from "highcharts/highcharts-more";
9
- import solidGauge from "highcharts/modules/solid-gauge";
10
- import defaultColors from "../tokens/exports/_colors.scss";
11
- import typography from "../tokens/exports/_typography.scss";
12
-
13
- import { buildAriaProps, buildCss, buildDataProps } from "../utilities/props";
14
- import { globalProps } from "../utilities/globalProps";
15
-
16
- type GaugeProps = {
17
- aria: { [key: string]: string };
18
- className?: string;
19
- chartData?: { name: string; value: number[] | number }[];
20
- dark?: Boolean;
21
- data?: { [key: string]: string };
22
- disableAnimation?: boolean;
23
- fullCircle?: boolean;
24
- height?: string;
25
- id?: string;
26
- max?: number;
27
- min?: number;
28
- prefix?: string;
29
- showLabels?: boolean;
30
- style?: string;
31
- suffix?: string;
32
- title?: string;
33
- tooltipHtml?: string;
34
- colors: string[];
35
- minorTickInterval: any;
36
- circumference: number[];
37
- };
38
-
39
- const Gauge = ({
40
- aria = {},
41
- className,
42
- chartData,
43
- dark = false,
44
- data = {},
45
- disableAnimation = false,
46
- fullCircle = false,
47
- height = null,
48
- id,
49
- max = 100,
50
- min = 0,
51
- prefix = "",
52
- showLabels = false,
53
- style = "solidgauge",
54
- suffix = "",
55
- title = "",
56
- tooltipHtml = '<span style="font-weight: bold; color:{point.color};">●</span>{point.name}: ' +
57
- "<b>{point.y}</b>",
58
- colors = [],
59
- minorTickInterval = null,
60
- circumference = fullCircle ? [0, 360] : [-100, 100],
61
- ...props
62
- }: GaugeProps) => {
63
- const ariaProps = buildAriaProps(aria);
64
- const dataProps = buildDataProps(data);
65
- highchartsMore(Highcharts);
66
- solidGauge(Highcharts);
67
- const setupTheme = () => {
68
- dark
69
- ? Highcharts.setOptions(highchartsDarkTheme)
70
- : Highcharts.setOptions(highchartsTheme);
71
- };
72
- setupTheme();
73
-
74
- //set tooltip directly to prevent being overriden by Highcharts defaults
75
- Highcharts.setOptions({
76
- tooltip: {
77
- pointFormat: tooltipHtml,
78
- followPointer: true,
79
- },
80
- });
81
-
82
- const css = buildCss({
83
- pb_gauge_kit: true,
84
- });
85
-
86
- const componentDidMount = useRef(false);
87
- const [options, setOptions] = useState({});
88
-
89
- useEffect(() => {
90
- const formattedChartData = chartData.map((obj: any) => {
91
- obj.y = obj.value;
92
- delete obj.value;
93
- return obj;
94
- });
95
-
96
- const staticOptions = {
97
- chart: {
98
- events: {
99
- load() {
100
- setTimeout(this.reflow.bind(this), 0);
101
- },
102
- },
103
- type: style,
104
- height: height,
105
- },
106
- title: {
107
- text: title,
108
- },
109
- yAxis: {
110
- min: min,
111
- max: max,
112
- lineWidth: 0,
113
- tickWidth: 0,
114
- minorTickInterval: minorTickInterval,
115
- tickAmount: 2,
116
- tickPositions: [min, max],
117
- labels: {
118
- y: 26,
119
- enabled: showLabels,
120
- },
121
- },
122
- credits: false,
123
- series: [
124
- {
125
- data: formattedChartData,
126
- },
127
- ],
128
- pane: {
129
- center: ["50%", "50%"],
130
- size: "90%",
131
- startAngle: circumference[0],
132
- endAngle: circumference[1],
133
- background: {
134
- borderWidth: 20,
135
- innerRadius: "90%",
136
- outerRadius: "90%",
137
- shape: "arc",
138
- className: "gauge-pane",
139
- },
140
- },
141
- colors:
142
- colors !== undefined && colors.length > 0
143
- ? mapColors(colors)
144
- : highchartsTheme.colors,
145
- plotOptions: {
146
- series: {
147
- animation: !disableAnimation,
148
- },
149
- solidgauge: {
150
- borderColor:
151
- colors !== undefined && colors.length === 1
152
- ? mapColors(colors).join()
153
- : highchartsTheme.colors[0],
154
- borderWidth: 20,
155
- radius: 90,
156
- innerRadius: "90%",
157
- dataLabels: {
158
- borderWidth: 0,
159
- color: defaultColors.text_lt_default,
160
- enabled: true,
161
- format:
162
- `<span class="prefix">${prefix}</span>` +
163
- '<span class="fix">{y:,f}</span>' +
164
- `<span class="suffix">${suffix}</span>`,
165
- style: {
166
- fontFamily: typography.font_family_base,
167
- fontWeight: typography.regular,
168
- fontSize: typography.heading_2,
169
- },
170
- y: -26,
171
- },
172
- },
173
- },
174
- };
175
-
176
- setOptions({ ...staticOptions });
177
-
178
- if (document.querySelector(".prefix")) {
179
- document.querySelectorAll(".prefix").forEach((prefix) => {
180
- prefix.setAttribute("y", "28");
181
- });
182
- document
183
- .querySelectorAll(".fix")
184
- .forEach((fix) => fix.setAttribute("y", "38"));
185
- }
186
-
187
- if (componentDidMount.current) {
188
- Highcharts.charts.forEach((chart: any) => {
189
- if (chart && chart.renderTo.id === id) {
190
- chart.series[0].setData([chartData[0].value]);
191
- chart.series[0].data[0].name = chartData[0].name;
192
- }
193
- });
194
- } else {
195
- componentDidMount.current = true;
196
- }
197
- }, [chartData]);
198
-
199
- return (
200
- <HighchartsReact
201
- containerProps={{
202
- className: classnames(css, globalProps(props)),
203
- id: id,
204
- ...ariaProps,
205
- ...dataProps,
206
- }}
207
- highcharts={Highcharts}
208
- options={options}
209
- />
210
- );
211
- };
212
-
213
- export default Gauge;
@@ -1,148 +0,0 @@
1
- import React, { useState, useEffect } from "react";
2
- import classnames from "classnames";
3
- import { globalProps } from "../utilities/globalProps";
4
- import { buildAriaProps, buildDataProps } from "../utilities/props";
5
-
6
- import HighchartsReact from "highcharts-react-official";
7
- import Highcharts from "highcharts";
8
- import { highchartsTheme } from "../pb_dashboard/pbChartsLightTheme";
9
- import { highchartsDarkTheme } from "../pb_dashboard/pbChartsDarkTheme";
10
- import mapColors from "../pb_dashboard/pbChartsColorsHelper";
11
-
12
- type LineGraphProps = {
13
- align?: "left" | "right" | "center";
14
- axisTitle?: string;
15
- dark?: Boolean;
16
- xAxisCategories: [];
17
- yAxisMin: number;
18
- yAxisMax: number;
19
- className?: string;
20
- chartData: {
21
- name: string;
22
- data: number[];
23
- }[];
24
- gradient?: boolean;
25
- id: string;
26
- pointStart: number;
27
- subTitle?: string;
28
- title: string;
29
- type?: string;
30
- legend?: boolean;
31
- toggleLegendClick?: boolean;
32
- height?: string;
33
- colors: string[];
34
- layout?: "horizontal" | "vertical" | "proximate";
35
- verticalAlign?: "top" | "middle" | "bottom";
36
- x?: number;
37
- y?: number;
38
- aria?: { [key: string]: string };
39
- data?: { [key: string]: string };
40
- };
41
-
42
- const LineGraph = ({
43
- aria = {},
44
- data = {},
45
- align = "center",
46
- className = "pb_bar_graph",
47
- dark = false,
48
- gradient = false,
49
- type = "line",
50
- id,
51
- legend = false,
52
- toggleLegendClick = true,
53
- layout = "horizontal",
54
- verticalAlign = "bottom",
55
- x = 0,
56
- y = 0,
57
- axisTitle,
58
- xAxisCategories,
59
- yAxisMin,
60
- yAxisMax,
61
- chartData,
62
- pointStart,
63
- subTitle,
64
- title,
65
- height,
66
- colors = [],
67
- ...props
68
- }: LineGraphProps) => {
69
- const ariaProps = buildAriaProps(aria);
70
- const dataProps = buildDataProps(data);
71
- const setupTheme = () => {
72
- dark
73
- ? Highcharts.setOptions(highchartsDarkTheme)
74
- : Highcharts.setOptions(highchartsTheme);
75
- };
76
- setupTheme();
77
-
78
- const staticOptions = {
79
- title: {
80
- text: title,
81
- },
82
- chart: {
83
- height: height,
84
- type: type,
85
- },
86
- subtitle: {
87
- text: subTitle,
88
- },
89
- yAxis: {
90
- min: yAxisMin,
91
- max: yAxisMax,
92
- title: {
93
- text: axisTitle,
94
- },
95
- },
96
- xAxis: {
97
- categories: xAxisCategories,
98
- },
99
- legend: {
100
- enabled: legend,
101
- align: align,
102
- verticalAlign: verticalAlign,
103
- layout: layout,
104
- x: x,
105
- y: y,
106
- },
107
- colors:
108
- colors !== undefined && colors.length > 0
109
- ? mapColors(colors)
110
- : highchartsTheme.colors,
111
- plotOptions: {
112
- series: {
113
- pointStart: pointStart,
114
- events: {},
115
- dataLabels: {
116
- enabled: false,
117
- },
118
- },
119
- },
120
- series: chartData,
121
- credits: false,
122
- };
123
-
124
- if (!toggleLegendClick) {
125
- staticOptions.plotOptions.series.events = { legendItemClick: () => false };
126
- }
127
-
128
- const [options, setOptions] = useState({});
129
-
130
- useEffect(() => {
131
- setOptions({ ...staticOptions });
132
- }, [chartData]);
133
-
134
- return (
135
- <HighchartsReact
136
- containerProps={{
137
- className: classnames(globalProps(props), className),
138
- id: id,
139
- ...ariaProps,
140
- ...dataProps,
141
- }}
142
- highcharts={Highcharts}
143
- options={options}
144
- />
145
- );
146
- };
147
-
148
- export default LineGraph;
@@ -1 +0,0 @@
1
- Use the `confirmation` prop to only include the label and show/hide icon.
@@ -1,55 +0,0 @@
1
- import zxcvbn from 'zxcvbn'
2
-
3
- export const zxcvbnPasswordScore = (options) => {
4
- const {
5
- calculate = zxcvbn,
6
- averageThreshold = 2,
7
- strongThreshold = 3,
8
- minLength = 12,
9
- } = options
10
-
11
- return {
12
- minLength,
13
- averageThreshold,
14
- strongThreshold,
15
- test: function (password = '', common = false) {
16
- const feedbackValues = (str) => {
17
- let percent, variant, text
18
-
19
- if (password.length <= 0) {
20
- percent = '0'
21
- variant = 'negative'
22
- text = '\u00A0' //nbsp to keep form from jumping when typing beings
23
- } else if (common) {
24
- percent = '25'
25
- variant = 'negative'
26
- text = 'This passphrase is too common'
27
- } else if (password.length < this.minLength || str < this.averageThreshold) {
28
- percent = '25'
29
- variant = 'negative'
30
- text = 'Too weak'
31
- } else if (str < this.strongThreshold){
32
- percent = '50'
33
- variant = 'warning'
34
- text = 'Almost there, keep going!'
35
- } else if (str >= this.strongThreshold) {
36
- percent = '100'
37
- variant = 'positive'
38
- text = 'Success! Strong passphrase'
39
- }
40
- return { percent, variant, text }
41
- }
42
-
43
- const result = calculate(password)
44
-
45
- return (
46
- {
47
- suggestions: result.feedback.suggestions,
48
- warning: result.feedback.warning,
49
- strength: result.score,
50
- ...feedbackValues(result.score),
51
- }
52
- )
53
- },
54
- }
55
- }