@dev-crew-berlin/enter-js-utils 0.6.1 → 0.7.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.
@@ -69,7 +69,7 @@ export function parseTimestamp(value) {
69
69
  }
70
70
  export function maybe(validator, defaultValue = null) {
71
71
  return value => {
72
- if (value === null) return success(defaultValue);
72
+ if (value === null || value === undefined) return success(defaultValue);
73
73
  return validator(value);
74
74
  };
75
75
  }
@@ -1,15 +1,15 @@
1
- import { array, object, string, enumerate, boolean, defaultTo, union, number } from 'fefe';
1
+ import { array, object, string, enumerate, boolean, union, number } from 'fefe';
2
2
  import { apiValidator } from '../lib';
3
3
  import { dictionary, maybe } from './_helpers';
4
4
  const basicFieldProps = {
5
5
  name: string({
6
6
  minLength: 1
7
7
  }),
8
- title: defaultTo(maybe(union(string(), dictionary(string()))), null),
9
- info: defaultTo(maybe(union(string(), dictionary(string()))), null),
10
- required: defaultTo(boolean(), false),
11
- if: defaultTo(maybe(string()), null),
12
- class: defaultTo(maybe(string()), null)
8
+ title: maybe(union(string(), dictionary(string()))),
9
+ info: maybe(union(string(), dictionary(string()))),
10
+ required: maybe(boolean(), false),
11
+ if: maybe(string()),
12
+ class: maybe(string())
13
13
  };
