@ntbjs/react-components 0.0.1-beta.9 → 1.1.0-beta.1

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 (48) hide show
  1. package/ActionButton-90485300.js +43 -0
  2. package/AssetGallery-9bf4cd82.js +1403 -0
  3. package/AssetPreviewTopBar-a172fc5c.js +105 -0
  4. package/Badge-86593df4.js +146 -0
  5. package/Button-0d728b52.js +156 -0
  6. package/Checkbox-50f1f3c7.js +136 -0
  7. package/CompactTextInput-24126cf9.js +280 -0
  8. package/Popover-d3e2f6c0.js +97 -0
  9. package/README.md +1 -2
  10. package/Radio-0b46b2a8.js +83 -0
  11. package/SectionSeparator-12aff748.js +37 -0
  12. package/Switch-aa384260.js +104 -0
  13. package/TextArea-52cf4c0a.js +173 -0
  14. package/TextInput-a7c32f5f.js +250 -0
  15. package/Tooltip-f95a39f4.js +57 -0
  16. package/data/Badge/index.js +10 -0
  17. package/data/Popover/index.js +13 -5
  18. package/data/index.js +19 -6
  19. package/{defaultTheme-f1063879.js → defaultTheme-870f7df1.js} +15 -3
  20. package/icons/arrow-back.svg +4 -0
  21. package/icons/audio.svg +3 -0
  22. package/icons/check.svg +3 -0
  23. package/icons/close.svg +4 -0
  24. package/icons/edit-note.svg +4 -0
  25. package/icons/headset.svg +1 -0
  26. package/icons/library-add.svg +3 -0
  27. package/icons/link.svg +4 -0
  28. package/icons/search.svg +3 -0
  29. package/inputs/ActionButton/index.js +10 -4
  30. package/inputs/Button/index.js +10 -0
  31. package/inputs/Checkbox/index.js +12 -0
  32. package/inputs/CompactTextInput/index.js +17 -0
  33. package/inputs/Radio/index.js +12 -0
  34. package/inputs/Switch/index.js +12 -0
  35. package/inputs/TextArea/index.js +12 -0
  36. package/inputs/TextInput/index.js +12 -0
  37. package/inputs/index.js +33 -4
  38. package/layout/SectionSeparator/index.js +10 -0
  39. package/layout/index.js +12 -0
  40. package/package.json +13 -8
  41. package/ssr/index.js +14 -0
  42. package/widgets/AssetGallery/index.js +27 -10
  43. package/widgets/AssetPreview/AssetPreviewTopBar/index.js +10 -0
  44. package/widgets/index.js +31 -10
  45. package/ActionButton-dfa33fb3.js +0 -36
  46. package/AssetGallery-92320d63.js +0 -970
  47. package/Popover-01b3e392.js +0 -80
  48. package/Tooltip-830b629b.js +0 -49
