nitro_sg 3.0.1 → 3.0.2

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 (110) hide show
  1. checksums.yaml +4 -4
  2. data/components/Avatar/Avatar.jsx +96 -0
  3. data/components/Avatar/styles.scss +54 -0
  4. data/components/Avatar/styles.scss.flow +14 -0
  5. data/components/Badge/Badge.jsx +40 -0
  6. data/components/Badge/badges.scss +167 -0
  7. data/components/Badge/labels.scss +121 -0
  8. data/components/Badge/styles.scss +4 -0
  9. data/components/Badge/styles.scss.flow +38 -0
  10. data/components/Banner/Banner.jsx +54 -0
  11. data/components/Banner/styles.scss +75 -0
  12. data/components/Banner/styles.scss.flow +19 -0
  13. data/components/Button/Button.jsx +75 -0
  14. data/components/Card/Card.jsx +44 -0
  15. data/components/CircleButton/CircleButton.jsx +51 -0
  16. data/components/CircleButton/CircleButtonStory.jsx +25 -0
  17. data/components/CircleButton/styles.scss +33 -0
  18. data/components/CircleButton/styles.scss.flow +6 -0
  19. data/components/CollapsibleCard/CollapsibleCard.jsx +108 -0
  20. data/components/Color/Color.jsx +55 -0
  21. data/components/Color/styles.scss +6 -0
  22. data/components/Color/styles.scss.flow +5 -0
  23. data/components/ColorPickerInput/ColorPickerInput.jsx +99 -0
  24. data/components/ColorPickerInput/colorPickerInput.scss +10 -0
  25. data/components/ColorPickerInput/colorPickerInput.scss.flow +6 -0
  26. data/components/DOBInput/index.jsx +35 -0
  27. data/components/DOBInput/story.jsx +20 -0
  28. data/components/DOBInput/styles.scss +11 -0
  29. data/components/DOBInput/styles.scss.flow +7 -0
  30. data/components/DatePicker/DatePicker.jsx +156 -0
  31. data/components/DatePicker/styles.scss +6 -0
  32. data/components/DatePicker/styles.scss.flow +5 -0
  33. data/components/DateTimePicker/DateTimePicker.jsx +109 -0
  34. data/components/DateTimePicker/story-styles.scss +3 -0
  35. data/components/DateTimePicker/story-styles.scss.flow +5 -0
  36. data/components/DateTimePicker/styles.scss +1 -0
  37. data/components/DateTimePicker/styles.scss.flow +5 -0
  38. data/components/Errors/Errors.jsx +38 -0
  39. data/components/FileCard/FileCard.jsx +183 -0
  40. data/components/FileCard/styles.scss +81 -0
  41. data/components/FileCard/styles.scss.flow +12 -0
  42. data/components/Flip/Flip.jsx +50 -0
  43. data/components/Flip/styles.scss +41 -0
  44. data/components/Flip/styles.scss.flow +11 -0
  45. data/components/FlyoutPanel/FlyoutPanel.jsx +34 -0
  46. data/components/FlyoutPanel/flyout_panel.scss +33 -0
  47. data/components/FlyoutPanel/flyout_panel.scss.flow +11 -0
  48. data/components/Grade/Grade.jsx +55 -0
  49. data/components/Grade/grade.scss +39 -0
  50. data/components/Grade/grade.scss.flow +6 -0
  51. data/components/Highlight/Highlight.jsx +39 -0
  52. data/components/Highlight/styles.scss +24 -0
  53. data/components/Highlight/styles.scss.flow +17 -0
  54. data/components/Icon/Icon.jsx +54 -0
  55. data/components/IconToggle/IconToggle.jsx +56 -0
  56. data/components/Milestones/MilestoneItem.jsx +47 -0
  57. data/components/Milestones/Milestones.jsx +51 -0
  58. data/components/Milestones/milestones.scss +19 -0
  59. data/components/Milestones/milestones.scss.flow +7 -0
  60. data/components/Milestones/milestones_item.scss +157 -0
  61. data/components/Milestones/milestones_item.scss.flow +13 -0
  62. data/components/Milestones/milestones_variables.scss +11 -0
  63. data/components/MonogramAvatar/MonogramAvatar.jsx +91 -0
  64. data/components/MonogramAvatar/monogram_avatar.scss +54 -0
  65. data/components/MonogramAvatar/monogram_avatar.scss.flow +10 -0
  66. data/components/Panel/Panel.jsx +159 -0
  67. data/components/Panel/panel.scss +32 -0
  68. data/components/Panel/panel.scss.flow +12 -0
  69. data/components/PanelGroup/PanelGroup.jsx +121 -0
  70. data/components/PanelGroup/PanelGroup.scss +96 -0
  71. data/components/PanelGroup/PanelGroup.scss.flow +6 -0
  72. data/components/SearchCollectionSelect/SearchCollectionSelect.jsx +29 -0
  73. data/components/SearchCollectionSelect/searchCollectionSelect.scss +0 -0
  74. data/components/Spinner/Spinner.jsx +80 -0
  75. data/components/Spinner/spinner.scss +6 -0
  76. data/components/Spinner/spinner.scss.flow +5 -0
  77. data/components/StepMeter/StepMeter.jsx +75 -0
  78. data/components/StepMeter/step_meter.scss +120 -0
  79. data/components/StepMeter/step_meter.scss.flow +9 -0
  80. data/components/Survey/Survey.jsx +190 -0
  81. data/components/Survey/survey.scss +75 -0
  82. data/components/Survey/survey.scss.flow +11 -0
  83. data/components/Tab/Tab.jsx +70 -0
  84. data/components/Tab/tab.scss +25 -0
  85. data/components/Tab/tab.scss.flow +6 -0
  86. data/components/TabList/TabList.jsx +35 -0
  87. data/components/TabList/tabList.scss +5 -0
  88. data/components/TabList/tabList.scss.flow +5 -0
  89. data/components/Text/Text.jsx +53 -0
  90. data/components/Text/styles.scss +3 -0
  91. data/components/Text/styles.scss.flow +123 -0
  92. data/components/Text/text.scss +35 -0
  93. data/components/TextInput/TextInput.jsx +95 -0
  94. data/components/TextInput/form-control.scss +96 -0
  95. data/components/TextInput/styles.scss +3 -0
  96. data/components/TextInput/styles.scss.flow +7 -0
  97. data/components/TimePicker/TimePicker.jsx +218 -0
  98. data/components/TimePicker/styles.scss +1 -0
  99. data/components/TimePicker/styles.scss.flow +5 -0
  100. data/components/ToggleButton/ToggleButton.jsx +68 -0
  101. data/components/ToggleButton/toggleButton.scss +70 -0
  102. data/components/ToggleButton/toggleButton.scss.flow +14 -0
  103. data/components/UserStamp/UserStamp.jsx +40 -0
  104. data/components/UserStamp/styles.scss +6 -0
  105. data/components/UserStamp/styles.scss.flow +7 -0
  106. data/components/Wip/Wip.jsx +34 -0
  107. data/components/index.js +33 -0
  108. data/components/types.js +21 -0
  109. data/lib/nitro_sg/version.rb +1 -1
  110. metadata +108 -1