14
14
  const staticField = object({
15
15
  type: enumerate('static'),
@@ -46,7 +46,7 @@ const checkboxField = object({
46
46
  ...basicFieldProps,
47
47
  items: array(object({
48
48
  name: union(string(), dictionary(string())),
49
- value: defaultTo(maybe(string()), null)
49
+ value: maybe(string())
50
50
  }))
51
51
  }, {
52
52
  allowExcessProperties: true
@@ -54,7 +54,7 @@ const checkboxField = object({
54
54
  const singleCheckboxField = object({
55
55
  type: enumerate('checkbox'),
56
56
  ...basicFieldProps,
57
- value: defaultTo(number(), 0)
57
+ value: maybe(number(), 0)
58
58
  }, {
59
59
  allowExcessProperties: true
60
60
  });
@@ -63,7 +63,7 @@ const radioField = object({
63
63
  ...basicFieldProps,
64
64
  items: array(object({
65
65
  name: union(string(), dictionary(string())),
66
- value: defaultTo(maybe(string()), null)
66
+ value: maybe(string())
67
67
  }))
68
68
  }, {
69
69
  allowExcessProperties: true
@@ -71,7 +71,7 @@ const radioField = object({
71
71
  const singleRadioField = object({
72
72
  type: enumerate('radiobutton'),
73
73
  ...basicFieldProps,
74
- itemval: defaultTo(maybe(string()), null)
74
+ itemval: maybe(string())
75
75
  }, {
76
76
  allowExcessProperties: true
77
77
  });
@@ -80,7 +80,7 @@ const selectField = object({
80
80
  ...basicFieldProps,
81
81
  items: array(object({
82
82
  name: union(string(), dictionary(string())),
83
- value: defaultTo(maybe(string()), null)
83
+ value: maybe(string())
84
84
  }))
85
85
  }, {
86
86
  allowExcessProperties: true
@@ -23,32 +23,32 @@ export const CheckinCountIndicator = props => {
23
23
  rsvpCount
24
24
  });
25
25
  return /*#__PURE__*/React.createElement("div", {
26
- className: _JSXStyle.dynamic([["3032748268", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'checkin-count-indicator'
26
+ className: _JSXStyle.dynamic([["103743971", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'checkin-count-indicator'
27
27
  }, props.response === 'negative-repsone' && !hasCheckins ? /*#__PURE__*/React.createElement("div", {
28
- className: _JSXStyle.dynamic([["3032748268", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'box-wrapper'
28
+ className: _JSXStyle.dynamic([["103743971", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'box-wrapper'
29
29
  }, /*#__PURE__*/React.createElement("span", {
30
- className: _JSXStyle.dynamic([["3032748268", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'decline-box'
30
+ className: _JSXStyle.dynamic([["103743971", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'decline-box'
31
31
  }, "\xD7"), /*#__PURE__*/React.createElement("span", {
32
- className: _JSXStyle.dynamic([["3032748268", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'text'
32
+ className: _JSXStyle.dynamic([["103743971", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'text'
33
33
  }, "Declined")) : /*#__PURE__*/React.createElement("div", {
34
- className: _JSXStyle.dynamic([["3032748268", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + `box-wrapper ${chunked.length > 1 ? 'multiple-chunks' : ''} `
34
+ className: _JSXStyle.dynamic([["103743971", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + `box-wrapper ${chunked.length > 1 ? 'multiple-chunks' : ''} `
35
35
  }, chunked.map((chunk, idx) => /*#__PURE__*/React.createElement("div", {
36
36
  key: idx,
37
- className: _JSXStyle.dynamic([["3032748268", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'chunk'
37
+ className: _JSXStyle.dynamic([["103743971", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'chunk'
38
38
  }, chunk.map((checkinOrRsvp, idx) => typeof checkinOrRsvp === 'string' ? /*#__PURE__*/React.createElement("span", {
39
39
  key: idx,
40
- className: _JSXStyle.dynamic([["3032748268", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'rsvp'
40
+ className: _JSXStyle.dynamic([["103743971", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'rsvp'
41
41
  }) : /*#__PURE__*/React.createElement("span", {
42
42
  key: idx,
43
43
  "data-toggle": "tooltip",
44
44
  title: checkinOrRsvp.time.toLocaleString(),
45
- className: _JSXStyle.dynamic([["3032748268", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'checkin'
45
+ className: _JSXStyle.dynamic([["103743971", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'checkin'
46
46
  })))), text && /*#__PURE__*/React.createElement("span", {
47
- className: _JSXStyle.dynamic([["3032748268", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'text'
47
+ className: _JSXStyle.dynamic([["103743971", [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]]]) + " " + 'text'
48
48
  }, text)), /*#__PURE__*/React.createElement(_JSXStyle, {
49
- id: "3032748268",
49
+ id: "103743971",
50
50
  dynamic: [fonts.primary, colors.enterDarkGrey, colors.enterGreen, colors.enterGreen, colors.enterError, colors.enterError]
51
- }, `.checkin-count-indicator.__jsx-style-dynamic-selector{font-family:${fonts.primary};}.text.__jsx-style-dynamic-selector{color:${colors.enterDarkGrey};text-transform:uppercase;font-size:10px;line-height:15px;font-weight:bold;white-space:nowrap;width:100%;margin-top:0.2em;}.text.__jsx-style-dynamic-selector:nth-child(2){width:auto;margin-top:0;}.box-wrapper.__jsx-style-dynamic-selector{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:100px;}.box-wrapper.multiple-chunks.__jsx-style-dynamic-selector{-webkit-flex-flow:wrap;-ms-flex-flow:wrap;flex-flow:wrap;}.chunk.__jsx-style-dynamic-selector{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:5px;margin-bottom:4px;width:95px;white-space:nowrap;}.chunk.__jsx-style-dynamic-selector:first-of-type.chunk.__jsx-style-dynamic-selector:last-of-type{width:auto;margin-right:2px;}.checkin.__jsx-style-dynamic-selector,.rsvp.__jsx-style-dynamic-selector,.decline-box.__jsx-style-dynamic-selector{box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:120%;width:15px;height:15px;border-radius:2px;border:3px solid ${colors.enterGreen};margin:0 4px 0 0;vertical-align:middle;color:white;}.checkin.__jsx-style-dynamic-selector{background-color:${colors.enterGreen};}.decline-box.__jsx-style-dynamic-selector{background-color:${colors.enterError};border-color:${colors.enterError};}`));
51
+ }, `.checkin-count-indicator.__jsx-style-dynamic-selector{font-family:${fonts.primary};min-height:20px;}.text.__jsx-style-dynamic-selector{color:${colors.enterDarkGrey};text-transform:uppercase;font-size:10px;line-height:15px;font-weight:bold;white-space:nowrap;width:100%;margin-top:0.2em;}.text.__jsx-style-dynamic-selector:nth-child(2){width:auto;margin-top:0;}.box-wrapper.__jsx-style-dynamic-selector{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:100px;}.box-wrapper.multiple-chunks.__jsx-style-dynamic-selector{-webkit-flex-flow:wrap;-ms-flex-flow:wrap;flex-flow:wrap;}.chunk.__jsx-style-dynamic-selector{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:5px;margin-bottom:4px;width:95px;white-space:nowrap;}.chunk.__jsx-style-dynamic-selector:first-of-type.chunk.__jsx-style-dynamic-selector:last-of-type{width:auto;margin-right:2px;}.checkin.__jsx-style-dynamic-selector,.rsvp.__jsx-style-dynamic-selector,.decline-box.__jsx-style-dynamic-selector{box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:120%;width:15px;height:15px;border-radius:2px;border:3px solid ${colors.enterGreen};margin:0 4px 0 0;vertical-align:middle;color:white;}.checkin.__jsx-style-dynamic-selector{background-color:${colors.enterGreen};}.decline-box.__jsx-style-dynamic-selector{background-color:${colors.enterError};border-color:${colors.enterError};}`));
52
52
  };
53
53
 
54
54
  function getText(args) {
@@ -0,0 +1,6 @@
1
+ import { FunctionComponent, InputHTMLAttributes } from 'react';
2
+ declare type Props = InputHTMLAttributes<HTMLInputElement> & {
3
+ label: string;
4
+ };
5
+ export declare const Input: FunctionComponent<Props>;
6
+ export {};
@@ -0,0 +1,22 @@
1
+ import _JSXStyle from "styled-jsx/style";
2
+
3
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
4
+
5
+ import React from 'react';
6
+ import { theme } from '../../lib';
7
+ import { Label } from './label';
8
+ export const Input = ({
9
+ label,
10
+ ...props
11
+ }) => {
12
+ const id = props.id ?? label;
13
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Label, {
14
+ htmlFor: id
15
+ }, label), /*#__PURE__*/React.createElement("input", _extends({}, props, {
16
+ id: id,
17
+ className: _JSXStyle.dynamic([["3631038054", [theme.fonts.primary, theme.colors.enterDarkGrey, theme.colors.enterMediumGrey, theme.colors.enterRed]]]) + " " + (props && props.className != null && props.className || "")
18
+ })), /*#__PURE__*/React.createElement(_JSXStyle, {
19
+ id: "3631038054",
20
+ dynamic: [theme.fonts.primary, theme.colors.enterDarkGrey, theme.colors.enterMediumGrey, theme.colors.enterRed]
21
+ }, `input.__jsx-style-dynamic-selector{font-family:${theme.fonts.primary};font-size:1.1em;display:block;width:100%;padding:0.2em 0;margin-bottom:1.1em;border:none;outline:none;background-color:transparent;color:${theme.colors.enterDarkGrey};border-bottom:1px solid ${theme.colors.enterMediumGrey};border-radius:0;-webkit-transition:border-color 0.2s;transition:border-color 0.2s;}input.__jsx-style-dynamic-selector:focus{border-color:${theme.colors.enterRed};}`));
22
+ };
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { ComponentStory, ComponentMeta } from '@storybook/react';
3
+ declare const _default: ComponentMeta<React.FunctionComponent<React.InputHTMLAttributes<HTMLInputElement> & {
4
+ label: string;
5
+ }>>;
6
+ export default _default;
7
+ export declare const Basic: ComponentStory<React.FunctionComponent<React.InputHTMLAttributes<HTMLInputElement> & {
8
+ label: string;
9
+ }>>;
10
+ export declare const NumberInput: ComponentStory<React.FunctionComponent<React.InputHTMLAttributes<HTMLInputElement> & {
11
+ label: string;
12
+ }>>;
13
+ export declare const WithValue: ComponentStory<React.FunctionComponent<React.InputHTMLAttributes<HTMLInputElement> & {
14
+ label: string;
15
+ }>>;
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import { Input } from './input';
3
+ export default {
4
+ title: 'Form Elements/Input',
5
+ component: Input
6
+ };
7
+
8
+ const Template = args => /*#__PURE__*/React.createElement(Input, args);
9
+
10
+ export const Basic = Template.bind({});
11
+ Basic.args = {
12
+ type: 'text',
13
+ label: 'Text input',
14
+ placeholder: 'Enter text here',
15
+ value: '',
16
+ onClick: () => undefined
17
+ };
18
+ export const NumberInput = Template.bind({});
19
+ NumberInput.args = {
20
+ type: 'number',
21
+ label: 'Number input',
22
+ placeholder: 'Enter number here',
23
+ value: '',
24
+ onClick: () => undefined
25
+ };
26
+ export const WithValue = Template.bind({});
27
+ WithValue.args = {
28
+ type: 'text',
29
+ label: 'Text input',
30
+ placeholder: 'Enter text here',
31
+ value: 'Text value',
32
+ onClick: () => undefined
33
+ };
@@ -0,0 +1,4 @@
1
+ import React, { LabelHTMLAttributes } from 'react';
2
+ declare type Props = LabelHTMLAttributes<HTMLLabelElement>;
3
+ export declare const Label: React.FunctionComponent<Props>;
4
+ export {};
@@ -0,0 +1,14 @@
1
+ import _JSXStyle from "styled-jsx/style";
2
+
3
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
4
+
5
+ import React from 'react';
6
+ import { theme } from '../../lib';
7
+ export const Label = props => {
8
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("label", _extends({}, props, {
9
+ className: _JSXStyle.dynamic([["2896178063", [theme.fonts.secondary, theme.colors.enterDarkGrey]]]) + " " + (props && props.className != null && props.className || "")
10
+ }), props.children), /*#__PURE__*/React.createElement(_JSXStyle, {
11
+ id: "2896178063",
12
+ dynamic: [theme.fonts.secondary, theme.colors.enterDarkGrey]
13
+ }, `label.__jsx-style-dynamic-selector{font-family:${theme.fonts.secondary};font-weight:400;font-size:0.9em;color:${theme.colors.enterDarkGrey};-webkit-letter-spacing:0.05em;-moz-letter-spacing:0.05em;-ms-letter-spacing:0.05em;letter-spacing:0.05em;margin-bottom:0.6em;}`));
14
+ };
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { ComponentStory, ComponentMeta } from '@storybook/react';
3
+ declare const _default: ComponentMeta<React.FunctionComponent<React.LabelHTMLAttributes<HTMLLabelElement>>>;
4
+ export default _default;
5
+ export declare const Basic: ComponentStory<React.FunctionComponent<React.LabelHTMLAttributes<HTMLLabelElement>>>;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { Label } from './label';
3
+ export default {
4
+ title: 'Form Elements/Label',
5
+ component: Label
6
+ };
7
+
8
+ const Template = args => /*#__PURE__*/React.createElement(Label, args);
9
+
10
+ export const Basic = Template.bind({});
11
+ Basic.args = {
12
+ children: 'Label text'
13
+ };
@@ -1,3 +1,5 @@
1
+ export { Input } from './form-elements/input';
2
+ export { Label } from './form-elements/label';
1
3
  export { Button } from './button';
2
4
  export { CheckinCountIndicator } from './checkin-count-indicator';
3
5
  export { CompanionInfo } from './companion-info';
package/dist/ui/index.js CHANGED
@@ -1,3 +1,5 @@
1
+ export { Input } from './form-elements/input';
2
+ export { Label } from './form-elements/label';
1
3
  export { Button } from './button';
2
4
  export { CheckinCountIndicator } from './checkin-count-indicator';
3
5
  export { CompanionInfo } from './companion-info';
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { ComponentStory, ComponentMeta } from '@storybook/react';
3
+ declare const _default: ComponentMeta<React.FunctionComponent<{
4
+ children: React.ReactNode;
5
+ }>>;
6
+ export default _default;
7
+ export declare const Basic: ComponentStory<React.FunctionComponent<{
8
+ children: React.ReactNode;
9
+ }>>;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { Tag } from './tag';
3
+ export default {
4
+ title: 'Tag',
5
+ component: Tag
6
+ };
7
+
8
+ const Template = args => /*#__PURE__*/React.createElement(Tag, args);
9
+
10
+ export const Basic = Template.bind({});
11
+ Basic.args = {
12
+ children: 'my tag'
13
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dev-crew-berlin/enter-js-utils",
3
- "version": "0.6.1",
3
+ "version": "0.7.0",
4
4
  "description": "utils such as vaildation and other helpers to work with data from the enter app",
5
5
  "files": [
6
6
  "dist",