@@ -0,0 +1,280 @@
1
+ 'use strict';
2
+
3
+ var defaultTheme = require('./defaultTheme-870f7df1.js');
4
+ var React = require('react');
5
+ var nanoid = require('nanoid');
6
+ var lodash = require('lodash');
7
+ var styled = require('styled-components');
8
+ var Popover = require('./Popover-d3e2f6c0.js');
9
+ var Tooltip = require('./Tooltip-f95a39f4.js');
10
+ require('./Badge-86593df4.js');
11
+
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ function _interopNamespace(e) {
15
+ if (e && e.__esModule) return e;
16
+ var n = Object.create(null);
17
+ if (e) {
18
+ Object.keys(e).forEach(function (k) {
19
+ if (k !== 'default') {
20
+ var d = Object.getOwnPropertyDescriptor(e, k);
21
+ Object.defineProperty(n, k, d.get ? d : {
22
+ enumerable: true,
23
+ get: function () {
24
+ return e[k];
25
+ }
26
+ });
27
+ }
28
+ });
29
+ }
30
+ n['default'] = e;
31
+ return Object.freeze(n);
32
+ }
33
+
34
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
35
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
36
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
37
+
38
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13;
39
+ var CompactTextInput$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject || (_templateObject = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n font-family: ", ";\n"])), function (props) {
40
+ return props.theme.primaryFontFamily;
41
+ });
42
+ var Label = styled__default['default'].label.attrs(defaultTheme.applyDefaultTheme)(_templateObject2 || (_templateObject2 = defaultTheme._taggedTemplateLiteral(["\n ", ";\n flex-basis: 33.33%;\n font-size: 0.875rem;\n line-height: 1rem;\n cursor: pointer;\n"])), function (props) {
43
+ return props.theme.themeProp('color', props.theme.getColor('gray-400'), props.theme.getColor('gray-500'));
44
+ });
45
+ var InputContainer = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject3 || (_templateObject3 = defaultTheme._taggedTemplateLiteral(["\n position: relative;\n flex-basis: ", ";\n"])), function (props) {
46
+ return props.$hasLabel ? '66.66%' : '100%';
47
+ });
48
+ var InputIconContainer = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject4 || (_templateObject4 = defaultTheme._taggedTemplateLiteral(["\n opacity: 0;\n pointer-events: none;\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n padding-right: 4px;\n ", ";\n padding-left: 30px;\n display: flex;\n align-items: center;\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n color: ", ";\n\n ", "\n\n ", "\n\n > svg {\n width: 12px;\n }\n"])), function (props) {
49
+ return props.theme.themeProp('background', styled.css(_templateObject5 || (_templateObject5 = defaultTheme._taggedTemplateLiteral(["\n linear-gradient(-90deg,\n ", " 55%,\n transparent)\n "])), function (props) {
50
+ return props.error ? '#901d1d' : props.warning ? '#816600' : props.theme.getColor('gray-700');
51
+ }), styled.css(_templateObject6 || (_templateObject6 = defaultTheme._taggedTemplateLiteral(["\n linear-gradient(-90deg,\n ", " 55%,\n transparent)\n "])), function (props) {
52
+ return props.error ? '#f7d5d0' : props.warning ? '#fffebf' : props.theme.getColor('gray-100');
53
+ }));
54
+ }, function (props) {
55
+ return props.theme.getColor('gray-400');
56
+ }, function (props) {
57
+ return props.warning && props.theme.themeProp('color', '#C3AF43', '#C3AF43');
58
+ }, function (props) {
59
+ return props.error && props.theme.themeProp('color', '#CB968F', '#CB968F');
60
+ });
61
+ var Input = styled__default['default'].input.attrs(defaultTheme.applyDefaultTheme)(_templateObject7 || (_templateObject7 = defaultTheme._taggedTemplateLiteral(["\n box-sizing: border-box;\n width: 100%;\n display: block;\n font-size: 0.875rem;\n line-height: 1rem;\n font-family: inherit;\n ", "\n padding: 1px 4px;\n ", ";\n border-radius: 3px;\n border: 1px solid transparent;\n text-overflow: ellipsis;\n\n ", ";\n\n &&:not(:hover):not(:focus) {\n ", ";\n ", ";\n }\n\n &&:hover:not(:focus) {\n ", ";\n\n ", ";\n\n ", ";\n\n & + ", " {\n opacity: 1;\n }\n }\n\n &&:focus {\n ", ";\n\n ", ";\n outline: none;\n\n ", ";\n\n ", ";\n }\n\n &::placeholder {\n ", ";\n\n ", ";\n }\n\n ", "\n"])), function (props) {
62
+ return props.theme.themeProp('color', props.theme.getColor('gray-200'), props.theme.getColor('gray-700'));
63
+ }, function (props) {
64
+ return props.theme.themeProp('background', props.theme.getColor('gray-900'), props.theme.getColor('white'));
65
+ }, function (props) {
66
+ return props.hasLink && styled.css(_templateObject8 || (_templateObject8 = defaultTheme._taggedTemplateLiteral(["\n &&:not(:focus),\n &&:read-only {\n text-decoration: underline;\n ", "\n }\n\n &&:read-only {\n cursor: pointer;\n }\n "])), function (props) {
67
+ return props.theme.themeProp('color', props.theme.getColor('gray-200'), props.theme.getColor('emerald-500'));
68
+ });
69
+ }, function (props) {
70
+ return props.warning && props.theme.themeProp('background', '#634e01', '#fffde8');
71
+ }, function (props) {
72
+ return props.error && props.theme.themeProp('background', '#7f1b1b', '#fbeae6');
73
+ }, function (props) {
74
+ return !props.readOnly && props.theme.themeProp('background', props.theme.getColor('gray-700'), props.theme.getColor('gray-100'));
75
+ }, function (props) {
76
+ return props.warning && !props.readOnly && props.theme.themeProp('background', '#816600', '#fffebf');
77
+ }, function (props) {
78
+ return props.error && !props.readOnly && props.theme.themeProp('background', '#901d1d', '#f7d5d0');
79
+ }, InputIconContainer, function (props) {
80
+ return props.error && !props.readOnly && props.theme.themeProp('color', props.theme.getColor('gray-200'), props.theme.getColor('gray-700'));
81
+ }, function (props) {
82
+ return !props.readOnly && styled.css(_templateObject9 || (_templateObject9 = defaultTheme._taggedTemplateLiteral(["\n border-color: ", ";\n "])), function (props) {
83
+ return props.theme.getColor('gray-600');
84
+ });
85
+ }, function (props) {
86
+ return props.warning && styled.css(_templateObject10 || (_templateObject10 = defaultTheme._taggedTemplateLiteral(["\n border-color: ", ";\n "])), function (props) {
87
+ return props.theme.getColor('signal-yellow-500');
88
+ });
89
+ }, function (props) {
90
+ return props.error && styled.css(_templateObject11 || (_templateObject11 = defaultTheme._taggedTemplateLiteral(["\n border-color: ", ";\n "])), function (props) {
91
+ return props.theme.getColor('red-500');
92
+ });
93
+ }, function (props) {
94
+ return props.theme.themeProp('color', props.theme.getColor('gray-600'), props.theme.getColor('gray-600'), 1);
95
+ }, function (props) {
96
+ return props.theme.themeProp('opacity', 0.6, 0.5, 1);
97
+ }, function (props) {
98
+ return props.bold && styled.css(_templateObject12 || (_templateObject12 = defaultTheme._taggedTemplateLiteral(["\n font-size: 1rem;\n font-weight: 500;\n line-height: 1.0625;\n padding-top: 3px;\n padding-bottom: 2px;\n "])));
99
+ });
100
+ var LinkPopoverContainer = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject13 || (_templateObject13 = defaultTheme._taggedTemplateLiteral(["\n padding: 5px 8px;\n\n a {\n font-size: 0.875rem;\n ", ";\n }\n\n svg {\n width: 18px;\n margin-right: 8px;\n }\n"])), function (props) {
101
+ return props.theme.themeProp('color', props.theme.getColor('gray-400'), props.theme.getColor('emerald-500'), 1);
102
+ });
103
+
104
+ function _extends$1() { _extends$1 = Object.assign || 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$1.apply(this, arguments); }
105
+
106
+ var _ref$1 = /*#__PURE__*/React__namespace.createElement("path", {
107
+ fill: "currentColor",
108
+ d: "M7 12v-1.77l4.42-4.42 1.77 1.77L8.77 12H7zM0 7.75v-1.5h6v1.5H0zM13.77 7L12 5.23l.67-.67c.15-.15.33-.23.53-.23s.38.08.53.23l.71.71c.15.15.23.33.23.53s-.08.38-.23.53l-.67.67zM0 4.63v-1.5h9v1.5H0zM0 1.5V0h9v1.5H0z"
109
+ });
110
+
111
+ function SvgEditNote(props) {
112
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$1({
113
+ xmlns: "http://www.w3.org/2000/svg",
114
+ viewBox: "0 0 14.67 12"
115
+ }, props), _ref$1);
116
+ }
117
+
118
+ function _extends() { _extends = Object.assign || 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); }
119
+
120
+ var _ref = /*#__PURE__*/React__namespace.createElement("path", {
121
+ fill: "currentColor",
122
+ d: "M9 10H5c-1.38 0-2.56-.49-3.54-1.46S0 6.39 0 5s.49-2.56 1.46-3.54S3.62 0 5 0h4v2H5c-.83 0-1.54.29-2.13.88s-.88 1.29-.88 2.13.29 1.54.88 2.13 1.29.88 2.13.88h4v2zM6 6V4h8v2H6zm5 4V8h4c.83 0 1.54-.29 2.13-.88s.88-1.29.88-2.13-.29-1.54-.88-2.13-1.29-.88-2.13-.88h-4V0h4c1.38 0 2.56.49 3.54 1.46S20 3.61 20 5s-.49 2.56-1.46 3.54S16.39 10 15 10h-4z"
123
+ });
124
+
125
+ function SvgLink(props) {
126
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends({
127
+ xmlns: "http://www.w3.org/2000/svg",
128
+ viewBox: "0 0 20 10"
129
+ }, props), _ref);
130
+ }
131
+
132
+ var ConditionalWrapper = function ConditionalWrapper(_ref) {
133
+ var condition = _ref.condition,
134
+ wrapper = _ref.wrapper,
135
+ children = _ref.children;
136
+ return condition ? wrapper(children) : children;
137
+ };
138
+
139
+ var CompactTextInput = React__default['default'].forwardRef(function CompactTextInput(_ref2, forwardedRef) {
140
+ var label = _ref2.label,
141
+ type = _ref2.type,
142
+ name = _ref2.name,
143
+ defaultValue = _ref2.defaultValue,
144
+ value = _ref2.value,
145
+ placeholder = _ref2.placeholder,
146
+ link = _ref2.link,
147
+ linkTarget = _ref2.linkTarget,
148
+ autoSelect = _ref2.autoSelect,
149
+ readOnly = _ref2.readOnly,
150
+ error = _ref2.error,
151
+ warning = _ref2.warning,
152
+ bold = _ref2.bold,
153
+ onChangeProp = _ref2.onChange,
154
+ onFocusProp = _ref2.onFocus,
155
+ onBlurProp = _ref2.onBlur,
156
+ props = defaultTheme._objectWithoutProperties(_ref2, ["label", "type", "name", "defaultValue", "value", "placeholder", "link", "linkTarget", "autoSelect", "readOnly", "error", "warning", "bold", "onChange", "onFocus", "onBlur"]);
157
+
158
+ var _useState = React.useState(nanoid.nanoid()),
159
+ _useState2 = defaultTheme._slicedToArray(_useState, 1),
160
+ uniqueId = _useState2[0];
161
+
162
+ var _useState3 = React.useState(defaultValue || value),
163
+ _useState4 = defaultTheme._slicedToArray(_useState3, 2),
164
+ currentValue = _useState4[0],
165
+ setCurrentValue = _useState4[1];
166
+
167
+ var _useState5 = React.useState(false),
168
+ _useState6 = defaultTheme._slicedToArray(_useState5, 2),
169
+ showPopover = _useState6[0],
170
+ setShowPopover = _useState6[1];
171
+
172
+ var onChange = React.useCallback(function (event) {
173
+ setCurrentValue(event.target.value);
174
+
175
+ if (lodash.isFunction(onChangeProp)) {
176
+ onChangeProp(event);
177
+ }
178
+ }, [onChangeProp]);
179
+ var onFocus = React.useCallback(function (event) {
180
+ if (autoSelect) {
181
+ event.target.select();
182
+ }
183
+
184
+ if (lodash.isFunction(onFocusProp)) {
185
+ onFocusProp(event);
186
+ }
187
+
188
+ setShowPopover(true);
189
+ }, [autoSelect, readOnly, onFocusProp]);
190
+ var onBlur = React.useCallback(function (event) {
191
+ if (lodash.isFunction(onBlurProp)) {
192
+ onBlurProp(event);
193
+ }
194
+
195
+ setShowPopover(false);
196
+ }, [onBlurProp]);
197
+ return React__default['default'].createElement(CompactTextInput$1, props, label && React__default['default'].createElement(Label, {
198
+ htmlFor: uniqueId
199
+ }, label), React__default['default'].createElement(ConditionalWrapper, {
200
+ wrapper: function wrapper(children) {
201
+ return React__default['default'].createElement(Tooltip.Tooltip, {
202
+ content: error || warning
203
+ }, children);
204
+ },
205
+ condition: lodash.isString(error) || lodash.isString(warning)
206
+ }, React__default['default'].createElement(ConditionalWrapper, {
207
+ wrapper: function wrapper(children) {
208
+ return readOnly ? React__default['default'].createElement("a", {
209
+ href: link,
210
+ target: linkTarget
211
+ }, children) : React__default['default'].createElement(Popover.Popover, {
212
+ arrow: false,
213
+ trigger: "manuel",
214
+ visible: showPopover,
215
+ placement: 'bottom-start',
216
+ offset: [4, 2],
217
+ content: React__default['default'].createElement(LinkPopoverContainer, {
218
+ onMouseDown: function onMouseDown(event) {
219
+ event.preventDefault();
220
+ }
221
+ }, React__default['default'].createElement("a", {
222
+ href: link,
223
+ target: "_blank",
224
+ rel: "noreferrer"
225
+ }, React__default['default'].createElement(SvgLink, null), currentValue))
226
+ }, children);
227
+ },
228
+ condition: !lodash.isEmpty(link)
229
+ }, React__default['default'].createElement(InputContainer, {
230
+ $hasLabel: !lodash.isEmpty(label)
231
+ }, React__default['default'].createElement(Input, {
232
+ ref: forwardedRef,
233
+ id: uniqueId,
234
+ type: type,
235
+ name: name,
236
+ readOnly: readOnly,
237
+ placeholder: placeholder,
238
+ defaultValue: defaultValue,
239
+ value: value,
240
+ error: error,
241
+ warning: warning,
242
+ bold: bold,
243
+ hasLink: !lodash.isEmpty(link),
244
+ onFocus: onFocus,
245
+ onChange: onChange,
246
+ onBlur: onBlur
247
+ }), !readOnly && React__default['default'].createElement(InputIconContainer, {
248
+ error: error,
249
+ warning: warning
250
+ }, React__default['default'].createElement(SvgEditNote, null))))));
251
+ });
252
+ CompactTextInput.propTypes = process.env.NODE_ENV !== "production" ? {
253
+ label: defaultTheme.PropTypes.string,
254
+ type: defaultTheme.PropTypes.string,
255
+ name: defaultTheme.PropTypes.string,
256
+ defaultValue: defaultTheme.PropTypes.string,
257
+ value: defaultTheme.PropTypes.string,
258
+ placeholder: defaultTheme.PropTypes.string,
259
+ link: defaultTheme.PropTypes.string,
260
+ linkTarget: defaultTheme.PropTypes.oneOf(['_self', '_blank', '_parent', '_top']),
261
+ autoSelect: defaultTheme.PropTypes.bool,
262
+ readOnly: defaultTheme.PropTypes.bool,
263
+ error: defaultTheme.PropTypes.oneOfType([defaultTheme.PropTypes.bool, defaultTheme.PropTypes.string]),
264
+ warning: defaultTheme.PropTypes.oneOfType([defaultTheme.PropTypes.bool, defaultTheme.PropTypes.string]),
265
+ bold: defaultTheme.PropTypes.bool,
266
+ onChange: defaultTheme.PropTypes.func,
267
+ onFocus: defaultTheme.PropTypes.func,
268
+ onBlur: defaultTheme.PropTypes.func
269
+ } : {};
270
+ CompactTextInput.defaultProps = {
271
+ type: 'text',
272
+ autoSelect: true,
273
+ linkTarget: '_self',
274
+ bold: false,
275
+ readOnly: false,
276
+ error: false,
277
+ warning: false
278
+ };
279
+
280
+ exports.CompactTextInput = CompactTextInput;
@@ -0,0 +1,97 @@
1
+ 'use strict';
2
+
3
+ var defaultTheme = require('./defaultTheme-870f7df1.js');
4
+ var React = require('react');
5
+ var lodash = require('lodash');
6
+ var styled = require('styled-components');
7
+ var polished = require('polished');
8
+ var TippyTooltip = require('@tippyjs/react');
9
+
10
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
11
+
12
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
13
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
14
+ var TippyTooltip__default = /*#__PURE__*/_interopDefaultLegacy(TippyTooltip);
15
+
16
+ var css_248z$1 = ".tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:\"\";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1}";
17
+ defaultTheme.styleInject(css_248z$1);
18
+
19
+ var css_248z = ".tippy-box[data-animation=shift-away-subtle][data-state=hidden]{opacity:0}.tippy-box[data-animation=shift-away-subtle][data-state=hidden][data-placement^=top]{transform:translateY(5px)}.tippy-box[data-animation=shift-away-subtle][data-state=hidden][data-placement^=bottom]{transform:translateY(-5px)}.tippy-box[data-animation=shift-away-subtle][data-state=hidden][data-placement^=left]{transform:translateX(5px)}.tippy-box[data-animation=shift-away-subtle][data-state=hidden][data-placement^=right]{transform:translateX(-5px)}";
20
+ defaultTheme.styleInject(css_248z);
21
+
22
+ var _templateObject;
23
+ var Popover$1 = styled__default['default'](TippyTooltip__default['default']).attrs(defaultTheme.applyDefaultTheme)(_templateObject || (_templateObject = defaultTheme._taggedTemplateLiteral(["\n font-family: ", ";\n font-size: 1rem;\n font-weight: 400;\n color: inherit;\n border-radius: 0;\n ", "\n ", "\n line-height: inherit;\n\n ", "\n .tippy-content {\n padding: 0;\n }\n\n .tippy-arrow {\n ", "\n }\n\n && > .tippy-arrow::before {\n position: absolute;\n border-color: transparent;\n border-style: solid;\n }\n\n & > .tippy-arrow::after {\n content: '';\n position: absolute;\n border-color: transparent;\n border-style: solid;\n }\n\n &[data-placement^='top'] {\n & > .tippy-arrow:before {\n bottom: -16px;\n left: -5px;\n border-width: 15px 13px 0;\n ", "\n }\n\n & > .tippy-arrow:after {\n bottom: -15px;\n left: -5px;\n border-width: 15px 13px 0;\n border-top-color: initial;\n transform-origin: center top;\n }\n }\n\n &[data-placement^='right'] {\n & > .tippy-arrow:before {\n bottom: -5px;\n left: -16px;\n border-width: 13px 15px 13px 0;\n ", "\n }\n\n & > .tippy-arrow:after {\n bottom: -5px;\n left: -15px;\n border-width: 13px 15px 13px 0;\n border-right-color: initial;\n transform-origin: center top;\n }\n }\n\n &[data-placement^='bottom'] {\n & > .tippy-arrow:before {\n top: -16px;\n left: -5px;\n border-width: 0 13px 15px 13px;\n ", "\n }\n\n & > .tippy-arrow:after {\n top: -15px;\n left: -5px;\n border-width: 0 13px 15px 13px;\n border-bottom-color: initial;\n transform-origin: center top;\n }\n }\n\n &[data-placement^='left'] {\n & > .tippy-arrow::before {\n bottom: -5px;\n right: -16px;\n border-width: 13px 0 13px 15px;\n ", "\n }\n\n & > .tippy-arrow::after {\n bottom: -5px;\n right: -15px;\n border-width: 13px 0 13px 15px;\n border-left-color: initial;\n transform-origin: center top;\n }\n }\n"])), function (props) {
24
+ return props.theme.primaryFontFamily;
25
+ }, function (props) {
26
+ return props.theme.themeProp('background', props.theme.getColor('gray-700'), props.theme.getColor('white'));
27
+ }, function (props) {
28
+ return props.theme.themeProp('box-shadow', "0px 1px 6px -3px ".concat(polished.rgba(props.theme.getColor('black'), 0.7)), "0 1px 6px -4px ".concat(props.theme.getColor('black')));
29
+ }, function (props) {
30
+ return props.theme.themeProp('border', "1px solid ".concat(props.theme.getColor('gray-800')), "1px solid ".concat(props.theme.getColor('gray-300')));
31
+ }, function (props) {
32
+ return props.theme.themeProp('color', props.theme.getColor('gray-700'), props.theme.getColor('white'));
33
+ }, function (props) {
34
+ return props.theme.themeProp('border-top-color', props.theme.getColor('gray-800'), props.theme.getColor('gray-400'));
35
+ }, function (props) {
36
+ return props.theme.themeProp('border-right-color', props.theme.getColor('gray-800'), props.theme.getColor('gray-400'));
37
+ }, function (props) {
38
+ return props.theme.themeProp('border-bottom-color', props.theme.getColor('gray-800'), props.theme.getColor('gray-400'));
39
+ }, function (props) {
40
+ return props.theme.themeProp('border-left-color', props.theme.getColor('gray-800'), props.theme.getColor('gray-400'));
41
+ });
42
+
43
+ var Popover = React__default['default'].forwardRef(function Popover(_ref, ref) {
44
+ var content = _ref.content,
45
+ interactive = _ref.interactive,
46
+ placement = _ref.placement,
47
+ duration = _ref.duration,
48
+ trigger = _ref.trigger,
49
+ offset = _ref.offset,
50
+ arrow = _ref.arrow,
51
+ visible = _ref.visible,
52
+ children = _ref.children,
53
+ props = defaultTheme._objectWithoutProperties(_ref, ["content", "interactive", "placement", "duration", "trigger", "offset", "arrow", "visible", "children"]);
54
+
55
+ var errorOffset = React.useMemo(function () {
56
+ return arrow ? 15 : 0;
57
+ }, [arrow]);
58
+ var isControlled = React.useMemo(function () {
59
+ return lodash.isBoolean(visible);
60
+ }, [visible]);
61
+ return React__default['default'].createElement(Popover$1, defaultTheme._extends({
62
+ ref: ref,
63
+ content: content,
64
+ interactive: interactive,
65
+ placement: placement,
66
+ duration: duration,
67
+ animation: 'shift-away-subtle',
68
+ trigger: isControlled ? undefined : trigger,
69
+ offset: [offset[0], offset[1] + errorOffset],
70
+ arrow: arrow,
71
+ visible: visible
72
+ }, props), children);
73
+ });
74
+ Popover.propTypes = process.env.NODE_ENV !== "production" ? {
75
+ content: defaultTheme.PropTypes.oneOfType([defaultTheme.PropTypes.string, defaultTheme.PropTypes.element]).isRequired,
76
+ interactive: defaultTheme.PropTypes.bool,
77
+ placement: defaultTheme.PropTypes.oneOf(['top', 'top-start', 'top-end', 'right', 'right-start', 'right-end', 'bottom', 'bottom-start', 'bottom-end', 'left', 'left-start', 'left-end', 'auto', 'auto-start', 'auto-end']),
78
+ duration: defaultTheme.PropTypes.number,
79
+ trigger: defaultTheme.PropTypes.string,
80
+ offset: defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.number),
81
+ arrow: defaultTheme.PropTypes.bool,
82
+ visible: defaultTheme.PropTypes.bool,
83
+ children: defaultTheme.PropTypes.node.isRequired
84
+ } : {};
85
+ Popover.defaultProps = {
86
+ content: 'Tooltip',
87
+ interactive: true,
88
+ placement: 'bottom-end',
89
+ duration: 350,
90
+ offset: [0, 8],
91
+ maxWidth: 'none',
92
+ trigger: 'click focus',
93
+ arrow: true,
94
+ visible: undefined
95
+ };
96
+
97
+ exports.Popover = Popover;
package/README.md CHANGED
@@ -4,8 +4,7 @@ This is a library containing NTBs common front-end design utilities and React co
4
4
 