@@ -0,0 +1,25 @@
1
+ @import "base-variables/_colors.scss";
2
+ @import "base-variables/_spacing.sass";
3
+ @import "base-variables/_typography.sass";
4
+
5
+ @mixin tab($orient: "horizontal") {
6
+ color: $gray-4;
7
+ cursor: pointer;
8
+ display: inline-block;
9
+ font-weight: $bold;
10
+ padding: $space-base $space-larger;
11
+ &-active {
12
+ border-bottom: 6px solid $power-royal;
13
+ color: $ink-dark;
14
+ }
15
+ &:link, &:visited {
16
+ color: $gray-4;
17
+ }
18
+ &:hover {
19
+ color: $ink-dark;
20
+ }
21
+ }
22
+
23
+ .tab {
24
+ @include tab;
25
+ }
@@ -0,0 +1,6 @@
1
+ // @flow
2
+ /* This file is automatically generated by css-modules-flow-types */
3
+ declare module.exports: {|
4
+ +'tab': string;
5
+ +'tab-active': string;
6
+ |};
@@ -0,0 +1,35 @@
1
+ /* @flow */
2
+
3
+ import React, { Component } from 'react'
4
+ import classnames from 'classnames'
5
+
6
+ import { TabType } from '../Tab/Tab'
7
+
8
+ type Props = {
9
+ className?: string,
10
+ children: Array<TabType>,
11
+ }
12
+
13
+ import styles from './tabList.scss'
14
+
15
+ export default class TabList extends Component<Props> {
16
+ props: Props
17
+
18
+ render() {
19
+ const {
20
+ className,
21
+ children,
22
+ } = this.props
23
+
24
+ const css = [
25
+ className,
26
+ styles[`tabList`],
27
+ ]
28
+
29
+ return (
30
+ <div className={classnames(css)}>
31
+ {children}
32
+ </div>
33
+ )
34
+ }
35
+ }
@@ -0,0 +1,5 @@
1
+ @import "base-variables/_colors.scss";
2
+
3
+ .tabList {
4
+ border-bottom: 1px solid $gray-2;
5
+ }
@@ -0,0 +1,5 @@
1
+ // @flow
2
+ /* This file is automatically generated by css-modules-flow-types */
3
+ declare module.exports: {|
4
+ +'tabList': string;
5
+ |};
@@ -0,0 +1,53 @@
1
+ /* @flow */
2
+
3
+ import React from 'react'
4
+ import classnames from 'classnames'
5
+
6
+ import styles from './styles.scss'
7
+
8
+
9
+ type Props = {
10
+ children?: Array<React.Node>,
11
+ color: "sky-lighter" | "sky-light" | "sky" | "sky-dark" | "ink-lightest" | "ink-lighter" | "ink-light"| "ink" | "ink-dark",
12
+ size: "base" | "large" | "larger" | "largest" | "small" | "smaller" | "smallest",
13
+ bold: boolean,
14
+ italic: boolean,
15
+ className: string,
16
+ }
17
+
18
+ export default class Text extends React.Component<Props> {
19
+ static defaultProps = {
20
+ children: <span/>,
21
+ size: "base",
22
+ color: "ink",
23
+ bold: false,
24
+ italic: false,
25
+ className: "",
26
+ }
27
+ props: Props
28
+ render() {
29
+ const {
30
+ children,
31
+ className,
32
+ bold,
33
+ italic,
34
+ size,
35
+ color,
36
+ } = this.props
37
+ const css = [
38
+ className,
39
+ styles.badge,
40
+ styles[`text-${color}`],
41
+ styles[`text-${size}`],
42
+ bold ? styles["font-weight-bold"] : null,
43
+ italic ? styles["font-italic"] : null,
44
+ ]
45
+ return (
46
+ <span
47
+ className={classnames(css)}
48
+ >
49
+ {children}
50
+ </span>
51
+ )
52
+ }
53
+ }
@@ -0,0 +1,3 @@
1
+ @import "base-mixins/_all.scss";
2
+ @import "base-variables/_all.scss";
3
+ @import "text.scss";
@@ -0,0 +1,123 @@
1
+ // @flow
2
+ /* This file is automatically generated by css-modules-flow-types */
3
+ declare module.exports: {|
4
+ +'font-italic': string;
5
+ +'font-weight-bold': string;
6
+ +'font-weight-normal': string;
7
+ +'hidden-xxs': string;
8
+ +'text-black': string;
9
+ +'text-black-opacity-1': string;
10
+ +'text-black-opacity-2': string;
11
+ +'text-black-opacity-3': string;
12
+ +'text-black-opacity-4': string;
13
+ +'text-black-opacity-5': string;
14
+ +'text-black-opacity-6': string;
15
+ +'text-black-opacity-7': string;
16
+ +'text-black-opacity-8': string;
17
+ +'text-black-opacity-9': string;
18
+ +'text-danger': string;
19
+ +'text-gray-1': string;
20
+ +'text-gray-2': string;
21
+ +'text-gray-3': string;
22
+ +'text-gray-4': string;
23
+ +'text-gray-5': string;
24
+ +'text-gray-6': string;
25
+ +'text-gray-7': string;
26
+ +'text-gray-8': string;
27
+ +'text-gray-9': string;
28
+ +'text-gray-dark': string;
29
+ +'text-info': string;
30
+ +'text-ink': string;
31
+ +'text-ink-dark': string;
32
+ +'text-ink-light': string;
33
+ +'text-ink-lighter': string;
34
+ +'text-ink-lightest': string;
35
+ +'text-jumbo': string;
36
+ +'text-large': string;
37
+ +'text-larger': string;
38
+ +'text-largest': string;
39
+ +'text-muted': string;
40
+ +'text-normal': string;
41
+ +'text-p-blue-opacity-1': string;
42
+ +'text-p-blue-opacity-2': string;
43
+ +'text-p-blue-opacity-3': string;
44
+ +'text-p-blue-opacity-4': string;
45
+ +'text-p-blue-opacity-5': string;
46
+ +'text-p-blue-opacity-6': string;
47
+ +'text-p-blue-opacity-7': string;
48
+ +'text-p-blue-opacity-8': string;
49
+ +'text-p-blue-opacity-9': string;
50
+ +'text-p-gold-opacity-1': string;
51
+ +'text-p-gold-opacity-2': string;
52
+ +'text-p-gold-opacity-3': string;
53
+ +'text-p-gold-opacity-4': string;
54
+ +'text-p-gold-opacity-5': string;
55
+ +'text-p-gold-opacity-6': string;
56
+ +'text-p-gold-opacity-7': string;
57
+ +'text-p-gold-opacity-8': string;
58
+ +'text-p-gold-opacity-9': string;
59
+ +'text-p-green-opacity-1': string;
60
+ +'text-p-green-opacity-2': string;
61
+ +'text-p-green-opacity-3': string;
62
+ +'text-p-green-opacity-4': string;
63
+ +'text-p-green-opacity-5': string;
64
+ +'text-p-green-opacity-6': string;
65
+ +'text-p-green-opacity-7': string;
66
+ +'text-p-green-opacity-8': string;
67
+ +'text-p-green-opacity-9': string;
68
+ +'text-p-navy-opacity-1': string;
69
+ +'text-p-navy-opacity-2': string;
70
+ +'text-p-navy-opacity-3': string;
71
+ +'text-p-navy-opacity-4': string;
72
+ +'text-p-navy-opacity-5': string;
73
+ +'text-p-navy-opacity-6': string;
74
+ +'text-p-navy-opacity-7': string;
75
+ +'text-p-navy-opacity-8': string;
76
+ +'text-p-navy-opacity-9': string;
77
+ +'text-p-red-opacity-1': string;
78
+ +'text-p-red-opacity-2': string;
79
+ +'text-p-red-opacity-3': string;
80
+ +'text-p-red-opacity-4': string;
81
+ +'text-p-red-opacity-5': string;
82
+ +'text-p-red-opacity-6': string;
83
+ +'text-p-red-opacity-7': string;
84
+ +'text-p-red-opacity-8': string;
85
+ +'text-p-red-opacity-9': string;
86
+ +'text-p-royal-opacity-1': string;
87
+ +'text-p-royal-opacity-2': string;
88
+ +'text-p-royal-opacity-3': string;
89
+ +'text-p-royal-opacity-4': string;
90
+ +'text-p-royal-opacity-5': string;
91
+ +'text-p-royal-opacity-6': string;
92
+ +'text-p-royal-opacity-7': string;
93
+ +'text-p-royal-opacity-8': string;
94
+ +'text-p-royal-opacity-9': string;
95
+ +'text-power-blue': string;
96
+ +'text-power-gold': string;
97
+ +'text-power-green': string;
98
+ +'text-power-navy': string;
99
+ +'text-power-navy-darker': string;
100
+ +'text-power-red': string;
101
+ +'text-power-royal': string;
102
+ +'text-primary': string;
103
+ +'text-sky': string;
104
+ +'text-sky-dark': string;
105
+ +'text-sky-light': string;
106
+ +'text-sky-lighter': string;
107
+ +'text-small': string;
108
+ +'text-smaller': string;
109
+ +'text-smallest': string;
110
+ +'text-success': string;
111
+ +'text-warning': string;
112
+ +'text-white': string;
113
+ +'text-white-opacity-1': string;
114
+ +'text-white-opacity-2': string;
115
+ +'text-white-opacity-3': string;
116
+ +'text-white-opacity-4': string;
117
+ +'text-white-opacity-5': string;
118
+ +'text-white-opacity-6': string;
119
+ +'text-white-opacity-7': string;
120
+ +'text-white-opacity-8': string;
121
+ +'text-white-opacity-9': string;
122
+ +'visible-xxs': string;
123
+ |};
@@ -0,0 +1,35 @@
1
+ @mixin text-color-classes($colors-list) {
2
+ @each $name, $color in $colors-list {
3
+ @include text-emphasis-variant(".text-#{$name}", $color);
4
+ }
5
+ }
6
+
7
+ @include text-color-classes($power-colors);
8
+ @include text-color-classes($gray-colors);
9
+ @include text-color-classes($opacity-colors);
10
+ @include text-color-classes($interface-colors);
11
+
12
+ // TEXT COLOR IN COLORS
13
+ @include text-emphasis-variant('.text-muted', $gray-6);
14
+ @include text-emphasis-variant('.text-primary', $brand-primary);
15
+ @include text-emphasis-variant('.text-success', $brand-success);
16
+ @include text-emphasis-variant('.text-info', $brand-info);
17
+ @include text-emphasis-variant('.text-warning', $power-gold);
18
+ @include text-emphasis-variant('.text-danger', $brand-danger);
19
+ @include text-emphasis-variant('.text-gray-dark', $gray-8);
20
+
21
+
22
+ // Text Size
23
+ .text-jumbo { font-size: $font-jumbo }
24
+ .text-largest { font-size: $font-largest }
25
+ .text-larger { font-size: $font-larger }
26
+ .text-large { font-size: $font-large }
27
+ .text-normal {font-size: $font-base }
28
+ .text-small { font-size: $font-small }
29
+ .text-smaller { font-size: $font-smaller }
30
+ .text-smallest { font-size: $font-smallest }
31
+
32
+ // text decoration
33
+ .font-weight-normal { font-weight: $regular; }
34
+ .font-weight-bold { font-weight: $bold; }
35
+ .font-italic { font-style: italic; }
@@ -0,0 +1,95 @@
1
+ /* @flow */
2
+
3
+ import React from 'react'
4
+ import ControlLabel from 'react-bootstrap/lib/ControlLabel'
5
+ import FormGroup from 'react-bootstrap/lib/FormGroup'
6
+ import FormControl from 'react-bootstrap/lib/FormControl'
7
+
8
+ const isRequired = (boolean) => {
9
+ if (boolean) {
10
+ return "*"
11
+ }
12
+ }
13
+
14
+ /**
15
+ * TextInput renders a bootstrapped text input field.
16
+ *
17
+ * @param {string} className the CSS class name(s) for the outermost returned div.
18
+ * @param {string} controlId the CSS id name for the <input> tag.
19
+ * @param {string} label the text to use as a label.
20
+ * @param {string} name the text to use as a name.
21
+ * @param {func} onChange the function to be called when the React onChange event is triggered.
22
+ * @param {string} placeholder the text to use as a placeholder.
23
+ * @param {string} value the text to use as a value.
24
+ * @param {string} type the type of input (i.e. 'text', 'number'). Defaults to 'text'.
25
+ * @param {string} validationState react-bootstrap validation state of the input, either 'success', 'warning' or 'error'.
26
+ * @param {boolean} requiredField indicates of the input is a required field.
27
+ * @returns {ReactElement} JSX.
28
+ */
29
+
30
+ type Props = {
31
+ className: string,
32
+ controlId: string,
33
+ inputClassName: string,
34
+ inputStyle: object,
35
+ label: string,
36
+ labelClassName: string,
37
+ name: string,
38
+ onChange: () => mixed,
39
+ placeholder: string,
40
+ requiredField: boolean,
41
+ type: string,
42
+ validationState: string,
43
+ value: string,
44
+ }
45
+
46
+ export default class TextInput extends React.Component<Props> {
47
+ static defaultProps = {
48
+ className: "",
49
+ inputClassName: "",
50
+ inputStyle: {},
51
+ labelClassName: "",
52
+ type: "text",
53
+ validationState: null,
54
+ }
55
+ props: Props
56
+ render() {
57
+ const {
58
+ label,
59
+ placeholder,
60
+ className,
61
+ labelClassName,
62
+ inputClassName,
63
+ inputStyle,
64
+ controlId,
65
+ value,
66
+ onChange,
67
+ name,
68
+ requiredField,
69
+ type,
70
+ validationState,
71
+ } = this.props
72
+
73
+ return (
74
+ <FormGroup
75
+ className={className}
76
+ controlId={controlId}
77
+ validationState={validationState}
78
+ >
79
+ <ControlLabel className={labelClassName}>
80
+ {label} <span>{isRequired(requiredField)}</span>
81
+ </ControlLabel>
82
+ {' '}
83
+ <FormControl
84
+ className={inputClassName}
85
+ defaultValue={value}
86
+ name={name}
87
+ onChange={onChange}
88
+ placeholder={placeholder}
89
+ style={inputStyle}
90
+ type={type}
91
+ />
92
+ </FormGroup>
93
+ )
94
+ }
95
+ }
@@ -0,0 +1,96 @@
1
+ // $input-border = $form-border-color
2
+ // $form-border-color;
3
+
4
+
5
+ // Form control focus state
6
+ @mixin form-control-focus($color: $input-border-focus) {
7
+ $color-rgba: rgba(red($color), green($color), blue($color), .6);
8
+ &:focus {
9
+ outline: 0;
10
+ border-color: $power-navy;
11
+ box-shadow: inset 0 0 0 0.1rem $power-navy, inset 0 0.1rem 0.2rem 0 rgba($power-navy, $opacity-2);
12
+ }
13
+ }
14
+
15
+ @mixin style-placeholder {
16
+ &::-webkit-input-placeholder { @content; }
17
+ &:-moz-placeholder { @content; }
18
+ &::-moz-placeholder { @content; }
19
+ &:-ms-input-placeholder { @content; }
20
+ }
21
+
22
+
23
+
24
+
25
+ // select
26
+ // textarea
27
+ // input[type="text"]
28
+ // input[type="password"]
29
+ // input[type="datetime"]
30
+ // input[type="datetime-local"]
31
+ // input[type="date"]
32
+ // input[type="month"]
33
+ // input[type="time"]
34
+ // input[type="week"]
35
+ // input[type="number"]
36
+ // input[type="email"]
37
+ // input[type="url"]
38
+ // input[type="search"]
39
+ // input[type="tel"]
40
+ // input[type="color"]
41
+
42
+ .form-control {
43
+ display: block;
44
+ width: 100%;
45
+ height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
46
+ padding: $padding-base-vertical ($padding-base-horizontal/1.5);
47
+ font-size: $font-small;
48
+ font-weight: $bold;
49
+ line-height: $line-height-base;
50
+ color: $gray-9;
51
+ background-color: $input-bg;
52
+ background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
53
+ border: 1px solid $form-border-color;
54
+ border-radius: $input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.
55
+ box-shadow: none;
56
+ transition-property: border-color, box-shadow, color, background-color;
57
+ transition-duration: .24s;
58
+ transition-timing-function: $bezier;
59
+ -webkit-appearance: none;
60
+ -moz-appearance: none;
61
+ appearance: none;
62
+
63
+ @include form-control-focus;
64
+
65
+ @include style-placeholder {
66
+ color: $gray-5;
67
+ font-style: italic;
68
+ font-weight: $regular;
69
+ @include smooth-font;
70
+ }
71
+ &[disabled],
72
+ fieldset[disabled] & {
73
+ background-color: $input-bg-disabled;
74
+ color: $sky-dark;
75
+ opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655
76
+ }
77
+
78
+ &[disabled],
79
+ fieldset[disabled] & {
80
+ cursor: $cursor-disabled;
81
+ }
82
+ &.clear {
83
+
84
+
85
+ // height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
86
+ padding: $padding-base-vertical ($padding-base-horizontal/1.5);
87
+ // font-size: $font-small;
88
+ // font-weight: $bold;
89
+ // line-height: $line-height-base;
90
+ // color: $gray-9;
91
+ background-color: transparent;
92
+ background-image: none;
93
+ border: 0;
94
+
95
+ }
96
+ }