5
5
  ## ✨ Usage
6
6
 
7
- To start using this library make sure you have an [NPM account](https://docs.npmjs.com/creating-a-new-npm-user-account)
8
- with read access to the `ntbjs` organization. Make sure you are signed-in to NPM with the command `npm login`.
7
+ To start using the library is as simple as installing it.
9
8
 
10
9
  You can then install the library with:
11
10
 
@@ -0,0 +1,83 @@
1
+ 'use strict';
2
+
3
+ var defaultTheme = require('./defaultTheme-870f7df1.js');
4
+ var React = require('react');
5
+ var nanoid = require('nanoid');
6
+ var polished = require('polished');
7
+ var styled = require('styled-components');
8
+
9
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
+
11
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
12
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
13
+
14
+ var _templateObject, _templateObject2, _templateObject3;
15
+ var radioSize = '18px';
16
+ var RadioLabel = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject || (_templateObject = defaultTheme._taggedTemplateLiteral(["\n padding-left: ", ";\n font-weight: 400;\n font-size: 0.875rem;\n\n ", ";\n"])), polished.math("".concat(radioSize, " + 10px")), function (props) {
17
+ return props.theme.themeProp('color', props.theme.getColor('gray-300'), props.theme.getColor('gray-600'));
18
+ });
19
+ var Radio$1 = styled__default['default'].label.attrs(defaultTheme.applyDefaultTheme)(_templateObject2 || (_templateObject2 = defaultTheme._taggedTemplateLiteral(["\n display: block;\n position: relative;\n cursor: pointer;\n line-height: ", ";\n user-select: none;\n\n &::before {\n content: '';\n position: absolute;\n border: 2px solid ", ";\n width: ", ";\n height: ", ";\n top: 0;\n border-radius: 50%;\n transition: all 200ms;\n box-sizing: border-box;\n }\n\n &::after {\n content: '';\n position: absolute;\n width: 8px;\n height: 8px;\n top: 5px;\n left: 5px;\n border-radius: 50%;\n transform: scale(0);\n transition: all 200ms;\n }\n\n &:has(input:checked) {\n ::before {\n border-color: ", ";\n }\n\n ::after {\n background: ", ";\n transform: scale(1);\n }\n\n ", " {\n opacity: 1;\n }\n }\n & {\n input[type='radio'] {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n }\n }\n\n ", "\n"])), radioSize, function (props) {
20
+ return props.theme.getColor('gray-300');
21
+ }, radioSize, radioSize, function (props) {
22
+ return props.theme.getColor('emerald-500');
23
+ }, function (props) {
24
+ return props.theme.getColor('emerald-500');
25
+ }, RadioLabel, function (props) {
26
+ return props.disabled && styled.css(_templateObject3 || (_templateObject3 = defaultTheme._taggedTemplateLiteral(["\n opacity: 0.5;\n cursor: not-allowed;\n "])));
27
+ });
28
+
29
+ var Radio = React__default['default'].forwardRef(function Radio(_ref, forwardedRef) {
30
+ var name = _ref.name,
31
+ value = _ref.value,
32
+ checked = _ref.checked,
33
+ defaultChecked = _ref.defaultChecked,
34
+ disabled = _ref.disabled,
35
+ readOnly = _ref.readOnly,
36
+ label = _ref.label,
37
+ className = _ref.className,
38
+ style = _ref.style,
39
+ onChange = _ref.onChange,
40
+ onBlur = _ref.onBlur,
41
+ rest = defaultTheme._objectWithoutProperties(_ref, ["name", "value", "checked", "defaultChecked", "disabled", "readOnly", "label", "className", "style", "onChange", "onBlur"]);
42
+
43
+ var _useState = React.useState(nanoid.nanoid()),
44
+ _useState2 = defaultTheme._slicedToArray(_useState, 1),
45
+ uniqueId = _useState2[0];
46
+
47
+ return React__default['default'].createElement(Radio$1, {
48
+ htmlFor: uniqueId,
49
+ disabled: disabled || readOnly,
50
+ className: className,
51
+ style: style
52
+ }, React__default['default'].createElement("input", defaultTheme._extends({
53
+ ref: forwardedRef,
54
+ type: "radio",
55
+ name: name,
56
+ value: value,
57
+ checked: checked,
58
+ defaultChecked: defaultChecked,
59
+ disabled: disabled || readOnly,
60
+ readOnly: readOnly,
61
+ id: uniqueId,
62
+ onChange: onChange,
63
+ onBlur: onBlur
64
+ }, rest)), React__default['default'].createElement(RadioLabel, null, label));
65
+ });
66
+ Radio.propTypes = process.env.NODE_ENV !== "production" ? {
67
+ label: defaultTheme.PropTypes.any,
68
+ name: defaultTheme.PropTypes.string.isRequired,
69
+ value: defaultTheme.PropTypes.any.isRequired,
70
+ checked: defaultTheme.PropTypes.bool,
71
+ defaultChecked: defaultTheme.PropTypes.bool,
72
+ disabled: defaultTheme.PropTypes.bool,
73
+ readOnly: defaultTheme.PropTypes.bool,
74
+ className: defaultTheme.PropTypes.string,
75
+ style: defaultTheme.PropTypes.object,
76
+ onChange: defaultTheme.PropTypes.func,
77
+ onBlur: defaultTheme.PropTypes.func
78
+ } : {};
79
+ Radio.defaultProps = {
80
+ disabled: false
81
+ };
82
+
83
+ exports.Radio = Radio;
@@ -0,0 +1,37 @@
1
+ 'use strict';
2
+
3
+ var defaultTheme = require('./defaultTheme-870f7df1.js');
4
+ var React = require('react');
5
+ var styled = require('styled-components');
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
+
9
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
10
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
11
+
12
+ var _templateObject;
13
+ var SectionSeparator$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject || (_templateObject = defaultTheme._taggedTemplateLiteral(["\n height: ", ";\n width: ", ";\n\n ", "\n"])), function (props) {
14
+ return props.vertical ? '100%' : '1px';
15
+ }, function (props) {
16
+ return props.vertical ? '1px' : '100%';
17
+ }, function (props) {
18
+ return props.theme.themeProp('background-color', props.theme.getColor('gray-800'), props.theme.getColor('gray-200'));
19
+ });
20
+
21
+ var SectionSeparator = React__default['default'].forwardRef(function SectionSeparator(_ref, forwardedRef) {
22
+ var vertical = _ref.vertical,
23
+ props = defaultTheme._objectWithoutProperties(_ref, ["vertical"]);
24
+
25
+ return React__default['default'].createElement(SectionSeparator$1, defaultTheme._extends({
26
+ vertical: vertical,
27
+ ref: forwardedRef
28
+ }, props));
29
+ });
30
+ SectionSeparator.propTypes = process.env.NODE_ENV !== "production" ? {
31
+ vertical: defaultTheme.PropTypes.bool
32
+ } : {};
33
+ SectionSeparator.defaultProps = {
34
+ vertical: false
35
+ };
36
+
37
+ exports.SectionSeparator = SectionSeparator;
@@ -0,0 +1,104 @@
1
+ 'use strict';
2
+
3
+ var defaultTheme = require('./defaultTheme-870f7df1.js');
4
+ var React = require('react');
5
+ var nanoid = require('nanoid');
6
+ var polished = require('polished');
7
+ var styled = require('styled-components');
8
+
9
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
+
11
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
12
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
13
+
14
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7;
15
+ var switchButtonSize = '16px';
16
+ var Switch$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject || (_templateObject = defaultTheme._taggedTemplateLiteral(["\n * {\n box-sizing: border-box;\n }\n\n display: flex;\n flex-direction: column;\n\n ", "\n"])), function (props) {
17
+ return props.disabled && styled.css(_templateObject2 || (_templateObject2 = defaultTheme._taggedTemplateLiteral(["\n opacity: 0.5;\n * {\n cursor: not-allowed;\n }\n "])));
18
+ });
19
+ var SwitchIndicator = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject3 || (_templateObject3 = defaultTheme._taggedTemplateLiteral(["\n display: inline-block;\n position: relative;\n ", "\n height: ", ";\n width: 32px;\n border-radius: 20px;\n border: 1px solid;\n ", "\n transition: background 200ms;\n"])), function (props) {
20
+ return props.theme.themeProp('background', props.theme.getColor('gray-900'), props.theme.getColor('gray-200'));
21
+ }, polished.math("".concat(switchButtonSize, " + 2px")), function (props) {
22
+ return props.theme.themeProp('border-color', props.theme.getColor('gray-500'), props.theme.getColor('gray-300'));
23
+ });
24
+ var SwitchIndicatorButton = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject4 || (_templateObject4 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n ", "\n height: ", ";\n width: ", ";\n border-radius: 50%;\n box-shadow: ", " 0 0px 2px 0px;\n transition: left 200ms;\n"])), function (props) {
25
+ return props.theme.themeProp('background', props.theme.getColor('gray-200'), props.theme.getColor('white'));
26
+ }, switchButtonSize, switchButtonSize, function (props) {
27
+ return props.theme.getColor('gray-500');
28
+ });
29
+ var SwitchIndicatorLabelText = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject5 || (_templateObject5 = defaultTheme._taggedTemplateLiteral(["\n padding-left: 10px;\n font-weight: 400;\n font-size: 0.875rem;\n line-height: 18px;\n\n ", ";\n"])), function (props) {
30
+ return props.theme.themeProp('color', props.theme.getColor('gray-300'), props.theme.getColor('gray-600'));
31
+ });
32
+ var SwitchLabel = styled__default['default'].label.attrs(defaultTheme.applyDefaultTheme)(_templateObject6 || (_templateObject6 = defaultTheme._taggedTemplateLiteral(["\n display: inline-flex;\n margin-right: auto;\n cursor: pointer;\n\n input[type='checkbox'] {\n position: absolute;\n opacity: 0;\n }\n\n &:has(input[type='checkbox']:not(:checked)) {\n ", " {\n left: 0;\n }\n }\n\n &:has(input[type='checkbox']:checked) {\n ", " {\n left: calc(100% - ", ");\n }\n\n ", " {\n background: ", ";\n\n ", "\n }\n }\n\n &:has(input[type='checkbox']:focus-visible) {\n ", " {\n ", "\n }\n }\n"])), SwitchIndicatorButton, SwitchIndicatorButton, switchButtonSize, SwitchIndicator, function (props) {
33
+ return props.theme.getColor('emerald-500');
34
+ }, function (props) {
35
+ return props.theme.themeProp('border-color', props.theme.getColor('gray-400'), props.theme.getColor('gray-300'), 1);
36
+ }, SwitchIndicatorButton, function (props) {
37
+ return props.theme.themeProp('outline', "8px solid ".concat(polished.rgba(props.theme.getColor('emerald-500'), 0.5)), "8px solid ".concat(polished.rgba(props.theme.getColor('emerald-500'), 0.3)), 1);
38
+ });
39
+ var Description = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject7 || (_templateObject7 = defaultTheme._taggedTemplateLiteral(["\n margin: ", " 0 0 0;\n font-size: 0.75rem;\n line-height: 1.333;\n\n ", ";\n"])), function (props) {
40
+ return props.spaciousDescription ? '16px' : '6px';
41
+ }, function (props) {
42
+ return props.theme.themeProp('color', props.theme.getColor('gray-400'), props.theme.getColor('gray-500'));
43
+ });
44
+
45
+ var Switch = React__default['default'].forwardRef(function Switch(_ref, forwardedRef) {
46
+ var name = _ref.name,
47
+ checked = _ref.checked,
48
+ defaultChecked = _ref.defaultChecked,
49
+ label = _ref.label,
50
+ disabled = _ref.disabled,
51
+ readOnly = _ref.readOnly,
52
+ description = _ref.description,
53
+ spaciousDescription = _ref.spaciousDescription,
54
+ className = _ref.className,
55
+ style = _ref.style,
56
+ onChange = _ref.onChange,
57
+ onBlur = _ref.onBlur;
58
+
59
+ var _useState = React.useState(nanoid.nanoid()),
60
+ _useState2 = defaultTheme._slicedToArray(_useState, 1),
61
+ uniqueId = _useState2[0];
62
+
63
+ return React__default['default'].createElement(Switch$1, {
64
+ disabled: disabled || readOnly,
65
+ className: className,
66
+ style: style
67
+ }, React__default['default'].createElement(SwitchLabel, {
68
+ htmlFor: uniqueId
69
+ }, React__default['default'].createElement("input", {
70
+ ref: forwardedRef,
71
+ checked: checked,
72
+ defaultChecked: defaultChecked,
73
+ disabled: disabled || readOnly,
74
+ readOnly: readOnly,
75
+ id: uniqueId,
76
+ name: name,
77
+ type: "checkbox",
78
+ onBlur: onBlur,
79
+ onChange: onChange
80
+ }), React__default['default'].createElement(SwitchIndicator, null, React__default['default'].createElement(SwitchIndicatorButton, null)), typeof label === 'string' && label.length > 0 && React__default['default'].createElement(SwitchIndicatorLabelText, null, label)), typeof description === 'string' && description.length > 0 && React__default['default'].createElement(Description, {
81
+ spaciousDescription: spaciousDescription
82
+ }, description));
83
+ });
84
+ Switch.propTypes = process.env.NODE_ENV !== "production" ? {
85
+ children: defaultTheme.PropTypes.any,
86
+ name: defaultTheme.PropTypes.string.isRequired,
87
+ checked: defaultTheme.PropTypes.bool,
88
+ defaultChecked: defaultTheme.PropTypes.bool,
89
+ label: defaultTheme.PropTypes.string,
90
+ disabled: defaultTheme.PropTypes.bool,
91
+ readOnly: defaultTheme.PropTypes.bool,
92
+ description: defaultTheme.PropTypes.string,
93
+ spaciousDescription: defaultTheme.PropTypes.bool,
94
+ className: defaultTheme.PropTypes.string,
95
+ style: defaultTheme.PropTypes.object,
96
+ onChange: defaultTheme.PropTypes.func,
97
+ onBlur: defaultTheme.PropTypes.func
98
+ } : {};
99
+ Switch.defaultProps = {
100
+ disabled: false,
101
+ readOnly: false
102
+ };
103
+
104
+ exports.Switch = Switch;